SORU
13 Ocak 2011, PERŞEMBE


Olasılık'iki farklı koleksiyonlarında oluşturulan s olmak Mongo Objectıd yinelenen?

Aynı Mongo Objectıd iki farklı koleksiyon bir belge oluşturulmasına mümkün müdür? Kesinlikle çok zor olduğunu biliyorum, ama mümkün mü?

Çok belli olmadan, bunu sormamın sebebi şu an üzerinde çalıştığım bir uygulama ile sitemizin tam teşekküllü kullanıcılar dönüştürmek için umut olan seçilmiş görevliler kamu profilleri gösteriyoruz. Şu anda sitemizin üyesi olmayan kullanıcılar ve seçilmiş yetkililer için ayrı bir koleksiyon var. Çeşitli diğer belgeler her kişi seçilmiş kendi resmi Objectıd kullanarak göster o seçimle ilgili verilerin çeşitli parçaları içeren vardır.

Oluşturduktan sonra hesabı biz hala vurgulamak verileri bu ilişkili için seçilen resmi ama onlar da artık bir parçası, kullanıcıların koleksiyonu ile ilgili kullanıcı Objectıd için harita profilinde etkileşimleri ile bizim uygulama.

Biz basladm dönüştürme uygulama MySql, Mongo bir kaç ay önce ve bayağı geçiş sakladığımız eski MySql kimliği için hem de bu veri türleri ve ediyoruz da başlangıç için artık mağaza seçilen resmi Mongo Objectıd kullanıcıların belge göster tekrar seçilen resmi veriler.

Sadece Objectıd yeni kullanıcı basit şeyler yapmak için önceki seçilmiş resmi Objectıd olarak belirtme merak ediyordum ama Olası varolan herhangi bir kullanıcı ile bir çarpışma Objectıd değildi emin olmak istedim.

Anlayışın için teşekkürler.

Edit: Kısa bir süre bu soruyu yazdıktan sonra, önerdiğim çözüm çok iyi bir fikir olmadığını fark ettim. Daha iyi bir yerde olduğumuz geçerli şema tutmak için ve sadece bu seçilmiş '_ıd' kullanıcıların belge. link olur

CEVAP
17 NİSAN 2011, Pazar


Kısa Cevap

İlk sorunuza doğrudan bir yanıt vermek için mi: EVET, eğer BSON Nesne KİMLİĞİ oluşturma kullanırsanız, o zamansürücülerin çoğu içinKimlikleri neredeyse kesinlikle koleksiyonları arasında eşsiz olacak. Aşağıda "neredeyse kesin" demek. ne için bakın

Uzun Cevap

BSON Nesne KİMLİĞİ sürücüleri koleksiyonları arasında benzersiz olması muhtemeldir Mongo DB tarafından oluşturulan. Bu esas KİMLİĞİNİ son 3 bayt yüzündensürücülerin çoğu içinstatik artan bir sayaç ile oluşturulan. Bu sayaç koleksiyonu-bağımsız; evrensel. Java sürücüsü, örneğin, rasgele başlatıldı, statik bir Atomicİnteger kullanır.

Neden, Mongo belgeleri, Kimlikleri vardır diyorsunuz "büyük olasılıkla benzersiz, düpedüz benzersiz OLACAK" demek yerine"? Üç ihtimal benzersiz bir KİMLİK alamazsın yerde oluşabilir (lütfen eğer daha fazla varsa bana bildirin):

Bu tartışma daha önce, BSON Nesne KİMLİĞİ oluşur hatırlayın:

[4 bayt epoch beri saniye, 3 bayt karma makinesi, 2 işlem KİMLİĞİ bayt 3 bayt sayacı]

Burada üç olasılık, bir hareket almak için nasıl kendiniz için yargıç:

1) taşma Sayacı: sayaç. 3 bayt vardır Eğer ne Ekle üzerinden 16,777,216 (2^24) belgeleri tek bir ikinci, aynı makine, aynı süreç, sonra da bir taşma artan bayt sayacı ve sonunda iki Nesne Kimlikleri paylaşan aynı zaman, makine, süreç ve sayaç değerleri.

2) Sayaç olmayan artırma: bazı Mongo sürücüleri sayaç bayt için artan numaraları yerine rasgele sayılar kullanın. Bu durumlarda, bir 1/16,777,216 şans getirici bir özgün olmayan KİMLİK, ama yalnızca bu iki Kimliği oluşturulur aynı ikinci (yani önce zaman bölümün ID güncellemeleri sonraki ikinci), aynı makine, aynı süreç.

3) Makine ve süreç aynı değerlere karma. Makine KİMLİĞİ ve process ID değerleri, oldukça olası bir senaryo, iki farklı makineler için aynı değerleri göster. Eğer bu, aynı anda iki farklı makinelerde iki sayaçları, aynı saniye boyunca aynı değeri üretmek oluşursa, o zaman bir yinelenen ID ile bitireceğiz.

Bu dikkat için üç senaryo var. Senaryo 1 ve 3 oldukça Olası görünüyor, ve senaryo 2: Eğer doğru sürücüyü kullanıyorsanız tamamen önlenebilir. Sürücü kaynağını kontrol etmek için emin olmak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ecf150king

    ecf150king

    20 Ocak 2006
  • fufko

    fufko

    27 ŞUBAT 2006
  • Jejoab

    Jejoab

    4 NİSAN 2008