SORU
21 Mart 2011, PAZARTESİ


MongoDB ilişkiler: referans gömmek?

--İlişkisel bir veritabanı arka plan gelen MongoDB yeniyim. Bazı yorumlar ile bir soru yapısı tasarım yapmak istiyorum, ama yorum için kullanılacak bilmiyorum: embed reference?

Bazı yorumlar şöyle: stackoverflow gibi bir soru böyle bir yapıya sahip:

Question
    title = 'aaa'
    content = bbb'
    comments = ???

İlk başta, gömülmüş açıklamalar (embed MongoDB tavsiye edilir bence), bu gibi kullanmak istiyorum:

Question
    title = 'aaa'
    content = 'bbb'
    comments = [ { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'} ]

Ama bu durum için endişeleniyorumEğer belirli bir yorum düzenlemek istiyorum, nasıl kendi içeriği ve soru alabilirim?_id bulmama izin yok, ne question_ref bana soru bulalım. (_id question_ref.) olmadan bunu yapmak için herhangi bir yolu varsa bilmiyorum o kadar acemi değilim

Kullanmak zorunda ref embed olmaz mı? Sonra yorumlar için yeni bir koleksiyon oluşturmak zorunda mıyım?

CEVAP
21 Mart 2011, PAZARTESİ


Bu bilimden çok bir sanattır. Mongo Documentation on Schemas iyi bir referanstır, ama burada dikkat etmeniz gereken bazı şeyler şunlardır:

  • Mümkün olduğunca koymak

    Belge bir veritabanı sevinç Katıldı sürü ortadan kaldırır. İlk içgüdüsü gibi tek bir belge kadar yer olmalıdır. MongoDB belgeleri verimli bir şekilde bu yapı içinde sorgu yapabilirsiniz çünkü yapısı, ve çünkü SQL gibi veri normalleştirmek için acil ihtiyaç yok. Özellikle yararlı arayla üst belgedeki veriler aynı belge parçası olmalıdır.

  • Çeşitli yerlerden havale olabilir o ayrı veri kendi koleksiyonu.

    Bu "depo alanı" tutarlılık "sorunu. veri olarak" sorun bu kadar değil. Eğer çok kayıt aynı verilere bakın Eğer daha verimli ve daha az hata eğilimli tek bir kayıt ve güncelleme başvuruları tutmak için diğer yerlerde.

  • Belge değerlendirmeleri boyutu

    MongoDB tek bir belge üzerinde 4 MB (1.8 ile 16 MB) boyutu sınırı uygular. Veri GB dünyasında bu küçük görünüyor, ama aynı zamanda 30 milyon Tweet ya da 250 bin tipik Taşma cevaplar ya da 20 flicker fotoğraf Yığını. Öte yandan, bu tipik bir web sayfasında aynı anda isteyebilirsin o zaman çok daha fazla bilgi vardır. Sorularınıza daha kolay hale getirecek ne ilk düşünün. Birçok durumda belge boyutları hakkında endişe erken optimizasyonu olacak.

  • Karmaşık veri yapıları:

    MongoDB keyfi iç içe geçmiş yapıları veri deposu, ancak bunları verimli bir şekilde arama yapabilirsiniz. Eğer verilerinizi bir ağaç, orman ya da grafik formlar, etkili bir şekilde ayrı bir belge içinde her düğüm ve kenarları saklamanız gerekir. (Veri depoları özellikle de düşünmelisiniz bu tür veri) için tasarlanmış olduğunu unutmayın

    Ayrıca imkansız bir belgedeki öğelerin bir alt kümesini döndürmek için daha been pointed out vardır. Eğer pick-ve-tercih her belgenin birkaç bit gerekiyorsa, onları ayırmak için daha kolay olacaktır.

  • Veri Tutarlılığı

    MongoDB bir ticaret verimlilik ve tutarlılık arasında yapar. Bu kuralı bir tek belge olan değişikliklerher zamanbirden fazla belge güncelleştirmeleri hiçbir zaman atom olarak kabul edilmesi gerekirken, atom,. Ayrıca "(istemci mantığı örneğin" kilit "field) kullanarak bunu yapabilir misin sunucuda" bir kayıt kilitleme yolu yok Size şema tasarlarken veri tutarlı tutmak nasıl düşünün. Bir belge içinde kalmasını genellikle, daha iyi.

Bütün bunlar ne için, yorum gömmek, ve her bir yorum bir Objectıd ile bir kimlik alanı verirdim. Objectıd kullanmak yerine Eğer isterseniz de oluşturulmuş, böylece zaman damgası durmasına yardımcı olur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • sknbp

    sknbp

    16 Kasım 2006
  • Techmoan

    Techmoan

    31 Mayıs 2009