2016-11-23 42 views
6

Aşağıdaki konularda yardımınıza ihtiyacınız vardır: MongoDB. Neden endeks tarafından istekler bu kadar yavaş gerçekleştirilir?

Daha fazla 26 milyon belgeyi içeren bir MongoDB koleksiyonum var. Belgenin yapısı sabittir (pastebin.com/iBzW0Fkz)

koleksiyonu "kullanıcılar" konulu bir indeks içeren alan

db.conversations.getIndexes(); 

SONUÇ - pastebin.com/xHecpw00

alanı için tüm talepler " kullanıcılar" gerçekleştirilir çok yavaş (100'den msn)

db.getCollection('conversations').find({users: {$all: ["5942328", "9082468"]}}); 

AÇIKLAYINIZ - pastebin.com/0C11Cr9F

db.getCollection('conversations').find({users: "9163099"}); 
AÇIKLAYINIZ - pastebin.com/CmvuDf10

soruların bir listesini:

    dizine göre istekleri kadar yavaş gerçekleştirilir Neden
  1. ?
  2. Mongodb sunucusunun veya işleminin yeniden başlatılmasından sonra indeksler nasıl ısıtılır? WiredTiger motorunda Touch() komutu artık mevcut değil. İşte

ek bir bilgileri The

db.stats(); 

SONUÇ olduğunu - pastebin.com/9JZF8ChQ

db.getCollection('conversations').stats(); 

SONUÇ - pastebin.com/17yV4Fsi

db.conversations.getIndexes(); 

SONUÇ - pastebin .com/xHecpw00

sunucuyla ilgili 363.210

Bilgi:

lscpu - HDD'den operasyonu okumak bir varsayım vardır

olduğunu pastebin.com/w5XYuY3U - pastebin.com/k7wUE4gH

lshw -Kısa bir darboğaz ve SSD bu sorunu çözebilir, ancak bunu test etme fırsatı yoktur.

Şimdiden teşekkürler.

cevap

0
  1. Sorun şu ki, çok fazla veriye sahip olmanız.
  2. Dizininiz, dizinin MongoDB dizini dizinin her bir değeri gibi çok büyük olduğu için etkin olmayan dizi alanındadır, böylece tek tek öğeler için sorgulayabilirsiniz.
Sen birden çok örneği arasında veri bölmek Kırma işleminde içine bakmak, ancak almak unutmayın isteyebilirsiniz

users field as shard key

İlgili konular