2011-05-19 26 views
7

Mesajlaşma sistemimizi MongoDB cihazına taşıyorum ve kullanıcı başına düşen mesaj sayısı gibi çeşitli istatistiklere göre hangi yaklaşımı benimseyeceğimi merak ediyorum. MS SQL veritabanında Kullanıcı başına farklı sayımlara sahip olduğum ve karşılık gelen tablolarda tetikleme ile güncellendikleri bir tablo. Örneğin, UserA'nın ne kadar okunamayan mesaj sayısını SELECT Count(*) numaralı bir işlemi çağırmadan öğrenebileceğini biliyorum. MongoDB'de fonksiyon pahalı mıdır?MongoDB: Calling Count() vs bir koleksiyondaki koleksiyonları sayıyor

count fonksiyonu MongoDB'de de pahalı mı? Harita/azaltma hakkında okumaya başladım, ancak sitem yüksek bir yük oluşturuyor, dolayısıyla istatistiklerin gerçek zamanlı olarak güncellenmesi gerekiyor ve benim anlayışım harita/azaltmanın zaman alıcı bir işlem olması.

MongoDB'de çeşitli toplu sayımların toplanmasında en iyi (performans-bilge) yaklaşım hangisi olurdu? Eğer çok fazla veri var ise

cevap

4

, o zaman ben aynı yaklaşımı ile sopa ve böyle bir koleksiyon şey kullanarak, yeni bir mesaj, bir kullanıcı için ilave başlanacağı zaman agrega sayacını artırmak:

Eğer bir uygulama mantığı sayacını artırmak diye, maalesef (? ya neyse) sayar

{ 
    userid: 123, 
    messages: 10 
} 

, MongoDB hiçbir tetikleyiciler vardır:

db.counts.update({ userid: 123 }, { $inc: { messages: 1 } }) 

Bu en iyi performansın edeceğiz ve muhtemelen de hızlı aramalar için userid alanında bulunan bir dizin koyardım: Veri denormaliztion için

db.counts.ensureIndex({ userid: 1 }) 
4

mongodb iyi uyum. Ve sitenizin yüksek yükü varsa, hemen hemen her şeyi önceden hesaplamanız gerekir, bu nedenle mesaj sayısını artırmak için $inc kullanın, şüphesiz.