2012-04-30 16 views
9

Reddit şu anda veritabanını PosgreSQL'den Apache Cassandra'ya geçiriyor. Reddit'in Cassandra'da hangi veritabanı şemasının kullandığını bilen var mı?Reddit'te kullanılan Cassandra veritabanı şeması nedir?

+0

Bilmiyorum, ben Reddit yapar dışındaki emin kimse değilim, ama bu gerçekten önemli gerekir? Buradaki birkaç kişiden fazla beklemenizi bekliyorum, * uygulamanız için doğru olan şemayı belirlemeye yardımcı olabilirsiniz. –

+2

Reddit, GitHub’daki siteye güç veren kodu yayınladı: https://github.com/reddit/reddit. Kodu arayabilir ve şemayı oradan belirleyebilirim. Ama burada sormanın daha kolay olduğunu düşündüm. –

+1

Kodu gözden geçirdim ve farklı şekillerde oluşturulan ve kullanılan iki düzine farklı sütun ailesi gibi bir şey görüyorum. Özellikle merak ettiğiniz bir alan var mı, yoksa cassandra-cli'den şovun şeması gibi bir şeye mi bakıyorsunuz? –

cevap

-1

Ben de tam Reddit şema bilmiyorum ama arşivlemek istediğiniz ne için, bunun yerine bir ilişkisel veritabanı belge tabanlı veritabanı yorumların bir hiyerarşi tasarrufu sağ yolda. Her bir kök yorumu için bir belge tutmanızı ve ardından tüm çocukları (ve çocukların çocuklarını) bu yoruma eklemenizi tavsiye ederim.

CouchDB ve MongoDB olarak doğrudan JSON belgeleri saklayabilirsiniz. Cassandra'da JSON'u String olarak kaydederdim. Yani veri yapısı sadece

root-comments 
{ 
    root-comment-id 
    root-comment-json-string 
} 

ve her kök-comment-json-string şu şekilde görünecektir olacaktır:

{ 
comment : "hello world" 
answers : 
[ 
    { 
    comment : "reply to hello world" 
    answers : 
    [ 
     { 
     comment : "thanks for the good reply" 
     answers : [] 
     }, 
     { 
     comment : "yes that reply was indeed awesome" 
     answers : [] 
     } 

    ] 
    } 

] 
} 

ayrıca bir UserName, Kullanıcı Kimliğini, Zaman Damgası eklemek isteyebilirsiniz, .. .. vb her yorumun yapısına.

Bu 'denormalized' yapısı verilerin bir sürü varsa sorguları çok hızlı bir normalize ilişkisel yapısını oluşturan yapı taşlarından kıyasla hale yapacaktır. Eğer örneğin geniş bir kullanıcı ölçek için böyle bir sistemi uygulamak zaman tüm istisnaların dikkat çekmek zorunda kalacak Her durumda

, bu olabilir. Birisi B yorumunu B ile yanıtlamak için yanıt verirse ne olur, ancak aynı zamanda (veya daha sonra) yorum A silinir. Eğer "cassandra hiyerarşik veri" internet arama yaparsanız

bazı başka yaklaşımlar bulmak, ama hepsi geri normalleşme gitmek ya da bir 'sonsuz' hiyerarşi için tam değildir.

+1

Tanımladığınız yaklaşımdaki sorun, yeni bir yorum eklendiğinde, JSON'u güncellemeniz, yani ayrıştırmanız, yorumu birleştirmeniz ve ardından Cassandra'ya yazmanız gerektiğidir. Binlerce yorum içeren bir ağaç hayal edin. Yani bu yaklaşım alım için daha ucuz, ancak güncelleme yaparken pahalı. İlişkisel yaklaşım, diğer bir yoldur, bir yorum ağacının alınmasında pahalı ve güncellenirken ucuzdur. En iyi yaklaşımın bir melez olduğunu düşünüyorum, en fazla ithalat yorumunu açıkladığınız şekilde ve en önemlisi ilişkisel bir şekilde saklayın. –

+1

@ Calin-AndreiBurloiu Evet doğru. Bu tür bir yorum sisteminin (reddit'te olduğu gibi) güncellemelerden çok daha fazla okuduğu benim anlayışım. Bu yüzden cevabım tam olarak doğru çözümdür. –

+0

Ve sonucun ayrıştırıcısı, JSON olduğundan, istemcide JavaScript'te kolayca yapılabilir. –

İlgili konular