Eğer MapReduce tercihinizse, karmaşık operasyonların üstesinden gelmek için şimdi MongoDB'nin Toplama İşlem Hattı'na geçmenin tam zamanı olabilir.

Toplama hattı, MongoDB'de karmaşık sorguları çalıştırmanın önerilen yoludur. MongoDB'nin MapReduce'unu kullanıyorsanız, daha verimli hesaplamalar için toplama hattına geçmeniz daha iyi olur.

MongoDB'de Toplama Nedir ve Nasıl Çalışır?

Toplama ardışık düzeni, gelişmiş çalıştırma için çok aşamalı bir süreçtir. MongoDB'deki sorgular. Verileri boru hattı adı verilen farklı aşamalardan geçirir. Bir seviyeden elde edilen sonuçları diğerinde operasyon şablonu olarak kullanabilirsiniz.

Örneğin, bir eşleştirme işleminin sonucunu, istenen çıktıyı elde edene kadar bu sıraya göre sıralamak için başka bir aşamaya aktarabilirsiniz.

Toplama hattının her aşamasında bir MongoDB operatörü bulunur ve bir veya daha fazla dönüştürülmüş belge oluşturulur. Sorgunuza bağlı olarak bir düzey, işlem hattında birden çok kez görünebilir. Örneğin, şunu kullanmanız gerekebilir: $sayımı veya $sıralama operatör toplama hattında birden fazla kez aşamalar gerçekleştirir.

instagram viewer

Toplama Boru Hattının Aşamaları

Toplama hattı, verileri tek bir sorguda birden çok aşamadan geçirir. Birkaç aşama vardır ve bunların ayrıntılarını MongoDB belgeleri.

Aşağıda en sık kullanılanlardan bazılarını tanımlayalım.

$match Aşaması

Bu aşama, diğer toplama aşamalarına başlamadan önce belirli filtreleme koşullarını tanımlamanıza yardımcı olur. Toplama hattına dahil etmek istediğiniz eşleşen verileri seçmek için bunu kullanabilirsiniz.

$grup Aşaması

Grup aşaması, anahtar/değer çiftlerini kullanarak verileri belirli kriterlere göre farklı gruplara ayırır. Her grup çıktı belgesindeki bir anahtarı temsil eder.

Örneğin aşağıdakileri göz önünde bulundurun satış örnek veri:

Toplama hattını kullanarak her ürün bölümü için toplam satış sayısını ve en yüksek satışları hesaplayabilirsiniz:

{
$group: {
_id: $Section,
total_sales_count: {$sum: $Sold},
top_sales: {$max: $Amount},
}
}

_id: $Bölüm çift, çıktı belgesini bölümlere göre gruplandırır. Belirterek top_sales_count Ve en iyi satışlar MongoDB, toplayıcı tarafından tanımlanan işleme göre yeni anahtarlar oluşturur; bu olabilir $toplam, $dakika, $maks., veya $ortalama.

$atlama Aşaması

Şunu kullanabilirsiniz: $atla çıktıda belirli sayıda belgenin atlanması aşaması. Genellikle grup aşamasından sonra gelir. Örneğin, iki çıktı belgesi bekliyor ancak birini atlıyorsanız, toplama yalnızca ikinci belgenin çıktısını alacaktır.

Bir atlama aşaması eklemek için $atla toplama boru hattına operasyon:

...,
{
$skip: 1
},

$ sort Aşaması

Sıralama aşaması, verileri azalan veya artan düzende düzenlemenizi sağlar. Örneğin, önceki sorgu örneğindeki verileri azalan düzende sıralayarak hangi bölümün en yüksek satışa sahip olduğunu belirleyebiliriz.

Ekle $sıralama önceki sorgunun operatörü:

...,
{
$sort: {top_sales: -1}
},

$limit Aşaması

Sınırlama işlemi, toplama ardışık düzeninin göstermesini istediğiniz çıktı belgelerinin sayısını azaltmaya yardımcı olur. Örneğin, şunu kullanın: $ sınırı operatörün önceki aşamaya göre en yüksek satışları elde eden bölümü alması:

...,
{
$sort: {top_sales: -1}
},

{"$limit": 1}

Yukarıdakiler yalnızca ilk belgeyi döndürür; sıralanmış çıktının en üstünde göründüğü için bu, en yüksek satışa sahip bölümdür.

$Proje Aşaması

$proje sahne, çıktı belgesini istediğiniz gibi şekillendirmenize olanak tanır. Kullanmak $proje operatörüyle, çıktıya hangi alanın dahil edileceğini belirleyebilir ve anahtar adını özelleştirebilirsiniz.

Örneğin, olmayan bir örnek çıktı $proje sahne şöyle görünüyor:

Bakalım neye benziyor $proje sahne. Eklemek için $proje boru hattına:

...,

{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$total_sales_count",
"TopSale": "$top_sales",

}
}

Verileri daha önce ürün bölümlerine göre gruplandırdığımız için yukarıdakiler, çıktı belgesindeki her ürün bölümünü içerir. Ayrıca çıktıda toplu satış sayısının ve en yüksek satış özelliğinin şu şekilde olmasını sağlar: ToplamSatılan Ve En Çok Satan.

Son çıktı öncekine kıyasla çok daha temiz:

$ Gevşeme Aşaması

$gevşemek Aşama, bir belge içindeki bir diziyi ayrı ayrı belgelere ayırır. Aşağıdakileri al Emirler veriler, örneğin:

Kullan $gevşemek yapıyı bozma aşaması öğeler diğer toplama aşamalarını uygulamadan önce dizi. Örneğin, gevşemeyi öğeler Her ürün için toplam geliri hesaplamak istiyorsanız dizi mantıklıdır:

db.Orders.aggregate(
[
{
"$unwind": "$items"
},
{
"$group": {
"_id": "$items.product",
"total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
}
},
{
"$sort": { "total_revenue": -1 }
},

{
"$project": {
"_id": 0,
"Product": "$_id",
"TotalRevenue": "$total_revenue",

}
}
])

Yukarıdaki toplama sorgusunun sonucu:

MongoDB'de Toplama İşlem Hattı Nasıl Oluşturulur

Toplama ardışık düzeni çeşitli işlemleri içerse de, daha önce öne çıkan aşamalar, her biri için temel sorgu da dahil olmak üzere, bunları ardışık düzende nasıl uygulayacağınıza dair size bir fikir verir.

Öncekini kullanma satış veri örneğinde, toplama hattına daha geniş bir bakış açısı kazandırmak için yukarıda tartışılan aşamalardan bazılarını tek parça halinde ele alalım:

db.sales.aggregate([

{
"$match": {
"Sold": { "$gte": 5 }
}
},

{

"$group": {
"_id": "$Section",
"total_sales_count": { "$sum": "$Sold" },
"top_sales": { "$max": "$Amount" },

}

},

{
"$sort": { "top_sales": -1 }
},

{"$skip": 0},

{
"$project": {
"_id": 0,
"Section": "$_id",
"TotalSold": "$total_sales_count",
"TopSale": "$top_sales",

}
}

])

Son çıktı daha önce gördüğünüz bir şeye benziyor:

Toplama Boru Hattı vs. Harita indirgeme

MongoDB 5.0'dan başlayarak kullanımdan kaldırılana kadar, MongoDB'de veri toplamanın geleneksel yolu MapReduce'du. Rağmen MapReduce'un daha geniş uygulamaları var MongoDB'nin ötesinde, toplama hattından daha az verimlidir ve haritayı yazmak ve işlevleri ayrı ayrı azaltmak için üçüncü taraf komut dosyası oluşturmayı gerektirir.

Öte yandan toplama hattı yalnızca MongoDB'ye özeldir. Ancak karmaşık sorguları yürütmek için daha temiz ve daha etkili bir yol sağlar. Basitlik ve sorgu ölçeklenebilirliğinin yanı sıra, öne çıkan ardışık düzen aşamaları çıktıyı daha özelleştirilebilir hale getirir.

Daha çok var toplama hattı ve MapReduce arasındaki farklar. MapReduce'tan toplama hattına geçerken bunları göreceksiniz.

MongoDB'de Büyük Veri Sorgularını Verimli Hale Getirin

MongoDB'deki karmaşık veriler üzerinde derinlemesine hesaplamalar yapmak istiyorsanız sorgunuzun mümkün olduğunca verimli olması gerekir. Toplama hattı gelişmiş sorgulama için idealdir. Verileri ayrı işlemlerde işlemek yerine, ki bu genellikle performansı düşürür, toplama, hepsini tek bir performanslı işlem hattında paketlemenize ve bir kez yürütmenize olanak tanır.

Toplama hattı MapReduce'tan daha verimli olsa da, verilerinizi dizine ekleyerek toplamayı daha hızlı ve daha verimli hale getirebilirsiniz. Bu, MongoDB'nin her toplama aşamasında taraması gereken veri miktarını sınırlar.