2013-03-28 14 views
5

Şu anda yerleşik "_id" (ObjectId) tarafından indekslenen/sorgulanan bir koleksiyona sahibim. Sıralı olduğundan (tarih öneki) bu tuşa basmak istemiyorum. Mongo 2.4 belgelerine göre, bu tuşun bir karma sesine sarılabiliyorum, bu da kulağa harika geliyor. böylece gibi:Hashed Shard Anahtarının Doğru Uygulanması MongoDB'de

sh.shardCollection ("records.active", {_ID: "karma"})

Soru:

: Ben ilk aktif koleksiyonu karma endeksi oluşturmak gerekiyor db.active.ensureIndex ({_id: "hashed"})

Yoksa bu gerekli değil mi? Gerekli olandan daha fazla indeksleme ile yer bırakmak istemiyorum.

İlgili soru: eminIndex ({_id: "hashed"}) ile bir karma dizini oluşturursam varsayılan "kimlik" dizinini bırakabilir miyim? Mongo, _id alanında soruları sormak, onları karıştırmak ve karma dizine karşı çalıştırmayı biliyor mu?

Teşekkür ...

cevap

3

İkisi endeksi _ID ve indeksi _ID karma ihtiyaç olacaktır. MongoDB 2.4'te, koleksiyonunuzu paylaşmadan önce db.active.ensureIndex ({_id: "hashed"})'u açıkça belirtmeniz gerekmez, ancak sh.shardCollection ("records.active", { _id: "hashed"}) sizin için karma dizini yaratacaktır. Kopyalama için

_id dizini gerekiyor.

MongoDB'de bir koleksiyona serpmek için shard anahtarında bir indeks var. Bu, MongoDB 2.4'te değişmedi ve çalışmaya devam etmek için hashed _id endeksi gerekli olacaktır.

0

Kendim denedim, mongoDB 2.4.11 kullanarak.

Dokümanları yeni bir koleksiyona oluşturup ekliyorum. Sorgu, mongos sunucusuna ateşlendi. Eklediğim 1.000.000 dokümanın tümü, "A" parçasını "ana bilgisayar" olarak ele alıyor (sh.status() kullanarak kontrol edebilirsiniz).

{ 
    "proposedKey" : { 
     "_id" : "hashed" 
    }, 
    "curIndexes" : [ 
     { 
      "v" : 1, 
      "name" : "_id_", 
      "key" : { 
       "_id" : 1 
      }, 
      "ns" : "database.collection" 
     } 
    ], 
    "ok" : 0, 
    "errmsg" : "please create an index that starts with the shard key before sharding." 
} 

aşağıdaki gibi

sh.shardCollection("database.collection",{_id:"hashed"}) 

o hata gösterir, aşağıda başına kırığından koleksiyonuna komutu yapmaya çalışırken

Ancak Yani cevap onu Evet

  1. olduğunu ihtiyaçlar hashed endeksi
  2. önceden yedim, MongoDB elle aşağıda komutunu kullanarak yapmak gerektirir: ({_ID: "karma"})

    db.collection.ensureIndex