Perbandingan Database Relasional dan Database Grafik


92

Adakah yang bisa menjelaskan kepada saya keuntungan dan kerugian untuk database relasi seperti MySQL dibandingkan dengan database grafik seperti Neo4j?

Dalam SQL Anda memiliki banyak tabel dengan berbagai id yang menghubungkannya. Kemudian Anda harus bergabung untuk menghubungkan tabel. Dari perspektif seorang pemula, mengapa Anda mendesain database untuk meminta gabungan daripada memiliki koneksi eksplisit sebagai edge dari awal seperti dengan database grafik. Secara konseptual tidak akan masuk akal bagi seorang pemula. Mungkinkah ada alasan yang sangat teknis tetapi non-konseptual untuk ini?


Metode aksesnya berbeda. Dalam Basis Data Relasional, Anda menggunakan Aljabar Relasional , paling baik ditambah dengan rekursi, representasi yang aneh tetapi populer adalah SQL (rekursif, dengan ekstra prosedural). Dalam Database Grafik, Anda menggunakan bahasa traversal grafik seperti Gremlin . Implementasi DB yang mendasari hingga tata letak on-disk akan dipilih untuk memberikan kinerja terbaik untuk masing-masing metode akses, dan penyesuaian / variasi arbiter dapat ditemukan dalam implementasi.
David Tonhofer

Jawaban:


119

Sebenarnya ada alasan konseptual di balik kedua gaya tersebut. Wikipedia tentang model relasional dan database grafik memberikan gambaran yang bagus tentang ini.

Perbedaan utama adalah bahwa dalam database grafik, relasinya disimpan pada level record individual, sedangkan dalam database relasional, strukturnya ditentukan pada level yang lebih tinggi (definisi tabel).

Ini memiliki konsekuensi penting:

  • Database relasional jauh lebih cepat saat beroperasi pada record dalam jumlah besar. Dalam database grafik, setiap record harus diperiksa secara individual selama query untuk menentukan struktur datanya, sementara ini diketahui sebelumnya dalam database relasional.
  • Database relasional menggunakan lebih sedikit ruang penyimpanan, karena mereka tidak harus menyimpan semua hubungan tersebut.

Menyimpan semua hubungan di tingkat catatan individu hanya masuk akal jika akan ada banyak variasi dalam hubungan; jika tidak, Anda hanya menduplikasi hal yang sama berulang kali. Ini berarti bahwa basis data grafik sangat cocok untuk struktur yang tidak teratur dan kompleks. Namun di dunia nyata, kebanyakan database memerlukan struktur yang teratur dan relatif sederhana. Inilah mengapa database relasional mendominasi.


17
Menyimpan hubungan pada tingkat rekor juga masuk akal dalam kasus lain, karena menyediakan kedekatan bebas indeks. Artinya, traversal grafik dapat dilakukan tanpa pencarian indeks yang menghasilkan kinerja yang jauh lebih baik. Dan itu bukan duplikasi, karena Anda menyimpan hubungan yang sebenarnya, yang berbeda.
nawroth

4
Anda mengatakan: "Dalam database grafik, setiap record harus diperiksa secara individual selama query untuk menentukan struktur data". Apakah ini properti universal dari database grafik atau lebih atau kurang benar secara umum? Bagaimana dengan OrientDb yang mendukung skema penuh untuk simpul dan tepi?
Lodewijk Bogaards

@LodewijkBogaards beberapa database grafik, seperti Neo4j, memungkinkan pengindeksan dasar. Jika kueri mengenai indeks, saya yakin tidak perlu menentukan struktur data di balik indeks. Tetapi itu tergantung pada kueri.
Vojtěch Vít

3
Saya sangat tidak setuju dengan kedua poin tersebut. Database grafik selalu lebih cepat bila ada kunci asing. Karena kita tidak perlu operasi gabungan. Database relasional harus menyimpan kunci asing di banyak tabel. Tepi dan kunci asing harus mengambil ruang penyimpanan yang sama.
cegprakash

3
@cegprakash Apakah Anda juga memiliki dokumentasi yang juga dapat kami simpulkan?
Victor

100

Perbedaan utama antara grafik dan database relasional adalah bahwa database relasional bekerja dengan himpunan sedangkan database grafik bekerja dengan jalur.

Ini memanifestasikan dirinya dengan cara yang tidak terduga dan tidak membantu bagi pengguna RDBMS. Misalnya ketika mencoba meniru operasi jalur (misalnya teman dari teman) dengan bergabung secara rekursif dalam database relasional, latensi kueri tumbuh secara tak terduga dan masif seperti halnya penggunaan memori, belum lagi menyiksa SQL untuk mengekspresikan jenis operasi tersebut. Lebih banyak data berarti lebih lambat dalam database berbasis set, bahkan jika Anda dapat menunda kesulitan melalui pengindeksan yang bijaksana.

Seperti yang diisyaratkan Dan1111, sebagian besar database grafik tidak mengalami rasa sakit gabungan seperti ini karena mereka mengekspresikan hubungan pada tingkat fundamental. Artinya, hubungan secara fisik ada pada disk dan diberi nama, diarahkan, dan dapat didekorasi sendiri dengan properti (ini disebut model grafik properti, lihat: https://github.com/tinkerpop/blueprints/wiki/Property-Graph -Model ). Ini berarti jika Anda memilih untuk, Anda dapat melihat hubungan pada disk dan melihat bagaimana mereka "menggabungkan" entitas. Oleh karena itu, hubungan adalah entitas kelas satu dalam database grafik dan secara semantik jauh lebih kuat daripada hubungan tersirat yang direifikasi pada waktu proses di penyimpanan relasional.

Jadi mengapa Anda harus peduli? Karena dua alasan:

  1. Database grafik jauh lebih cepat daripada database relasional untuk data yang terhubung - kekuatan model yang mendasarinya. Konsekuensinya adalah bahwa latensi kueri dalam database grafik sebanding dengan seberapa banyak grafik yang Anda pilih untuk dijelajahi dalam kueri, dan tidak sebanding dengan jumlah data yang disimpan, sehingga meredakan bom gabungan .
  2. Database grafik membuat pemodelan dan kueri jauh lebih menyenangkan yang berarti pengembangan lebih cepat dan momen WTF lebih sedikit. Misalnya mengungkapkan teman-teman untuk jaringan sosial yang khas dalam bahasa kueri Cypher Neo4j adalah adil MATCH (me)-[:FRIEND]->()-[:FRIEND]->(foaf) RETURN foaf.

3
"Karena itu, hubungan adalah entitas kelas satu dalam database grafik". Hal yang sama biasanya berlaku dalam database relasional: entitas dipetakan ke tupel dalam relasi, seperti relasi banyak-banyak. Apakah perbedaan yang Anda gambarkan untuk hubungan satu-banyak, yang sering digabungkan menjadi hubungan entitas?
beldaz

54
Perbandingan ini tampaknya sedikit bias. Bagaimana dengan kekurangannya?
Kurren

11
Sedikit? Terlalu bias menurut pendapat jujur ​​saya. Sepertinya iklan "Ini adalah produk yang bagus! Beli ini" paling banter untuk saya!
ilgaar

39
Ini perlu peringatan besar : orang ini adalah "ilmuwan kepala" di Neo Technology, yang membuat database grafik Neo4J.
Rob Grant

5
Bagaimana dengan pencarian sewenang-wenang ... berikan semua pengguna berusia 35 hingga 55 tahun dan berbelanja di walmart dalam 90 hari terakhir.
Matthew Whited

21

Dan1111 telah memberikan jawaban yang ditandai sebagai benar. Beberapa poin tambahan perlu diperhatikan secara sepintas.

Pertama, di hampir setiap implementasi database grafik, record "disematkan" karena ada sejumlah penunjuk yang tidak diketahui yang menunjuk ke record di lokasinya saat ini. Artinya, rekaman tidak dapat diacak ke lokasi baru tanpa meninggalkan alamat penerusan di lokasi lama atau memecahkan sejumlah petunjuk yang tidak diketahui.

Secara teoritis, seseorang dapat mengocok semua catatan sekaligus dan mencari cara untuk menemukan dan memperbaiki semua petunjuk. Dalam praktiknya, ini adalah operasi yang bisa memakan waktu berminggu-minggu pada basis data grafik besar, selama waktu itu basis data harus tidak mengudara. Itu tidak mungkin.

Sebaliknya, dalam database relasional, record dapat di-reshuffle dalam skala yang cukup besar, dan satu-satunya hal yang harus dilakukan adalah membangun kembali indeks yang terpengaruh. Ini adalah operasi yang cukup besar, tetapi tidak sebesar yang setara untuk database grafik.

Hal kedua yang perlu diperhatikan adalah bahwa world wide web dapat dilihat sebagai database grafik raksasa. Halaman web berisi hyperlink, dan referensi hyperlink, antara lain, halaman web lainnya. Referensinya adalah melalui URL, yang berfungsi seperti pointer.

Saat halaman web dipindahkan ke URL yang berbeda tanpa meninggalkan alamat penerusan di URL lama, sejumlah hyperlink yang tidak diketahui akan rusak. Link yang rusak ini kemudian menimbulkan pesan "Error 404: halaman tidak ditemukan" yang mengganggu kesenangan banyak peselancar.


4
Hanya sebagian besar database grafik yang memiliki aturan integritas yang tidak mengizinkan tautan rusak.
Michael Hunger

1
Jika DBMS menyematkan target, ini jelas akan mencegah kerusakan tautan karena memindahkan target tautan. Saya tidak tahu ada database grafik yang tidak menyematkan catatan yang mungkin menjadi target tautan.
Walter Mitty

Apakah database grafik biasanya tanpa skema karena perubahan skema akan menjadi operasi yang sangat berat karena kebutuhan untuk menulis ulang semua pointer? Bisakah masalah perombakan tidak dielakkan hanya dengan menyimpan pointer virtual, yang melalui tabel pencarian? Ini masih akan tampil di O (1) kan?
Lodewijk Bogaards

Saya telah beroperasi di bawah definisi database grafik yang akan menyertakan database pra-relasional seperti hierarki atau jaringan. Beberapa dari database ini memiliki skema, meskipun bukan skema relasional. Saya tidak yakin apakah definisi operasional saya sesuai dengan definisi standar atau tidak.
Walter Mitty

Struktur data yang menyediakan pemetaan antara pointer virtual dan pointer fisik pada dasarnya sama dengan indeks, dengan biaya yang kurang lebih sama. Anda sebaiknya melanjutkan dan menggunakan database relasional.
Walter Mitty

7

Dengan database relasional kita dapat membuat model dan query grafik dengan menggunakan kunci asing dan self-joins. Hanya karena RDBMS mengandung kata relasional tidak berarti bahwa mereka pandai menangani hubungan. Kata relasional dalam RDBMS berasal dari aljabar relasional dan bukan dari hubungan. Dalam RDBMS, hubungan itu sendiri tidak ada sebagai objek dalam dirinya sendiri. Ini perlu direpresentasikan secara eksplisit sebagai kunci asing atau secara implisit sebagai nilai dalam tabel tautan (saat menggunakan pendekatan pemodelan umum / universal). Tautan antar kumpulan data disimpan dalam data itu sendiri.

Semakin kita meningkatkan kedalaman pencarian dalam database relasional, semakin banyak self-join yang perlu kita lakukan dan semakin banyak performa query kita yang menderita. Semakin dalam kita masuk dalam hierarki kita, semakin banyak tabel yang perlu kita gabungkan dan semakin lambat kueri kita. Secara matematis biaya tumbuh secara eksponensial dalam database relasional. Dengan kata lain, semakin kompleks kueri dan hubungan kita, semakin kita mendapatkan keuntungan dari grafik versus database relasional. Kami tidak memiliki masalah kinerja dalam database grafik saat menavigasi grafik. Ini karena database grafik menyimpan hubungan sebagai objek terpisah. Namun, kinerja baca yang unggul menyebabkan penulisan yang lebih lambat.

Dalam situasi tertentu, lebih mudah mengubah model data dalam database grafik daripada di RDBMS, misalnya dalam RDBMS jika saya mengubah hubungan tabel dari 1: n ke m: n Saya perlu menerapkan DDL dengan potensi downtime.

Di sisi lain, RDBMS memiliki keunggulan di area lain, misalnya menggabungkan data atau melakukan kontrol versi timestamped pada data.

Saya membahas beberapa pro dan kontra lainnya dalam posting blog saya tentang database grafik untuk data warehousing


"Kata relasional dalam RDBMS berasal dari aljabar relasional" - Semacam. "dan bukan dari hubungan." - Bukan hubungan dalam arti FK, tetapi ya hubungan dalam arti relasional dalam aljabar relasional & RDBMS berasal dari relasi dalam arti tabel yang mewakili hubungan / asosiasi. FK salah disebut hubungan dengan metode yang salah memahami model relasional. FK tidak perlu dikenal atau ada untuk merekam atau query. Mereka untuk integritas. Apa yang perlu & cukup untuk melakukan kueri adalah mengetahui hubungan / asosiasi yang diwakili oleh tabel (basis atau hasil kueri).
philipxy

4

Sementara model relasional dapat dengan mudah merepresentasikan data yang terdapat dalam model grafik, kami menghadapi dua masalah signifikan dalam praktiknya:

  1. SQL tidak memiliki sintaks untuk melakukan traversal grafik dengan mudah, terutama traversal yang kedalamannya tidak diketahui atau tidak dibatasi. Misalnya, menggunakan SQL untuk menentukan teman dari teman Anda cukup mudah, tetapi sulit untuk memecahkan masalah "derajat pemisahan".
  2. Performa menurun dengan cepat saat kita melintasi grafik. Setiap tingkat traversal menambah waktu respons kueri secara signifikan.

Referensi: Database Generasi Berikutnya


0

Database grafik patut diselidiki untuk kasus penggunaan yang mereka kuasai, tetapi saya punya beberapa alasan untuk mempertanyakan beberapa pernyataan dalam tanggapan di atas. Khususnya:

Database relasional jauh lebih cepat ketika beroperasi pada sejumlah besar record (poin pertama dan1111)

Database grafik jauh lebih cepat daripada database relasional untuk data yang terhubung - kekuatan model yang mendasarinya. Konsekuensi dari ini adalah bahwa latensi kueri dalam database grafik sebanding dengan seberapa banyak grafik yang Anda pilih untuk dijelajahi dalam kueri, dan tidak sebanding dengan jumlah data yang disimpan, sehingga meredakan bom gabungan. (Poin pertama Jim Webber)

Dengan kata lain, semakin kompleks kueri dan hubungan kita, semakin kita mendapatkan keuntungan dari grafik versus database relasional. (Paragraf kedua Uli Bethke)

Meskipun pernyataan ini mungkin bermanfaat, saya belum menemukan cara untuk menyesuaikan kasus penggunaan khusus saya dengannya. Referensi: Database Grafik atau Database Relasional Ekstensi Tabel Umum: Membandingkan kinerja kueri grafik asiklik


0

Database Relasional jauh lebih efisien dalam menyimpan data tabel. Terlepas dari kata "relasional" dalam namanya, database relasional jauh kurang efektif dalam menyimpan atau mengekspresikan hubungan antara elemen data yang disimpan. Istilah 'relasional' dalam database relasional lebih berkaitan dengan kolom terkait di dalam tabel, tidak terkait informasi dalam tabel yang berbeda. Hubungan antar kolom ada untuk mendukung operasi set. Jadi ketika Database tumbuh dalam jutaan atau milyaran record, itu menjadi sangat lambat untuk mengambil data dari database relasional.

Tidak seperti database relasional, database grafik disusun seluruhnya di sekitar hubungan data. Database grafik memperlakukan hubungan bukan sebagai struktur skema tetapi sebagai data, seperti nilai lainnya. Sangat cepat untuk mengambil data dari database grafik. Dari sudut pandang database relasional, Anda dapat menganggap ini sebagai GABUNG yang terwujud sebelumnya pada saat penyisipan alih-alih menghitungnya untuk setiap kueri. Karena data terstruktur seluruhnya di sekitar hubungan data, kinerja kueri waktu nyata dapat dicapai tidak peduli seberapa besar atau terhubungnya kumpulan data tersebut. Database grafik membutuhkan lebih banyak ruang penyimpanan dibandingkan dengan database relasional.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.