7 kebenaran sukar mengenai revolusi NoSQL

Kata kunci NoSQL telah menjadi metastasis selama beberapa tahun. Kegembiraan mengenai kedai data pantas ini memabukkan, dan kami bersalah seperti mana-mana orang yang melihat tarikan NoSQL yang sangat hebat. Namun bulan madu akan berakhir, dan inilah masanya untuk mulai menyeimbangkan semangat kita dengan beberapa kebenaran keras yang bermata kecil.

Jangan salah faham. Kami masih berusaha untuk mencuba eksperimen terbaru dalam membina mekanisme mudah untuk menyimpan data. Kami masih mendapat nilai mendalam di MongoDB, CouchDB, Cassandra, Riak, dan kedudukan NoSQL yang lain. Kami masih merancang untuk memasukkan beberapa data kami yang paling dipercayai ke dalam timbunan kod ini kerana data itu bertambah baik dan lebih banyak ujian setiap hari.

[Juga pada: NoSQL menonjol: Pangkalan data baru untuk aplikasi baru | Paparan pertama: Pangkalan Data Oracle NoSQL | Dapatkan intipati kisah utama setiap hari di buletin Harian. ]

Tetapi kami mula merasakan perubahan, kerana sistem NoSQL jauh dari sempurna dan sering menggosok dengan cara yang salah. Pemaju yang paling pintar mengetahui perkara ini sejak awal. Mereka tidak membakar manual SQL dan mengirim nastygram kepada tenaga penjualan vendor SQL mereka yang dulu. Tidak, pemaju NoSQL pintar hanya menyatakan bahawa NoSQL bermaksud "Bukan Hanya SQL." Sekiranya orang ramai salah menafsirkan akronim, itu adalah masalah mereka.

Senarai keluhan ini, besar dan kecil, adalah usaha untuk mendokumentasikan fakta ini dan membersihkan udara. Ini bertujuan untuk memperbaikinya sekarang agar kita dapat melakukan pekerjaan yang lebih baik dengan memahami pertukaran dan kompromi.

Kebenaran keras NoSQL No. 1: BERSAMA bermaksud ketekalan

Salah satu keluhan pertama yang ada pada sistem SQL adalah kos pengiraan untuk melaksanakan JOIN antara dua jadual. Ideanya adalah untuk menyimpan data di satu dan satu tempat sahaja. Sekiranya anda menyimpan senarai pelanggan, anda meletakkan alamat jalan mereka dalam satu jadual dan menggunakan ID pelanggan mereka di setiap jadual yang lain. Apabila anda menarik data, JOIN menghubungkan ID dengan alamat dan semuanya tetap konsisten.

Masalahnya ialah JOIN boleh menjadi mahal, dan beberapa DBA telah membuat perintah JOIN yang rumit yang mengganggu pikiran, menjadikan perkakasan terpantas menjadi enapan. Tidak menghairankan bahawa pembangun NoSQL mengubah kekurangan mereka menjadi ciri: Mari kita simpan alamat pelanggan di jadual yang sama dengan yang lain! Cara NoSQL adalah menyimpan pasangan nilai-kunci untuk setiap orang. Apabila tiba masanya, anda mengambil semuanya.

Malangnya, orang yang mahu jadualnya tetap konsisten masih memerlukan BERSAMA. Sebaik sahaja anda mula menyimpan alamat pelanggan dengan segala yang lain mengenai mereka, anda sering kali mempunyai banyak salinan alamat tersebut di setiap jadual. Dan apabila anda mempunyai banyak salinan, anda perlu mengemas kini semuanya pada masa yang sama. Kadang-kadang ia berfungsi, tetapi apabila tidak, NoSQL tidak bersedia membantu transaksi.

Tunggu, kata anda, mengapa tidak mempunyai jadual berasingan dengan maklumat pelanggan? Dengan cara itu hanya akan ada satu rekod yang akan berubah. Ini idea yang bagus, tetapi sekarang anda boleh menulis JOIN sendiri dengan logik anda sendiri.

Kebenaran keras NoSQL No. 2: Transaksi yang rumit

Katakan anda OK untuk hidup tanpa MENYERTAI jadual kerana anda mahukan kepantasan. Ini adalah pertukaran yang boleh diterima, dan kadangkala SQL DBA menyusun jadual untuk alasan ini.

Masalahnya adalah bahawa NoSQL menjadikannya sukar untuk memastikan pelbagai entri tetap konsisten. Selalunya tidak ada transaksi untuk memastikan bahawa perubahan pada beberapa jadual dibuat bersama. Untuk itu, anda sendiri dan kerosakan dapat memastikan jadual berubah tidak konsisten.

Pelaksanaan NoSQL yang paling awal menjangkiti urus niaga ini. Mereka akan menawarkan senarai data yang konsisten, kecuali jika tidak. Dengan kata lain, mereka mengejar data bernilai terendah di mana kesalahan tidak akan membuat perbezaan material.

Sekarang beberapa pelaksanaan NoSQL menawarkan sesuatu yang mendekati transaksi. Sebagai contoh, produk NoSQL Oracle menawarkan kawalan transaksional terhadap data yang ditulis ke satu nod dan membolehkan anda memilih jumlah konsistensi yang fleksibel di beberapa nod. Sekiranya anda mahukan konsistensi yang sempurna, anda mesti menunggu setiap tulisan mencapai semua node. Beberapa kedai data NoSQL lain bereksperimen dengan menambahkan lebih banyak struktur dan perlindungan seperti ini.

Kebenaran keras NoSQL No. 3: Pangkalan data boleh menjadi pintar

Banyak pengaturcara NoSQL suka membual tentang bagaimana kod ringan dan mekanisme mudah mereka berfungsi dengan sangat cepat. Mereka biasanya tepat ketika tugas-tugasnya semudah di dalam NoSQL, tetapi itu berubah ketika masalahnya semakin sukar.

Pertimbangkan cabaran lama BERSAMA. Sebaik sahaja pengaturcara NoSQL mula menghasilkan perintah JOIN mereka sendiri dalam logik mereka sendiri, mereka mula mencuba melakukannya dengan cekap. Pembangun SQL telah menghabiskan beberapa dekad untuk membangunkan enjin yang canggih untuk mengendalikan perintah JOIN dengan seefisien mungkin. Seorang pengembang SQL memberitahu saya bahawa dia cuba menyegerakkan kodnya dengan cakera keras yang berputar sehingga dia akan meminta data hanya ketika kepala berada tepat di atas tempat yang tepat. Ini mungkin kelihatan melampau, tetapi pemaju SQL telah melakukan hacks serupa selama beberapa dekad.

Tidak syak lagi bahawa pengaturcara menghabiskan berhari-hari mencabut rambut mereka berusaha menyusun pertanyaan SQL mereka untuk memanfaatkan semua kecerdasan terpendam ini. Mungkin tidak mudah untuk diketuk, tetapi ketika pengaturcara mengetahuinya, pangkalan data benar-benar dapat dinyanyikan.

Bahasa pertanyaan yang canggih seperti SQL selalu berpotensi untuk mengatasi bahasa pertanyaan yang tidak canggih seperti yang terdapat di NoSQL. Mungkin tidak masalah dengan hasil yang sederhana, tetapi ketika tindakan menjadi rumit, SQL sedang dijalankan di mesin tepat di sebelah data. Ia mempunyai sedikit overhead untuk mengambil data dan melakukan kerja. Pelayan NoSQL biasanya harus menghantar data ke tempat yang dituju.

Kebenaran keras NoSQL No. 4: Terlalu banyak model akses

Secara teori, SQL sepatutnya menjadi bahasa standard. Sekiranya anda menggunakan SQL untuk satu pangkalan data, anda seharusnya dapat menjalankan pertanyaan yang sama dalam versi lain yang sesuai. Tuntutan ini mungkin berfungsi dengan beberapa pertanyaan mudah, tetapi setiap DBA tahu bahawa memerlukan beberapa tahun untuk mempelajari keanehan SQL untuk versi yang berbeza dari pangkalan data yang sama. Kata kunci ditakrifkan semula, dan pertanyaan yang berfungsi pada satu versi tidak akan berfungsi dengan yang lain.

NoSQL lebih murni. Ia seperti Menara Babel. Sejak awal, masing-masing pembangun NoSQL telah berusaha membayangkan bahasa yang terbaik, tetapi mereka mempunyai khayalan yang sangat berbeza. Pusat percubaan ini bagus - sehingga anda cuba melompat antara alat. Pertanyaan untuk CouchDB dinyatakan sebagai sepasang fungsi JavaScript untuk pemetaan dan pengurangan. Versi awal Cassandra menggunakan API tahap rendah yang disebut Thrift; versi yang lebih baru menawarkan CQL, bahasa pertanyaan seperti SQL yang mesti dihuraikan dan difahami oleh pelayan. Masing-masing berbeza dengan cara tersendiri.

Setiap alat tidak hanya mempunyai keistimewaan tersendiri, ia menggunakan falsafah dan cara mengekspresikannya yang sama sekali berbeza. Tidak ada cara mudah untuk beralih antara kedai data dan anda sering tertinggal menulis banyak kod gam hanya untuk memberi anda pilihan untuk beralih di masa depan. Ini mungkin tidak terlalu sukar apabila anda memasukkan pasangan kunci dan nilai ke dalam sistem, tetapi ia dapat bertambah semakin memburukkan lagi kerumitan yang anda perkenalkan.

Kebenaran keras NoSQL No. 5: Fleksibiliti skema adalah masalah menunggu untuk berlaku

Salah satu idea hebat dari model NoSQL adalah tidak memerlukan skema. Dengan kata lain, pengaturcara tidak perlu memutuskan terlebih dahulu lajur mana yang akan tersedia untuk setiap baris dalam jadual. Satu entri mungkin mempunyai 20 tali yang dilekatkan padanya, yang lain mungkin mempunyai 12 bilangan bulat, dan yang lain mungkin kosong sepenuhnya. Pengaturcara dapat membuat keputusan setiap kali mereka perlu menyimpan sesuatu. Mereka tidak perlu meminta izin dari DBA, dan mereka tidak perlu mengisi semua dokumen untuk menambahkan lajur baru.

Semua kebebasan itu kedengaran memabukkan, dan di tangan kanan ia dapat mempercepat pembangunan. Tetapi adakah idea yang baik untuk pangkalan data yang mungkin hidup melalui tiga pasukan pemaju? Adakah ia boleh digunakan untuk pangkalan data yang mungkin bertahan lebih dari enam bulan?

Dengan kata lain, pembangun mungkin menginginkan kebebasan memasukkan pasangan lama ke dalam pangkalan data, tetapi adakah anda ingin menjadi pemaju kelima yang hadir setelah empat memilih kunci mereka sendiri? Sangat mudah untuk membayangkan pelbagai perwakilan "hari jadi", dengan setiap pembangun memilih perwakilannya sendiri sebagai kunci semasa menambahkan ulang tahun pengguna ke entri. Sekumpulan pemaju mungkin membayangkan hampir semua perkara: "bday," "b-day," "birthday".

Struktur NoSQL tidak menawarkan sokongan untuk membatasi masalah ini kerana itu akan bermaksud mengolah semula skema. Ia tidak mahu menganiaya naib pengembang yang sangat keren. Skema akan menghalangi.

Faktanya ialah menambahkan lajur ke meja bukanlah masalah besar, dan disiplinnya mungkin baik untuk pembangun. Sama seperti membantu memaksa pembangun untuk menetapkan jenis pemboleh ubah, ia juga membantu memaksa pembangun untuk menetapkan jenis data yang dilampirkan pada lajur. Ya, DBA mungkin memaksa pembangun untuk mengisi borang dalam rangkap tiga sebelum melampirkan lajur itu, tetapi tidak seburuk menangani setengah lusin kunci yang dibuat dengan cepat oleh pengaturcara.

Kebenaran keras NoSQL No. 6: Tidak ada tambahan

Katakan anda tidak mahu semua data dalam semua baris, dan anda mahukan jumlah satu lajur. Pengguna SQL dapat menjalankan pertanyaan dengan operasi SUM dan mengirim satu - hanya satu - nombor kembali kepada anda.

Pengguna NoSQL mendapatkan semua data yang dihantar kembali kepada mereka dan kemudian dapat melakukan penambahan itu sendiri. Penambahan itu tidak menjadi masalah kerana memerlukan masa yang sama untuk menambahkan nombor pada mesin mana pun. Walau bagaimanapun, penghantaran data di sekitar lambat, dan lebar jalur yang diperlukan untuk menghantar semua data itu mahal.

Terdapat beberapa tambahan dalam pangkalan data NoSQL. Sekiranya anda ingin melakukan apa-apa selain menyimpan dan mengambil data, anda mungkin akan melakukannya sendiri. Dalam banyak kes, anda akan melakukannya di mesin lain dengan salinan lengkap data. Masalah sebenarnya ialah selalunya berguna untuk melakukan semua pengiraan pada mesin yang menyimpan data kerana penghantaran data memerlukan masa. Tetapi sukar untuk anda.

Penyelesaian NoSQL muncul. Struktur pertanyaan Peta dan Kurangkan dari MongoDB memberi anda struktur JavaScript sewenang-wenang untuk menyusun data. Hadoop adalah mekanisme yang kuat untuk menyebarkan pengiraan di seluruh timbunan mesin yang juga menyimpan data. Ini adalah struktur yang berkembang pesat yang menawarkan alat peningkatan yang cepat untuk membina analisis yang canggih. Ia sangat sejuk, tetapi masih baru. Dan secara teknikal Hadoop adalah kata kunci yang sama sekali berbeza daripada NoSQL, walaupun perbezaan di antara mereka semakin pudar.

Kebenaran keras NoSQL No. 7: Lebih sedikit alat

Pasti, anda boleh menyusun dan menjalankan NoSQL di pelayan anda. Pasti, anda boleh menulis kod tersuai anda sendiri untuk mendorong dan menarik data anda dari timbunan. Tetapi bagaimana jika anda mahu melakukan lebih banyak perkara? Bagaimana jika anda ingin membeli salah satu pakej pelaporan mewah itu? Atau pakej grafik? Atau untuk memuat turun beberapa alat sumber terbuka untuk membuat carta?

Maaf, kebanyakan alat ditulis untuk pangkalan data SQL. Sekiranya anda ingin membuat laporan, membuat grafik, atau melakukan sesuatu dengan semua data dalam timbunan NoSQL anda, anda perlu mula membuat pengekodan. Alat standard siap untuk mengesan data dari Oracle, Microsoft SQL, MySQL, dan Postgres. Data anda ada dalam NoSQL? Mereka sedang berusaha.

Dan mereka akan mengusahakannya sebentar. Walaupun mereka melalui semua gelung untuk bangun dan menjalankan dengan salah satu pangkalan data NoSQL, mereka harus bermula dari awal untuk mengendalikan sistem seterusnya. Terdapat lebih daripada 20 pilihan NoSQL yang berbeza, yang semuanya menggunakan falsafah mereka sendiri dan cara mereka bekerja dengan data. Cukup sukar bagi pembuat alat untuk menyokong keistimewaan dan ketidakkonsistenan dalam SQL, tetapi lebih rumit untuk menjadikan alat ini berfungsi dengan setiap pendekatan NoSQL.

Ini adalah masalah yang perlahan-lahan akan hilang. Pembangun dapat merasakan kegembiraan dalam NoSQL, dan mereka akan mengubahsuai alat mereka untuk bekerja dengan sistem ini, tetapi akan memakan masa. Mungkin kemudian mereka akan memulakan MongoDB, yang tidak akan membantu anda kerana anda menjalankan Cassandra. Piawaian membantu dalam situasi seperti ini, dan NoSQL tidak begitu besar.

Kekurangan NoSQL secara ringkas

Semua kekurangan NoSQL ini dapat dikurangkan menjadi satu pernyataan mudah: NoSQL membuang fungsi demi kelajuan. Sekiranya anda tidak memerlukan fungsi, anda akan baik-baik saja, tetapi jika anda memerlukannya pada masa akan datang, anda akan menyesal.

Revolusi adalah endemik budaya teknologi. Kumpulan baru datang dan bertanya-tanya mengapa generasi terakhir membina sesuatu yang begitu kompleks, dan mereka berupaya meruntuhkan institusi lama. Setelah sekian lama, mereka mula menyedari mengapa semua institusi lama begitu kompleks, dan mereka mula menerapkan ciri tersebut sekali lagi.

Kami melihatnya di dunia NoSQL, kerana beberapa projek mula menambahkan kembali perkara yang kelihatan seperti transaksi, skema, dan standard. Inilah sifat kemajuan. Kami meruntuhkan semuanya hanya untuk membinanya semula. NoSQL selesai dengan fasa pertama revolusi dan sekarang saatnya untuk yang kedua. Raja sudah mati. Daulat Tuanku.

Artikel berkaitan

  • Keistimewaan NoSQL: Pangkalan data baru untuk aplikasi baru
  • Paparan pertama: Pangkalan Data Oracle NoSQL
  • Flexing NoSQL: MongoDB dalam semakan
  • 10 petua prestasi penting untuk MySQL
  • 10 alat MySQL penting untuk pentadbir
  • Kuasai MySQL di awan Amazon
  • Masa untuk standard NoSQL sekarang

Kisah ini, "7 kebenaran keras tentang revolusi NoSQL," awalnya diterbitkan di .com. Ikuti perkembangan terkini dalam pengurusan data di .com. Untuk perkembangan terkini dalam berita teknologi perniagaan, ikuti .com di Twitter.