Apa perbedaan antara NoSQL dan RDBMS tradisional?

71

Apa perbedaan antara NoSQL dan RDBMS tradisional?

Selama beberapa bulan terakhir, NoSQL telah sering disebutkan dalam berita teknis. Apa fitur yang paling signifikan dibandingkan dengan RDBMS tradisional? Pada tingkat apa (fisik, logis) perbedaan terjadi?

Di mana tempat terbaik untuk menggunakan NoSQL? Mengapa?

Spredzy
sumber

Jawaban:

61

NoSQL singkatan dari "Tidak hanya SQL" dan biasanya berarti bahwa database tersebut bukan database relasional, yang telah sangat populer selama beberapa dekade terakhir.

Alasan mengapa NoSQL telah begitu populer beberapa tahun terakhir ini terutama karena, ketika database relasional tumbuh dari satu server, itu tidak lagi mudah digunakan. Dengan kata lain, mereka tidak berkembang dengan baik dalam sistem terdistribusi. Semua situs besar yang Anda sebutkan Google, Yahoo, Facebook dan Amazon (saya tidak tahu banyak tentang Digg) memiliki banyak data dan menyimpan data dalam sistem terdistribusi karena beberapa alasan. Bisa jadi data tidak muat di satu server, atau ada persyaratan untuk ketersediaan tinggi .

Teorema CAP

Properti dari sistem terdistribusi dapat dijelaskan oleh teorema CAP . Dari tiga properti yang hanya dapat Anda miliki paling banyak dua:

  • C onsistency
  • Sebuah vailability
  • toleransi terhadap artisiasi jaringan P.

Amazon Dynamo menggunakan Konsistensi Akhirnya untuk mendapatkan ketiga properti. Makalah Dynamo: Toko Key-value Amazon yang Sangat Tersedia layak dibaca ketika mempelajari tentang database NoSQL dan sistem terdistribusi. Amazon Dynamo memiliki properti A dan P.

Google mengambil pendekatan berbeda dengan BigTable , yang memiliki properti C dan A.

Database NoSQL lainnya

Seperti yang saya tulis di awal ada banyak jenis lain dari database NoSQL, yang dirancang untuk persyaratan yang berbeda. Misalnya basis data grafik seperti Neo4j , basis data dokumen seperti CouchDB dan basis data multimodel / objek seperti OrientDB .

Akhirnya saya ingin mengatakan bahwa basis data relasional akan tetap populer. Mereka sangat fleksibel dan dapat dipelihara. Tetapi mereka tidak selalu merupakan pilihan terbaik.

Jonas
sumber
1
Bagus, jawaban lengkap.
TML
NoSQL TIDAK berarti non-relasional, itu hanya berarti sesuatu selain DBMS SQL.
nvogel
1
Tampaknya pada Konferensi Strata O'Reilly baru-baru ini, Mark Madsen telah menciptakan interpretasi baru "NoSQL" dalam sejarahnya tentang basis data untuk menggantikan "Not Only SQL". Sekarang: "Tidak, SQL" ;-)
Lukas Eder
6
"Tidak hanya" adalah retrofit, gerakan awal NoSQL sangat menentang database relasional. Lalu mereka menghantam dunia nyata.
Gayus
22

NoSQL adalah istilah yang sangat luas dan biasanya disebut sebagai makna "Bukan Hanya SQL." Istilah ini tidak disukai di komunitas non-RDBMS.

Anda akan menemukan bahwa basis data NoSQL memiliki beberapa karakteristik umum. Mereka dapat secara kasar dibagi menjadi beberapa kategori:

  • toko kunci / nilai
  • Database terinspirasikan Bigtable (berdasarkan pada makalah Google Bigtable)
  • Database yang diilhami Dynamo
  • database terdistribusi
  • mendokumentasikan basis data

Ini adalah pertanyaan besar, tetapi dijawab dengan cukup baik dalam Survei Database Terdistribusi ini .

Untuk jawaban singkat:

Basis data NoSQL dapat membuang berbagai bagian ACID untuk mencapai manfaat tertentu lainnya - toleransi partisi, kinerja, untuk mendistribusikan beban, atau untuk menskalakan secara linier dengan penambahan perangkat keras baru.

Sejauh kapan menggunakannya - itu sepenuhnya tergantung pada kebutuhan aplikasi Anda.

Jeremiah Peschka
sumber
12

NoSQL adalah jenis database yang tidak memiliki skema tetap seperti RDBMS tradisional. Dengan database NoSQL skema didefinisikan oleh pengembang saat run time. Mereka tidak menulis pernyataan SQL normal terhadap database, tetapi sebaliknya menggunakan API untuk mendapatkan data yang mereka butuhkan. Basis data NoSQL biasanya dapat menskala di server fisik yang berbeda dengan mudah tanpa perlu mengetahui server mana yang Anda cari.

Namun ada beberapa trade off untuk semua fleksibilitas ini: Basis data NoSQL adalah fitur yang cukup kurang dibandingkan dengan sistem RDBMS seperti SQL Server, Oracle, DB2, MySQL, dll. Tidak ada Pialang Layanan, Pencatatan transaksi, paket ETL, dll.

NoSQL bukan sesuatu yang baru. Sebenarnya sudah ada selama 50-60 tahun. Saat itu disebut COBOL. Gagasan yang persis sama, hanya kelompok yang berbeda muncul dengan itu.

mrdenny
sumber
3
Poin 1 tidak benar untuk banyak (semua?) Basis data NoSQL kecuali Anda secara eksplisit memberi tahu basis data bahwa Anda tidak peduli jika penulisan berhasil. Misalnya. Setiap basis data yang didukung Hadoop akan menulis data ke tiga lokasi, neraka atau air panas. Secara default, Cassandra akan menulis ke tiga lokasi dan mengakui penulisan sebagai berhasil ketika dua telah berhasil.
Jeremiah Peschka
3
Bagaimana cara menangani konkurensi ketika melakukan pembaruan itu? Apakah ada jenis transaksi terdistribusi yang berjalan di antara mereka, atau apakah tulisan ACKed sebelum tangan dan server menangani sisanya di latar belakang?
mrdenny
Concurrency sepenuhnya tergantung pada implementasi. Riak menggunakan jam vektor untuk memastikan konkurensi dan dalam hal penulisan yang saling bertentangan mereka dapat dikembalikan ke aplikasi panggilan untuk resolusi. Orang lain menggunakan kemenangan menulis terakhir.
Jeremiah Peschka
Sejauh menulis pengakuan - dalam banyak kasus, menulis tidak diakui sampai OS mengakui penulisan. Anda bahkan dapat melangkah lebih jauh untuk meminta pengakuan atas penulisan yang tahan lama yang berarti bahwa bit-bit tersebut sebenarnya dibuang ke disk alih-alih berada dalam buffer OS. MongoDB mengakui menulis ke memori secara default tetapi dapat dikonfigurasi untuk meminta pengakuan menulis ke disk. Replikasi ditangani secara berbeda dengan setiap produk. Dengan Hadoop, klien menulis ke server A yang menulis ke B yang menulis ke C. Setelah C merespons penulisan selesai dan klien mendapat tulis ack.
Jeremiah Peschka
Dalam hal ini saya berdiri dikoreksi. Saya telah menghapus pernyataan yang salah. Apakah saya FUBAR ada hal lain?
mrdenny
6

Pada dasarnya mengeluarkan pengaturan relasional, dengan kunci primer dan asing, dan dengan overhead tambahan yang terlibat dalam menjaga keamanan transaksional, seringkali memberi Anda peningkatan kinerja yang ekstrem. Namun ini tidak unik untuk database baru / datastore, seperti misalnya MySQL telah disetel untuk tampil di "tingkat NoSQL" dengan melewati lapisan.

Singkatnya, Anda sering bisa mendapatkan kinerja yang mengesankan jika Anda setuju dengan risiko kemungkinan kehilangan data. Sebagian besar sistem NoSQL melakukan ini. Misalnya MongoDB melakukan perubahan data yang akan ditulis ketika itu nyaman. Data itu sendiri aman dan aman secara transaksi, tetapi disimpan dalam penyimpanan yang tidak menentu (memori). Jika Anda kehilangan daya, Anda tidak dapat 100% yakin bahwa Anda tidak kehilangan data, atau bahwa Anda tidak memiliki data yang rusak.

Ini merupakan trade off antara keamanan dan kinerja.

Johanna Larsson
sumber
5

Tempat yang baik untuk memulai adalah entri Wikipedia . Sebaliknya, pada dasarnya menghubungkan data dalam satu tabel dengan yang lain Anda menyimpan sesuatu sebagai pasangan nilai kunci dan tidak ada skema basis data, melainkan ditangani dalam kode.

Beberapa situs menggunakan NoSQL dan server RDBMS khas secara bersamaan, tetapi untuk menyimpan data yang berbeda. Jadi, Anda tidak harus memilih satu atau yang lain.

steve.lippert
sumber
Fakta bahwa sebagian besar dari pertanyaan ini dapat dijawab dengan mengunjungi WP membuat saya menggosok daguku saat saya merenungkan jawabannya di sini. Saya pikir itu agak terlalu "pertanyaan pengisi" tetapi itu benar-benar yang kita miliki sekarang.
jcolebrand
1
Catatan penting di sini adalah bahwa menghindari hubungan (kunci asing) dukungan dalam infrastruktur basis data / server membebaskan basis data / server dari beban dan overhead manajemen kunci untuk menjaga integritas referensial. Konsekuensi dari ini, trade-off, adalah integritas referensial, konsistensi, dan masalah ACID lainnya kemudian didorong keluar ke aplikasi. Banyak aplikasi mendapat manfaat dari ini daripada dibatasi olehnya. (Beberapa aplikasi harus dimasukkan ke model klien / server).
Jim Dennis
0

Saya telah banyak bekerja pada MongoDB NoSQL Database dan Oracle.

Skema

Database SQL memiliki skema yang telah ditentukan sebelumnya untuk menyimpan data terstruktur.

Dalam database NoSQL, tidak ada skema yang telah ditentukan, di sini skema adalah elemen yang paling dinamis berdasarkan pada elemen data.

Skalabilitas

Database SQL secara vertikal scalable, yang berarti jika kita ingin skala basis data SQL, kita perlu memberikan dorongan perangkat keras di mana Sistem DBMS diinstal. Di sinilah kadang-kadang berlaku untuk pembatasan skalabilitas.

Basis data NoSQL adalah skalabel horizontal, artinya jika kita ingin skala, kita perlu menambahkan lebih banyak node dan membuat jaringan distribusi berdasarkan kebutuhan kita sendiri dan daya yang dibutuhkan. Ini adalah cara mereka mengurangi beban pada basis data

Penerimaan data

Dalam database berbasis SQL, untuk mendefinisikan dan memanipulasi data kita dapat menggunakan SQL (Structured Query Language), yang sangat kuat saat ini.

Dalam hal basis data NoSQL, kueri fokus pada pengumpulan dan dokumen. Terkadang disebut UnQL (Unstructured Query Language). Ini masih dalam tahap evolusi, sehingga bervariasi dari vendor ke vendor dari database NoSQL.

Untuk lebih lanjut tentang perbedaan utama, blog saya: Perbedaan antara database SQL dan NoSQL

Virat Gaywala
sumber