2010-11-22 11 views
0

Soy bakma tipi verilerini depolayan bir yakut uygulaması yazıyorum. Yani Soy ağacı.Ancestry tipi Veritabanı için Öneri: MongoDB, Redis, vb?

Uygulamanın geri kalanı için, kendisini hiyerarşik bir yapıya harcadığı için depolamak için MongoDB kullanıyorum, ancak atalara ait veriler, bir anlamda hiyerarşik olsa bile, bu modele tam olarak uymuyor. Bunları işlemek için daha uygun bir veritabanı katmanında takas yapmam gerekip gerekmediğine dair bir öneri varsa merak ediyorum.

I.I.I.e. A, B (çift yönlü) ile eşleştirilir ve ebeveynleri C ve D. B'nin ebeveynleri vardır E ve F. A ve B'nin çocukları G, H, I'dir. G, H ile eşlenir ve böyle devam eder.

Bu yüzden bir düğümün 2 üst düğümü olduğu için oldukça özendirici değil. Bu nedenle, her iki ebeveyn de aynı ağacı çift kopyalayacağından, gömülme MongoDB'de anlam ifade etmiyor. Sosyal bir grafiğe sadece daha sert yaklaşıyor (sadece 2 tür ilişki var). Redis setlerinin çok iyi çalışacağını düşünüyorum, fakat Polyglot sürekliliğiyle yığını komplike hale getirmeden önce, benzer yapıları tasarlamış olabileceklerden bazı geri bildirimler alabileceğimi umuyordum. Redis'le olan diğer kaygımın hafızada saklanmakta olan bu kayda değer bir şey olmasa da, sadece Redis'teki ilişkilerin MongoDB belgelerindeki nesne verileriyle depolanmasaydı muhtemelen iyi olurdu.

cevap

2

Belki de bir grafik veritabanını, etki alanına çok daha yakın olduğu için denemelisiniz. Ve orada dışarıda bir kaç tane var. http://nosql.mypopescu.com/post/498705278/quick-review-of-existing-graph-databases

+0

Ben neo4j ile oynadım ve gerçekten çok kaygan görünüyor. Ancak lisanslarının büyük bir hayranı değil. Şey, mongodb gibi bir belge veritabanımın uygulamasının geri kalanı için mükemmel, bu yüzden ya her şey için mongodb kullanacağım ya da sadece atalara ait veriler için başka bir çözümde karışacağım. Grafik veritabanı bana redis setlerine göre avantajlar sağlar mı? Bir grafik gibi görünüyor db overkill olurdu. –

+0

Uygulamanızın içeriği konusunda herhangi bir bağlam yoksa, fazlalık olup olmadığını söylemek mümkün değildir. İlişkisel olmayan bir veri tabanı kullanırken, ön izlemeyi düşünmeniz gereken iki şey vardır: verileri nasıl saklıyorsunuz ve ona nasıl erişiyorsunuz. 2. bölüm sizin açıklamanızdan eksiktir, bu yüzden cevaplanması imkansızdır. 1 seviyeden daha derin ilişkilerde gezinmeniz gerekecek mi (Redis ya da Twitter'ın FlockDB'leriyle elde edebileceğiniz)? Daha genel olarak, ilişkilerde gezinmek ve onun yönlerini keşfetmek için ne kadar çok ihtiyacınız varsa o zaman grafik db daha mantıklıdır. – alexpopescu

+0

Eh, yayınlanmasından bu yana konuyu biraz araştırıyorum. Esasen bir DAG (Yönlendirilmiş Asiklik Grafik) ile uğraşıyorum. Neo4j (ve muhtemelen diğer grafik DB'leri) kesinlikle düğümleri geçmek için en uygun olana benziyor. Kullanıcılar herhangi bir düğüme bir düğüm ekleyemez (eğer varsa, anne var ise anne ve birden fazla çocuk) ve sistem grafiğin belirli bir derinliğe kadar görselleştirilmesini sağlar. Odaklanmış düğümden herhangi bir yönde 3 yarıçapı söyleyin. Yani 3 noktaya kadar geçiş yapacağım. Kesinlikle bir grafik db problemi gibi geliyor. –