Arka Plan: Aşağıda, Eylem Neo4j kitabında belirtilen bir performans testini kapsayan Grafik Veritabanları kitabı yer almaktadır :
Bir grafikteki ilişkiler doğal olarak yollar oluşturur. Grafik sorgulama veya çaprazlama, aşağıdaki yolları içerir. Veri modelinin temel olarak yola yönelik doğası nedeniyle, yola dayalı grafik veritabanı işlemlerinin çoğu, verilerin düzenlenme biçimiyle oldukça uyumludur ve bu da onları son derece verimli hale getirir. Neo4j Eylem kitabında, Partner ve Vukotic ilişkisel bir mağaza ve Neo4j kullanarak bir deney gerçekleştirir.
Karşılaştırma, grafik veritabanının bağlı veriler için ilişkisel bir mağazadan çok daha hızlı olduğunu göstermektedir.Partner ve Vukotic'in deneyi, bir sosyal ağda en fazla beş derinliğe kadar arkadaş arkadaşları bulmayı amaçlamaktadır. Rastgele seçilen iki kişi göz önüne alındığında, onları birbirine bağlayan ve en fazla beş ilişki uzunluğunda bir yol var mı? Her biri yaklaşık 50 arkadaşı olan 1.000.000 kişiyi içeren bir sosyal ağ için sonuçlar, Tablo 2-1'de gördüğümüz gibi, grafik veritabanlarının bağlı veriler için en iyi seçim olduğunu kuvvetle göstermektedir.
Tablo 2-1. Neo4j'de etkili bulmaya karşı ilişkisel bir veritabanında genişletilmiş arkadaşlar bulma
Depth RDBMS Execution time (s) Neo4j Execution time (s) Records returned 2 0.016 0.01 ~2500 3 30.267 0.168 ~110,000 4 1543.505 1.359 ~600,000 5 Unfinished 2.132 ~800,000
İkinci derinlikte (arkadaşların arkadaşları) hem ilişkisel veritabanı hem de grafik veritabanı, onları çevrimiçi bir sistemde kullanmayı düşünecek kadar iyi performans gösterir. Neo4j sorgusu ilişkisel olanın üçte ikisinde çalışırken, son kullanıcı ikisi arasındaki milisaniye farkını zar zor fark eder. Üçüncü derinliğe ulaştığımızda (arkadaş arkadaşı), ilişkisel veritabanının sorgu ile makul bir zaman diliminde artık ilgilenemeyeceği açıktır: tamamlanması için geçen otuz saniye tamamen kabul edilemez olacaktır çevrimiçi bir sistem için. Buna karşılık, Neo4j'in tepki süresi nispeten düz kalır: sorguyu gerçekleştirmek için sadece bir saniyenin bir kısmı - çevrimiçi bir sistem için kesinlikle yeterince hızlı.
Dördüncü derinlikte, ilişkisel veritabanı, çevrimiçi bir sistem için pratik olarak işe yaramaz hale getirerek, sakatlama gecikmesi sergiler. Neo4j'in zamanlamaları da biraz kötüleşti, ancak buradaki gecikme, duyarlı bir çevrimiçi sistem için kabul edilebilirliğin çevresinde. Son olarak, beşinci derinlikte, ilişkisel veritabanı sorguyu tamamlamak için çok uzun zaman alır. Buna karşılık Neo4j, yaklaşık iki saniye içinde bir sonuç döndürür. Beşinci derinlikte, neredeyse tüm ağımız dostumuzdur: birçok gerçek dünya kullanım durumu için, sonuçları ve zamanlamaları büyük olasılıkla kesebiliriz.
Sorular:
- Bu, bir sosyal ağda bulmak dışında bir şeyi taklit etmek için makul bir test mi? (Yani gerçek sosyal ağların normalde yaklaşık 50 arkadaşı olan düğümleri vardır; " zengin olsun daha zengin " modeli, sosyal ağlar için daha doğal olsa da, yanlış olabilir.)
- Emülasyonun doğallığından bağımsız olarak, sonuçların kapalı veya tekrarlanamaz olduğuna inanmak için herhangi bir neden var mı?