9

ben n Kullanıcılar bağlı n Kullanıcısı olan Şu anda inşa ediyorum bir uygulama için bir grafik modelleme ediyorum, ben de n Kullanıcılar tarafından makbul olabilir n Mesajını var. Bir kullanıcı yüz Mesaj düğümleri sever Yani yapı Bu düğüm, post n olduğunda, kenarları da olacak 100 kenarları (ilişkilerinde,) enerji üretecek olan, belirli bir kullanıcı için enter image description heren düğümlerini tek bir düğüme bağlamanın en iyi yolu?

böyle bir şey, olmazdı olmak , böylece bir kullanıcı n Kullanıcılara ve n kayıtlara ve gelecekteki düğüm tiplerine bağlanır.

kullanıcılar bağlanacak Koleksiyon adında bir ara düğüm vardır

enter image description here

, böylece böyle bir şey olmazdı verili düğümü için kenarları azaltan bir ara düğüm kullanmanın Yani Bu özellik bir özellik grafiği olduğundan, ara düğümde bir özellik ekleyebilir ve bağlantıların kullanıcı gibi davranmasını sağlayabilir (örneğin, Likes.username = Kullanıcı.kullanıcı adı)

Buna benzer soru (Graph database modelling: Should i use a collection node to avoid to many rel on a node)

benim düşünce, birinci düğümden önemsiz izole dolayısıyla özel algoritmalar hızlandırabilir ara bağlantı düğümleri

Bu yöntemdir.

Sorularım,

  1. ölçekler bu en iyi çözüm nedir

    ?
  2. Bu çözümü neden diğeri üzerinde düşünmeliyim?

cevap

6

Öğrenme Neo4j kitabına göre (download in the Neo4j's web site için Rik Van Bruggen tarafından hazırlanmıştır) sorununuzu çok fazla bağlantıya sahip "Dense node" veya "Supernode": düğümleri olarak adlandırın. Grafik veritabanı yönetim sistemi ne belirlemek amacıyla bu düğüme bağlı ilişkilerin tüm değerlendirmek zorunda kalacaktır çünkü kitaba göre Still

, supernodes

"grafik geçişleri için gerçek bir sorun haline gelir Sonraki adım , grafik geçişinde olacaktır. "

Rik tarafından önerilen çözüm, çözümünüze çok yakındır (Ara düğüm ekle): Kullanıcı ve sevdiğiniz Mesajlar arasında bir "meta" düğümü eklemekten oluşur. Bu meta düğüm en fazla 100 bağlantıya sahip olmalıdır. Geçerli meta düğüm popüler sanatçılarla bir örneğini gösteren şeklin örneğe göre yeni meta düğüm oluşturulur ve hiyerarşiye eklenmelidir 100 bağlantıları, ulaşır ve hayranlarınızın ise:

Dense node

Neo4j ekibi Bir düğüm için ilişkilerin bağlantılı bir liste yapısında diskte nasıl saklandığını değiştiren this Github commit (örneğin) 'de görüldüğü gibi, süpernodlarla ilgili performansı geliştirmek için büyük çaba sarf etmiştir.

En iyisinin, grafik modelinizi mümkün olduğunca basit tutması gerektiğine inanıyorum. Yoğun bir düğüm sorununa (henüz) sahip değilsiniz ve erken bir optimizasyon muhtemelen modelinize gerekli bazı karmaşıklıkları katacaktır. Gelecekte yoğun düğümler bir sorun haline gelirse, modelinizi daha doğru bir şekilde değiştirebilirsiniz. Basitlik ilk başta iyi bir seçimdir.

Aşağıdaki bağlantıları kullanarak grafik veritabanında süper düğümler hakkında biraz daha fazla bilgi bulabilirsiniz

:

8

Bu çözümün avantaj ve dezavantajları olacaktır. Ana dezavantaj, traversal işlemlerin daha pahalı olacağıdır, yani. Mesajları bulmadan önce bir tane daha düğümlemek zorunda kalacaksınız.

avantajları şunlardır: Kullanıcı düğümünde

  • az çekişme yeni eklemek "seviyor", yani. Kullanıcı @ Sürüm artırılmayacaktır, bu nedenle kullanıcı "sürüm" düğümüne bilgi ekleme yeteneği
  • olmadan eşzamanlı olarak Kullanıcı üzerinde güncelleştirmeler yapabileceksiniz. Bunu yalnızca kenarlarla da yapabilirsiniz, ancak tüm kenarlardaki bilgileri kopyalamanız gerekir. Daha küçük bir kullanıcı, özellikle de gömülü/ağaçtan kurtulma eşik değerinin altında http://orientdb.com/docs/2.2.x/RidBag.html Sadece bir ağaç RidBag'ınız olduğunda, ikili iletişim kuralıyla, hemen istemciye serileştirilmeyeceğini düşünün, ancak bunun için bir yineleyiciniz olacaktır. Bu yüzden tek bir Kullanıcı getirme yükü çok önemli olmayacaktır. Öte yandan, HTTP protokolü ile köşe ile tüm kenar RID'lerini alacaksınız, bu durumda ikinci yaklaşımı kullanarak çok fazla bant genişliği ve hesaplama süresi kazanacaksınız.

Sorularınız hakkında en iyi çözüm, iş yükünüze daha iyi uyan çözümdür: Kullanıcı üzerinde birçok güncelleme yaparsanız, ikinci çözüm size anında avantajlar sağlayacaktır; Kullanıcıları çok sık tek başına getirirseniz, ikinci çözüm de avantajlar sağlayacaktır; Öte yandan, ana endişeniz hızlı geçiş ise, ikinci çözüm çok iyi bir uyum olmayacaktır.

İlgili konular