Apa itu NoSQL, bagaimana cara kerjanya, dan apa manfaatnya? [Tutup]

168

Saya telah mendengar hal-hal tentang NoSQL dan bahwa pada akhirnya dapat menjadi pengganti metode penyimpanan SQL DB karena fakta bahwa interaksi DB sering menjadi hambatan bagi kecepatan di web.

Jadi saya hanya punya beberapa pertanyaan:

  1. Apa itu sebenarnya?

  2. Bagaimana cara kerjanya?

  3. Mengapa lebih baik daripada menggunakan Database SQL? Dan seberapa jauh lebih baik?

  4. Apakah teknologinya masih terlalu baru untuk diterapkan atau layak untuk dilihat?

Mat
sumber
banyak jawaban bagus di sini. Saya juga menemukan jawaban yang berguna pada pertanyaan serupa lainnya: (1.) 150+ upvotes no sql dijelaskan dengan metafora mobil dan banyak referensi (2.) 70+ upvtes nosql dijelaskan dengan sejarah yang menjelaskan bagaimana / mengapa nosql dibuat dan sedikit tentang mengapa itu ada saat ini
Trevor Boyd Smith

Jawaban:

110
  1. Apa itu sebenarnya?

    Di satu sisi, sistem tertentu , tetapi juga menjadi kata umum untuk berbagai backend penyimpanan data baru yang tidak mengikuti model DB relasional.

  2. Bagaimana cara kerjanya?

    Masing-masing sistem berlabel nama generik bekerja secara berbeda, tetapi ide dasarnya adalah untuk menawarkan skalabilitas dan kinerja yang lebih baik dengan menggunakan model DB yang tidak mendukung semua fungsionalitas RDBMS generik, tetapi fungsi yang masih cukup untuk berguna. Di satu sisi itu seperti MySQL, yang pada satu waktu tidak memiliki dukungan untuk transaksi tetapi, justru karena itu, berhasil mengungguli sistem DB lainnya. Jika Anda bisa menulis aplikasi dengan cara yang tidak memerlukan transaksi, itu hebat.

  3. Mengapa lebih baik daripada menggunakan Database SQL? Dan seberapa jauh lebih baik?

    Akan lebih baik ketika situs Anda perlu skala begitu besar bahwa RDBMS terbaik berjalan pada perangkat keras terbaik yang Anda mampu dan dioptimalkan sebanyak mungkin tidak bisa mengikuti beban. Betapa jauh lebih baik itu tergantung pada kasus penggunaan khusus (banyak kegiatan pembaruan dikombinasikan dengan banyak gabungan sangat sulit pada RDBMS "tradisional") - mungkin bisa menjadi faktor 1000 dalam kasus ekstrim.

  4. Apakah teknologinya masih terlalu baru untuk diterapkan atau layak untuk dilihat?

    Tergantung pada apa yang ingin Anda capai. Ini tentu cukup matang untuk digunakan. Tetapi beberapa aplikasi benar-benar perlu skala yang besar-besaran. Bagi sebagian besar, RDBMS tradisional sudah cukup. Namun, dengan penggunaan internet menjadi lebih ada di mana-mana setiap saat, sangat mungkin bahwa aplikasi yang menjadi lebih umum (meskipun mungkin tidak dominan).

Michael Borgwardt
sumber
2
apa yang dimaksud dengan transaction?
Shawn Mclean
Tautan "berbagai backend penyimpanan data baru" mati
csguy
1
@csguy terima kasih, diganti dengan satu yang lebih kecil kemungkinannya hilang
Michael Borgwardt
135

Tidak ada yang namanya NoSQL!

NoSQL adalah kata kunci.

Selama beberapa dekade, ketika orang berbicara tentang database, itu berarti database relasional. Dan ketika orang-orang berbicara tentang basis data relasional, itu berarti mereka yang Anda kendalikan dengan Structured Query Language dari Edgar F. Codd. Menyimpan data dengan cara lain? Kegilaan! Yang lainnya hanyalah flatfiles.

Tetapi dalam beberapa tahun terakhir, orang mulai mempertanyakan dogma ini. Orang-orang bertanya-tanya apakah tabel dengan baris dan kolom benar-benar satu-satunya cara untuk merepresentasikan data. Orang-orang mulai berpikir dan mengkode, dan muncul dengan banyak konsep baru bagaimana data dapat diorganisir. Dan mereka mulai membuat sistem basis data baru yang dirancang untuk cara-cara baru bekerja dengan data ini.

Filosofi dari semua database ini berbeda. Tapi satu hal yang dimiliki semua database ini, adalah bahwa Structured Query Language tidak lagi cocok untuk menggunakannya. Jadi setiap database menggantikan SQL dengan bahasa query mereka sendiri. Maka lahirlah istilah NoSQL, sebagai label untuk semua teknologi basis data yang menentang model basis data relasional klasik.

Jadi apa kesamaan yang dimiliki database NoSQL?

Sebenarnya tidak banyak.

Anda sering mendengar frasa seperti:

  • NoSQL dapat diskalakan!
  • NoSQL untuk BigData!
  • NoSQL melanggar ASAM!
  • NoSQL adalah toko kunci / nilai yang dimuliakan!

Benarkah itu? Nah, beberapa pernyataan ini mungkin benar untuk beberapa database yang biasa disebut NoSQL, tetapi setiap satu juga salah untuk setidaknya satu lainnya. Sebenarnya, satu-satunya kesamaan yang dimiliki oleh database NoSQL adalah bahwa mereka adalah database yang tidak menggunakan SQL. Itu dia. Satu-satunya hal yang mendefinisikan mereka adalah apa yang membuat mereka berbeda satu sama lain.

Jadi apa yang membedakan database NoSQL?

Jadi kami membuat jelas bahwa semua database yang biasa disebut sebagai NoSQL terlalu berbeda untuk mengevaluasi mereka bersama-sama. Masing-masing dari mereka perlu dievaluasi secara terpisah untuk memutuskan apakah mereka cocok untuk menyelesaikan masalah tertentu. Tapi dari mana kita mulai? Untungnya, database NoSQL dapat dikelompokkan ke dalam kategori tertentu, yang cocok untuk berbagai kasus penggunaan:

Berorientasi pada dokumen

Contoh: MongoDB, CouchDB

Kekuatan: Data heterogen, berorientasi objek kerja, pengembangan gesit

Keuntungan mereka adalah bahwa mereka tidak memerlukan struktur data yang konsisten. Mereka berguna ketika kebutuhan Anda dan dengan demikian tata letak basis data Anda berubah terus-menerus, atau ketika Anda berurusan dengan kumpulan data yang menjadi satu tetapi masih terlihat sangat berbeda. Ketika Anda memiliki banyak tabel dengan dua kolom yang disebut "kunci" dan "nilai", maka ini mungkin layak untuk dilihat.

Database grafik

Contoh: Neo4j, GiraffeDB.

Kekuatan: Penambangan Data

Sementara sebagian besar basis data NoSQL meninggalkan konsep mengelola hubungan data, basis data ini menerimanya bahkan lebih dari yang disebut basis data relasional.

Fokus mereka adalah mendefinisikan data berdasarkan hubungannya dengan data lain. Ketika Anda memiliki banyak tabel dengan kunci utama yang merupakan kunci utama dari dua tabel lainnya (dan mungkin beberapa data yang menggambarkan hubungan di antara mereka), maka ini mungkin sesuatu untuk Anda.

Toko Nilai Kunci

Contoh: Redis, Cassandra, MemcacheDB

Kekuatan: Pencarian cepat nilai dengan kunci yang dikenal

Mereka sangat sederhana, tetapi itu membuatnya cepat dan mudah digunakan. Ketika Anda tidak memerlukan prosedur tersimpan, kendala, pemicu, dan semua fitur basis data canggih itu dan Anda hanya ingin penyimpanan dan pengambilan data yang cepat, maka itu untuk Anda.

Sayangnya mereka menganggap bahwa Anda tahu persis apa yang Anda cari. Anda membutuhkan profil User157641? Tidak masalah, hanya akan mengambil mikrodetik. Tapi bagaimana bila Anda ingin nama semua pengguna yang berusia antara 16 dan 24, memiliki "wafel" sebagai makanan favorit mereka dan login dalam 24 jam terakhir? Keberuntungan yang cukup. Ketika Anda tidak memiliki kunci yang pasti dan unik untuk hasil tertentu, Anda tidak bisa mengeluarkannya dari toko KV Anda dengan mudah.

Apakah SQL sudah usang?

Beberapa pendukung NoSQL mengklaim bahwa basis data NoSQL favorit mereka adalah cara baru dalam melakukan sesuatu, dan SQL adalah sesuatu dari masa lalu.

Apakah mereka benar

Tidak, tentu saja tidak. Meskipun ada masalah yang tidak cocok untuk SQL, tetap saja ada kelebihannya. Banyak model data yang hanya direpresentasikan sebagai kumpulan tabel yang merujuk satu sama lain. Terutama karena kebanyakan programmer basis data dilatih selama beberapa dekade untuk memikirkan data dengan cara yang berhubungan, dan mencoba untuk menekan pola pikir ini ke teknologi baru yang tidak dibuat untuk itu jarang berakhir dengan baik.

Database NoSQL bukan pengganti untuk SQL - mereka adalah alternatif.

Sebagian besar ekosistem perangkat lunak di sekitar basis data NoSQL yang berbeda belum matang. Meskipun ada kemajuan, Anda masih belum memiliki alat tambahan yang setua dan sekuat yang tersedia untuk database SQL populer.

Juga, ada lebih banyak pengetahuan untuk SQL di sekitar. Generasi ilmuwan komputer telah menghabiskan beberapa dekade karir mereka dalam penelitian yang berfokus pada database relasional, dan itu menunjukkan: Literatur yang ditulis tentang database SQL dan pemodelan data relasional, baik yang praktis maupun teoretis, dapat mengisi beberapa perpustakaan yang penuh dengan buku. Bagaimana membangun basis data relasional untuk data Anda adalah topik yang diteliti dengan baik, sehingga sulit untuk menemukan kasus sudut di mana tidak ada praktik terbaik dari buku yang diterima secara umum.

Sebagian besar database NoSQL, di sisi lain, masih dalam masa pertumbuhan. Kami masih mencari cara terbaik untuk menggunakannya.

Philipp
sumber
Saya menganggap jawaban untuk pertanyaan Apakah NoSQL berarti basis data non-relasional? TIDAK karena database Graph juga NoSQL dan bersifat relasional. Benar?
tomasb
1
@ Tomomas Itu tergantung pada bagaimana Anda mendefinisikan "database relasional". Dalam basis data grafik, relasi bahkan lebih penting daripada dalam database yang biasanya disebut relasional.
Philipp
"Tidak masalah, hanya akan mengambil mikrodetik." - tidak bisakah saya mendapatkan kinerja baca non-transaksional yang sama di misalnya psql?
Nakilon
2
Jawaban yang bagus, diutarakan hampir persis seperti Adam Ruins semuanya kecuali itu "Philipp Ruins noSQL" ;-)
JGlass
2
Ini harus menjadi jawaban terbaik.
28

Karena seseorang mengatakan bahwa posting saya sebelumnya di luar topik, saya akan mencoba untuk mengkompensasi :-) NoSQL tidak, dan tidak pernah, dimaksudkan untuk menjadi pengganti database SQL yang lebih umum, tetapi beberapa kata untuk mendapatkan hal-hal dalam perspektif yang benar.

Di jantung filosofi NoSQL terletak pertimbangan bahwa, mungkin untuk alasan komersial dan portabilitas, mesin SQL cenderung mengabaikan kekuatan luar biasa dari sistem operasi UNIX dan turunannya.

Dengan basis data berbasis sistem file, Anda dapat mengambil keuntungan langsung dari kemampuan dan kekuatan yang terus meningkat dari sistem operasi yang mendasarinya, yang telah terus meningkat selama bertahun-tahun sekarang sesuai dengan hukum Moore. Dengan pendekatan ini, banyak perintah sistem operasi menjadi secara otomatis juga "operator basis data" (pikirkan "ls" "sort", "find" dan utilitas shell UNIX lainnya yang tak terhitung).

Dengan pemikiran ini, dan sedikit kreativitas, Anda memang dapat menyusun basis data berbasis sistem file yang mampu mengatasi keterbatasan banyak mesin SQL umum, setidaknya untuk pola penggunaan tertentu, yang merupakan inti dari filosofi NoSQL, yaitu cara saya melihatnya.

Saya menjalankan ratusan situs web dan mereka semua menggunakan NoSQL sampai batas yang lebih besar atau lebih kecil. Bahkan, mereka tidak meng-host data dalam jumlah besar, tetapi bahkan jika beberapa dari mereka melakukannya saya mungkin bisa memikirkan penggunaan kreatif NoSQL dan sistem file untuk mengatasi hambatan. Sesuatu yang mungkin akan lebih sulit dengan "penjara" SQL tradisional. Saya mendorong Anda ke google untuk "unix", "manis" dan "shaffer" untuk memahami apa yang saya maksud.

Carlo Strozzi
sumber
9

Jika saya ingat dengan benar, ini merujuk pada tipe-tipe database yang tidak selalu mengikuti bentuk relasional. Database dokumen muncul di benak, database tanpa struktur tertentu, dan yang tidak menggunakan SQL sebagai bahasa permintaan tertentu.

Ini umumnya lebih cocok untuk aplikasi web yang mengandalkan kinerja database, dan tidak perlu fitur Relation Database Engine yang lebih canggih. Misalnya, toko Key-> Value yang menyediakan kueri sederhana dengan antarmuka id mungkin 10-100x lebih cepat dari implementasi SQL server yang sesuai, dengan biaya pemeliharaan pengembang yang lebih rendah.

Salah satu contohnya adalah makalah ini untuk OLTP Tuple Store, yang mengorbankan transaksi untuk pemrosesan berulir tunggal (tidak ada masalah konkurensi karena tidak ada konkurensi diizinkan), dan menyimpan semua data dalam memori; mencapai kinerja 10-100x lebih baik dibandingkan dengan sistem yang digerakkan RDBMS serupa . Pada dasarnya, ini menjauh dari pandangan 'One Size Fits All' tentang SQL dan sistem database.

CoderTao
sumber
1
Tautan pertama Anda yang merujuk pada arti NoSQL (berlabel "ini") tampaknya sudah mati, perbaiki.
jobin
7

Dalam praktiknya, NoSQL adalah sistem basis data yang mendukung akses cepat ke objek biner besar (docs, jpgs dll) menggunakan strategi akses berbasis kunci. Ini adalah keberangkatan dari akses SQL tradisional yang hanya cukup baik untuk nilai-nilai alfanumerik. Tidak hanya penyimpanan internal dan strategi akses tetapi juga sintaks dan batasan pada format tampilan membatasi SQL tradisional. Implementasi BLOB dari database relasional tradisional juga menderita dari pembatasan ini.

Di belakang layar itu adalah pengakuan tidak langsung dari kegagalan model SQL untuk mendukung segala bentuk OLTP atau dukungan untuk format data baru. "Dukungan" berarti tidak hanya menyimpan tetapi kemampuan akses penuh - terprogram dan sesuai permintaan dengan menggunakan model standar.

Penggemar relasional dengan cepat memodifikasi definisi NoSQL dari Not-SQL ke Not-Only-SQL agar SQL tetap ada di gambar! Ini tidak baik terutama ketika kita melihat bahwa sebagian besar program Java saat ini menggunakan pemetaan ORM dari model relasional yang mendasarinya. Konsep baru harus memiliki definisi yang jelas. Kalau tidak, akan berakhir seperti SOA.

Dasar dari sistem NoSQL terletak pada pasangan kunci-nilai acak. Tapi ini bukan hal baru. Sistem basis data tradisional seperti IMS dan IDMS memang mendukung kunci ram hash (tanpa menggunakan indeks apa pun) dan mereka masih melakukannya. Sebenarnya IDMS sudah memiliki kata kunci NONSQL di mana mereka mendukung akses SQL ke database jaringan lama mereka yang mereka sebut sebagai NONSQL.

Gopi Nathan
sumber
5

Ini seperti Jacuzzi: merek dan nama generik. Ini bukan hanya teknologi tertentu, tetapi lebih pada jenis teknologi tertentu, dalam hal ini mengacu pada "database" skala besar (sering jarang) seperti Google BigTable atau CouchDB.

Joel Coehoorn
sumber
5

NoSQL program yang sebenarnya tampaknya menjadi basis data relasional yang diimplementasikan dalam awk menggunakan file flat di backend. Meskipun mereka menyatakan, "NoSQL pada dasarnya tidak memiliki batas arbitrer, dan dapat bekerja di mana produk lain tidak bisa. Misalnya tidak ada batasan pada ukuran bidang data, jumlah kolom, atau ukuran file", saya tidak berpikir itu adalah database skala besar di masa depan.

Seperti yang dikatakan Joel, basis data berskala besar seperti BigTable atau HBase , jauh lebih menarik. GQL adalah bahasa query yang terkait dengan BigTable dan App Engine. Ini sebagian besar SQL tweak untuk menghindari fitur Google menganggap botol-leher (seperti bergabung). Namun, saya belum pernah mendengar ini disebut sebagai "NoSQL" sebelumnya.

Matthew Flaschen
sumber
5

NoSQL adalah sistem database yang tidak menggunakan query SQL berbasis string untuk mengambil data.

Alih-alih, Anda membangun kueri menggunakan API yang akan mereka berikan, misalnya Amazon DynamoDB adalah contoh yang baik dari database NoSQL.

Database NoSQL lebih baik untuk aplikasi besar di mana skalabilitas penting.

David Xu
sumber
1

Apakah NoSQL berarti basis data non-relasional?

Ya, NoSQL berbeda dari RDBMS dan OLAP. Ini menggunakan model konsistensi lebih longgar daripada database relasional tradisional.

Model konsistensi digunakan dalam sistem terdistribusi seperti sistem memori bersama terdistribusi atau penyimpanan data terdistribusi.

Bagaimana cara kerjanya secara internal?

Sistem basis data NoSQL sering sangat dioptimalkan untuk operasi pengambilan dan penambahan dan seringkali menawarkan sedikit fungsionalitas di luar penyimpanan rekaman (mis. Toko nilai-kunci). Fleksibilitas run-time yang berkurang dibandingkan dengan sistem SQL penuh dikompensasi oleh peningkatan skalabilitas dan kinerja yang ditandai untuk model data tertentu.

Ini dapat bekerja pada Data Terstruktur dan Tidak Terstruktur. Ini menggunakan Koleksi, bukan Tabel

Bagaimana Anda menanyakan "basis data" seperti itu?

Tonton SQL vs NoSQL: Battle of the Backends ; itu menjelaskan semuanya.

Arun C
sumber