Apakah perbandingan Neo4j ini dengan waktu eksekusi RDBMS benar?

10

Latar belakang: Berikut ini dari buku Graph Databases , yang mencakup tes kinerja yang disebutkan dalam buku Neo4j in Action :

Hubungan dalam grafik secara alami membentuk jalur. Meminta, atau melintasi, grafik melibatkan jalur berikut. Karena sifat dasar-jalur yang berorientasi pada datamodel, sebagian besar operasi basis data grafik jalur sangat selaras dengan cara di mana data diletakkan, membuatnya sangat efisien. Dalam buku mereka Neo4j in Action, Partner dan Vukotic melakukan percobaan menggunakan toko relasional dan Neo4j.

Perbandingan menunjukkan bahwa basis data grafik secara substansial lebih cepat untuk data yang terhubung daripada toko relasional. Eksperimen Partner dan Vukotic berupaya menemukan teman-teman di jejaring sosial, hingga kedalaman maksimum lima. Mengingat ada dua orang yang dipilih secara acak, adakah jalan yang menghubungkan mereka yang paling lama lima hubungan? Untuk jaringan sosial yang berisi 1.000.000 orang, masing-masing dengan sekitar 50 teman, hasilnya sangat menyarankan bahwa basis data grafik adalah pilihan terbaik untuk data yang terhubung, seperti yang kita lihat pada Tabel 2-1.

Tabel 2-1. Menemukan teman yang diperluas dalam basis data relasional versus temuan yang efisien di Neo4j

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

Pada kedalaman dua (teman-teman-teman) baik basis data relasional dan basis data grafik berkinerja cukup baik untuk kita pertimbangkan untuk menggunakannya dalam sistem online. Sementara permintaan Neo4j berjalan dalam dua pertiga waktu yang relasional, pengguna akhir hampir tidak akan melihat perbedaan dalam milidetik antara keduanya. Namun, saat kami mencapai kedalaman tiga (teman-teman-teman), jelas bahwa basis data relasional tidak lagi dapat menangani kueri dalam jangka waktu yang masuk akal: tiga puluh detik yang diperlukan untuk menyelesaikannya benar-benar tidak dapat diterima untuk sistem online. Sebaliknya, waktu respons Neo4j tetap relatif datar: hanya sepersekian detik untuk melakukan kueri — pasti cukup cepat untuk sistem online.

Pada kedalaman empat database relasional menunjukkan latensi yang melumpuhkan, membuatnya praktis tidak berguna untuk sistem online. Pengaturan waktu Neo4j telah sedikit memburuk, tetapi latensi di sini berada di batas yang dapat diterima untuk sistem online yang responsif. Akhirnya, pada kedalaman lima, basis data relasional hanya membutuhkan waktu terlalu lama untuk menyelesaikan kueri. Neo4j, sebaliknya, mengembalikan hasil dalam waktu sekitar dua detik. Pada kedalaman lima, itu terjadi hampir seluruh jaringan adalah teman kami: untuk banyak kasus penggunaan dunia nyata, kami mungkin akan memangkas hasilnya, dan waktunya.

Pertanyaan adalah:

  • Apakah ini tes yang masuk akal untuk meniru apa yang mungkin orang temukan kecuali di jejaring sosial? (Artinya jaringan sosial yang sebenarnya biasanya memiliki node dengan sekitar 50 teman misalnya; sepertinya model " kaya semakin kaya " akan lebih alami untuk jejaring sosial, meskipun mungkin salah.)
  • Terlepas dari kealamian emulasi, adakah alasan untuk meyakini bahwa hasilnya tidak aktif, atau tidak dapat diproduksi ulang?
kesalahan besar
sumber

Jawaban:

8

Melihat dokumen yang disebut Anatomi Facebook ini, saya perhatikan bahwa mediannya adalah 100. Melihat plot fungsi kumulatif saya dapat bertaruh bahwa rata-rata lebih tinggi, dekat 200. Jadi 50 sepertinya bukan angka terbaik di sini. Namun saya pikir ini bukan masalah utama di sini.

Masalah utama adalah kurangnya informasi tentang bagaimana database digunakan.

Tampaknya masuk akal bahwa penyimpanan data yang dirancang khusus untuk struktur grafik menjadi lebih efisien daripada RDBM tradisional. Namun, bahkan jika RDBM tidak dalam tren terbaru sebagai pilihan penyimpanan data, sistem ini terus berkembang dalam perlombaan dengan dimensi kumpulan data. Ada berbagai jenis desain yang mungkin, berbagai cara pengindeksan data, peningkatan terkait dengan konkurensi dan sebagainya.

Untuk menyimpulkan, saya pikir mengenai reproduktifitas, penelitian ini tidak memiliki deskripsi yang tepat tentang bagaimana skema database dirancang. Saya tidak berharap bahwa database akan mendominasi raja interogasi tersebut, namun saya berharap bahwa dengan desain yang baik, perbedaannya tidak terlalu besar.

rapaio
sumber
4

Ada cara yang baik / cepat untuk memodel grafik di RDBMS, dan cara bodoh / lambat.

  • Beberapa menggunakan pengindeksan pintar dan Stored Procs, memperdagangkan beban CPU, dan menyetel temp tables pada disk RAM untuk kecepatan pengambilan grafik yang lebih cepat.

  • Beberapa menggunakan jalur grafik yang sudah dikomputasi (ini mungkin kurang layak dalam skenario jaringan sosial, tetapi dalam pohon dengan mayoritas node menjadi node daun, itu adalah ruang tradeoff yang cukup bagus untuk sementara waktu)

  • Beberapa hanya menghitung dalam satu lingkaran, menggunakan tabel temp diindeks tidak disetel. Dari #s yang dilemparkan dalam artikel, itu berbau seperti apa yang mereka lakukan (kinerja 30 detik pada set data yang cukup kecil)

    Sebagai contoh, saya memiliki perhitungan pohon sendiri.

    • Itu dienkapsulasi dalam proc tersimpan yang sangat disetel

    • Sementara itu berjalan di server data Sybase ASE15 ukuran perangkat keras perusahaan, server itu dibagikan dengan beberapa terabyte data dari semua aplikasi perusahaan lain , beberapa data jauh lebih haus dari tambang; dan tidak didedikasikan sepenuhnya untuk mengeksekusi kueri saya.

    • Saya tidak memiliki akses ke alat speedup utama, tabel temp pada disk RAM.

    • Seperangkat data representatif yang saya ambil yang sepertinya cocok dengan data mereka mendapatkan 150.000 simpul subtree dari dataset hutan penuh 2.5M node (kedalaman pohon yang tidak terbatas, yang bervariasi antara 5 dan 15, tetapi rata - rata arity yang lebih kecil dari node yang diberikan daripada 50 teman yang tercantum dalam percobaan)

    • Saya menyetel ke titik bahwa permintaan ini ~ 30-45 detik. Tentunya TIDAK menunjukkan perlambatan eksponensial yang ditunjukkan oleh angka-angka dalam pertanyaan pada kinerja RDBMS mereka, yang merupakan tambahan ganda aneh mengingat tidak ada pertumbuhan eksponensial dalam set hasil (yang bagi saya berbau indeks tidak disetel pada suatu temp tabel dari pengalaman pribadi).

Jadi, perbandingan ini kemungkinan besar tidak benar dan didasarkan pada desain sisi RDBMS yang buruk, meskipun seperti jawaban sebelumnya dicatat, tidak mungkin untuk memastikan tanpa mereka membuka sumber 100% dari definisi kode dan tabel mereka.

DVK
sumber