Alasan bagus JANGAN menggunakan database relasional?


139

Bisakah Anda menunjukkan alat penyimpanan data alternatif dan memberikan alasan yang baik untuk menggunakannya alih-alih database relasional yang lama? Menurut pendapat saya, sebagian besar aplikasi jarang menggunakan kekuatan penuh SQL - akan menarik untuk melihat bagaimana membangun aplikasi bebas SQL.

Jawaban:


148

File teks biasa dalam sistem file

  • Sangat mudah dibuat dan diedit
  • Mudah bagi pengguna untuk memanipulasi dengan alat sederhana (yaitu editor teks, grep dll)
  • Penyimpanan dokumen biner yang efisien

File XML atau JSON pada disk

  • Seperti di atas, tetapi dengan sedikit lebih banyak kemampuan untuk memvalidasi struktur.

File Spreadsheet / CSV

  • Model yang sangat mudah bagi pengguna bisnis untuk mengerti

Subversion (atau sistem kontrol versi berbasis disk serupa)

  • Dukungan yang sangat baik untuk versi data

Berkeley DB (Pada dasarnya, hashtable berbasis disk)

  • Sangat sederhana secara konseptual (hanya kunci / nilai yang tidak diketik)
  • Cukup cepat
  • Tidak ada biaya administrasi
  • Saya mendukung transaksi

DB Sederhana Amazon

  • Sama seperti Berkeley DB, saya percaya, tetapi diselenggarakan

Google App Engine Datastore

  • Host dan sangat terukur
  • Penyimpanan nilai kunci per dokumen (yaitu model data fleksibel)

CouchDB

  • Fokus dokumen
  • Penyimpanan sederhana data semi-terstruktur / berdasarkan dokumen

Koleksi bahasa asli (disimpan dalam memori atau diserialkan pada disk)

  • Integrasi bahasa yang sangat ketat

Mesin penyimpanan kustom (tulisan tangan)

  • Kinerja yang berpotensi sangat tinggi dalam kasus penggunaan yang diperlukan

Saya tidak bisa mengklaim tahu banyak tentang mereka, tetapi Anda mungkin juga ingin melihat ke sistem basis data objek .


10
Akan lebih bagus jika Anda juga menjelaskan kelemahan dari masing-masing pilihan, jika tidak, bagaimana cara memilih? Terima kasih,
Sklivvz

4
Juga menulis jutaan baris ke dalam DB dapat memakan waktu sehari sementara menambahkan jutaan baris log ke file hanya membutuhkan beberapa menit. Saya tidak akan pernah mengerti mengapa orang bersikeras untuk memasukkan data log ke dalam database.
Aaron Digulla

33
Aaron: Saya punya satu alasan: PILIH pesan DARI log DI MANA (tanggal ANTARA 2009-01-01 DAN 2009-03-01) DAN type = 'error' AND system = 'windows' :) Bagaimana Anda memuatnya dari file teks ?
Tomáš Fejfar

1
Saya sangat mendukung file teks bila memungkinkan. Anda tidak dapat selalu menggunakannya tetapi ketika Anda bisa, mereka jauh lebih mudah untuk mendiagnosis masalah.
Loren Pechtel

berkeley db pasti memiliki transaksi. file teks dan file xml / json tidak, jadi aplikasi multithreaded dapat menginjaknya jika Anda tidak hati-hati. File CSV sangat bagus untuk koleksi parameter karena pengguna bisnis dapat melihatnya dan mengeditnya tanpa alat tambahan. File teks bagus untuk aplikasi tulis-sekali / baca-hampir-tidak pernah seperti logging. Untuk memilih pendekatan, Anda perlu mencari tahu apa yang ingin Anda capai
O. Jones

26

Jawaban Matt Sheppard sangat bagus (mod up), tetapi saya akan mempertimbangkan faktor-faktor ini ketika memikirkan spindle:

  1. Struktur: apakah jelas pecah berkeping-keping, atau apakah Anda membuat pengorbanan?
  2. Penggunaan: bagaimana data akan dianalisis / diambil / grokked?
  3. Seumur hidup: berapa lama data berguna?
  4. Ukuran: berapa banyak data yang ada?

Satu keuntungan khusus dari file CSV dibandingkan RDBMSes adalah mereka dapat dengan mudah dipadatkan dan dipindah ke hampir semua mesin lain. Kami melakukan transfer data besar, dan semuanya cukup sederhana, kami hanya menggunakan satu file CSV besar, dan mudah menggunakan skrip alat seperti rsync. Untuk mengurangi pengulangan pada file CSV besar, Anda bisa menggunakan sesuatu seperti YAML . Saya tidak yakin saya akan menyimpan sesuatu seperti JSON atau XML, kecuali jika Anda memiliki persyaratan hubungan yang signifikan.

Sejauh alternatif yang tidak disebutkan, jangan diskon Hadoop , yang merupakan implementasi open source dari MapReduce. Ini akan bekerja dengan baik jika Anda memiliki TON data yang terstruktur secara longgar yang perlu dianalisis, dan Anda ingin berada dalam skenario di mana Anda bisa menambahkan 10 mesin lagi untuk menangani pemrosesan data.

Sebagai contoh, saya mulai mencoba menganalisis kinerja yang pada dasarnya semua nomor waktu dari berbagai fungsi yang dicatat di sekitar 20 mesin. Setelah mencoba memasukkan semuanya ke dalam RDBMS, saya menyadari bahwa saya benar-benar tidak perlu menanyakan data lagi setelah saya mengumpulkannya. Dan, itu hanya berguna untuk saya dalam format gabungan. Jadi, saya menyimpan file-file log di sekitar, dikompresi, dan kemudian meninggalkan data agregat dalam DB.

Catatan Saya lebih terbiasa berpikir dengan ukuran "besar".


5
Salah satu bahaya file CSV adalah melarikan diri perlu dilakukan dengan benar; itu mudah untuk mengimplementasikan pembaca atau penulis CSV yang tidak benar-benar mengikuti spesifikasi karena terlihat sangat sederhana dan ada beberapa seluk-beluk: en.wikipedia.org/wiki/Comma-separated_values#Specification
Jared Updike

10

Prety filesystem berguna untuk menyimpan data biner, yang tidak pernah bekerja dengan sangat baik di database relasional.



6

Jika Anda tidak membutuhkan ACID , Anda mungkin tidak memerlukan overhead RDBMS. Jadi, tentukan apakah Anda membutuhkannya terlebih dahulu. Sebagian besar jawaban non-RDBMS yang diberikan di sini tidak memberikan ACID.


1
Bisakah Anda memberi contoh mengapa / kapan ACID tidak diperlukan?
Ivan Voroshilin

1
@vibneiro, jika basis data hanya memiliki satu pengguna yang hanya melakukan operasi berurutan, atau risiko ketidakkonsistenan basis data jika terjadi kegagalan daya dapat diterima, atau konsep transaksi basis data tidak berlaku, atau tidak perlu kendala, kaskade, pemicu atau sejenisnya, maka penyedia non-RDBMS non- ACID (misalnya file teks dengan API seperti RDBMS) mungkin sudah cukup. Misalnya, aplikasi Anda mungkin menyimpan basis data pesan diagnostik historis yang ACID sama sekali tidak relevan dan "log.txt" sudah cukup.
bzlm

Ternyata ACID tidak diperlukan dalam kasus yang sangat jarang. Saya heran mengapa basis data NoSQL begitu populer? Sebagian besar dari mereka tidak mendukung ACIDity penuh.
Ivan Voroshilin

@vibneiro, NoSQL biasanya lebih mudah, lebih ringan, lebih dapat disematkan, lebih dapat di-host, lebih intuitif, lebih fleksibel, dan biasanya dengan beberapa ACID. Jika Anda tidak memiliki data relasional, RDBMS mungkin bukan yang Anda butuhkan.
bzlm

6

Mesin penyimpanan khusus (tulisan tangan) / Berpotensi kinerja sangat tinggi dalam kasus penggunaan yang diperlukan

http://www.hdfgroup.org/

Jika Anda memiliki kumpulan data yang sangat besar, alih-alih menggulirkan data Anda sendiri, Anda dapat menggunakan HDF, Format Data Hierarkis.

http://en.wikipedia.org/wiki/Hierarchical_Data_Format :

HDF mendukung beberapa model data yang berbeda, termasuk array multidimensi, gambar raster, dan tabel.

Ini juga hierarkis seperti sistem file, tetapi data disimpan dalam satu file biner ajaib.

HDF5 adalah suite yang memungkinkan pengelolaan koleksi data yang sangat besar dan kompleks.

Pikirkan petabyte data penginderaan jauh NASA / JPL.


4

Hari,

Satu kasus yang bisa saya pikirkan adalah ketika data yang Anda modelkan tidak dapat dengan mudah diwakili dalam database relasional.

Salah satu contohnya adalah database yang digunakan oleh operator telepon seluler untuk memantau dan mengontrol stasiun pangkalan untuk jaringan telepon seluler.

Saya hampir semua kasus ini, OO DB digunakan, baik produk komersial atau sistem linting yang memungkinkan pusaka benda.

Saya telah bekerja pada aplikasi pemantauan 3G untuk perusahaan besar yang akan tetap tanpa nama, tetapi yang logonya merupakan noda anggur merah (-:, dan mereka menggunakan OO DB seperti itu untuk melacak semua berbagai atribut untuk sel-sel individual di dalam jaringan.

Interogasi DB semacam itu dilakukan dengan menggunakan teknik berpemilik yang, biasanya, benar-benar bebas dari SQL.

HTH.

Bersulang,

rampok


4
Mengapa data basestasi tidak cocok dengan model relasional?
kaybenleroll

3

Database objek bukan database relasional. Mereka bisa sangat berguna jika Anda hanya ingin memasukkan beberapa objek dalam database. Mereka juga mendukung versi dan memodifikasi kelas untuk objek yang sudah ada di database. db4o adalah yang pertama muncul di benak saya.


3

Dalam beberapa kasus (data pasar keuangan dan kontrol proses misalnya) Anda mungkin perlu menggunakan basis data waktu nyata daripada RDBMS. Lihat tautan wiki


3

Ada alat RAD bernama JADE yang ditulis beberapa tahun lalu yang memiliki OODBMS bawaan. Inkarnasi sebelumnya dari mesin DB juga mendukung Digitalk Smalltalk. Jika Anda ingin mencicipi bangunan aplikasi menggunakan paradigma non-RDBMS, ini mungkin permulaan.

Produk OODBMS lainnya termasuk Objectivity , GemStone (Anda perlu mendapatkan VisualWorks Smalltalk untuk menjalankan versi Smalltalk tetapi ada juga versi java). Ada juga beberapa proyek penelitian open-source di ruang ini - EXODUS dan keturunannya SHORE datang ke pikiran.

Sayangnya, konsep itu tampaknya mati, mungkin karena kurangnya standar yang terlihat jelas dan kemampuan permintaan ad-hoc yang relatif buruk relatif terhadap sistem RDMBS berbasis SQL.

OODBMS paling cocok untuk aplikasi dengan struktur data inti yang paling baik disajikan sebagai grafik node yang saling berhubungan. Saya biasa mengatakan bahwa aplikasi OODBMS yang klasik adalah Multi-User Dungeon (MUD) di mana ruangan akan berisi avatar pemain dan benda-benda lainnya.


2
Dulu benar bahwa Anda memerlukan klien Smalltalk untuk menggunakan GemStone / S (untuk aplikasi desktop) tetapi dengan kerangka kerja web Aida ( aidaweb.si ), dan Seaside ( seaside.st ) GemStone / S dapat digunakan secara langsung sebagai aplikasi server. Lihat info di GLASS ( seaside.gemstone.com )
Dale Henrichs

Alasan lain adalah jika Anda peduli dengan kualitas data. Dalam OODB seperti Gemstone, jauh lebih mudah untuk menegakkan aturan validitas yang kompleks.
Stephan Eggermont

Kemampuan kueri ad hoc dari OODBMS jauh lebih baik daripada kemampuan RDBMS-es berbasis SQL
Stephan Eggermont

1

Anda dapat pergi jauh menggunakan file yang disimpan dalam sistem file. RDBMS menjadi lebih baik dalam menangani gumpalan, tetapi ini bisa menjadi cara alami untuk menangani data gambar dan sejenisnya, terutama jika kueri sederhana (enumerasi dan pemilihan masing-masing item.)

Hal-hal lain yang tidak cocok dengan RDBMS adalah struktur data hierarkis dan saya menduga data geospasial dan model 3D juga tidak mudah untuk dikerjakan.

Layanan seperti Amazon S3 menyediakan model penyimpanan yang lebih sederhana (nilai kunci>) yang tidak mendukung SQL. Skalabilitas adalah kuncinya di sana.

File Excel dapat bermanfaat juga, terutama jika pengguna harus dapat memanipulasi data dalam lingkungan yang akrab dan membangun aplikasi lengkap untuk melakukan hal itu tidak layak.


1

Ada sejumlah besar cara untuk menyimpan data - bahkan "databse relasional" mencakup sejumlah alternatif dari pustaka kode sederhana yang memanipulasi file lokal (atau file) seolah-olah itu adalah database relasional pada basis pengguna tunggal, melalui sistem berbasis file daripada yang dapat menangani banyak pengguna ke banyak pilihan sistem berbasis "server" yang serius.

Kami banyak menggunakan file XML - Anda mendapatkan data yang terstruktur dengan baik, alat yang bagus untuk menanyakan sama kemampuan untuk mengedit jika perlu, sesuatu yang dapat dibaca manusia dan Anda tidak perlu khawatir tentang kerja mesin db (atau cara kerja dari mesin db). Ini bekerja dengan baik untuk hal-hal yang pada dasarnya hanya baca (dalam kasus kami lebih sering daripada tidak dihasilkan dari db di tempat lain) dan juga untuk sistem pengguna tunggal di mana Anda bisa memuat data dan menyimpannya sesuai kebutuhan - tetapi Anda menciptakan peluang untuk masalah jika Anda ingin mengedit multi-pengguna - setidaknya satu file.

Bagi kami hanya itu - kami akan menggunakan sesuatu yang akan melakukan SQL (MS menawarkan seperangkat alat yang dijalankan dari .DLL untuk melakukan hal-hal pengguna tunggal sampai ke server perusahaan dan mereka semua berbicara dengan SQL yang sama (dengan batasan di ujung bawah)) atau kita akan menggunakan XML sebagai format karena (bagi kita) verbositas jarang menjadi masalah.

Saat ini kami tidak perlu memanipulasi data biner di aplikasi kami sehingga pertanyaan itu tidak muncul.

Murph


1

Orang mungkin ingin mempertimbangkan penggunaan server LDAP di tempat database SQL tradisional jika data aplikasi sangat berorientasi kunci / nilai dan hirarkis.


1

File BTree seringkali jauh lebih cepat daripada database relasional. SQLite mengandung di dalamnya sebuah perpustakaan BTree yang ada di domain publik (seperti dalam 'domain publik' yang sebenarnya, tidak menggunakan istilah secara longgar).

Terus terang, jika saya menginginkan sistem multi-pengguna, saya akan membutuhkan banyak upaya untuk tidak menggunakan database relasional server yang layak.


BTrees adalah implementasi dasar dari indeks normal. Oracle mendukung tabel Index-Organized yang hanya berupa tabel yang diimplementasikan sebagai indeks. Mereka lebih cepat membaca, lebih lambat untuk menulis dan menggunakan B-tree. Lihat: < oracle.com/technology/products/oracle9i/datasheets/iots/… >
borjab

1

Database teks lengkap, yang dapat ditanyakan dengan operator kedekatan seperti "dalam 10 kata," dll.

Database relasional adalah alat bisnis yang ideal untuk banyak tujuan - cukup mudah untuk dipahami dan dirancang, cukup cepat, memadai bahkan ketika mereka tidak dirancang dan dioptimalkan oleh seorang jenius yang bisa "menggunakan kekuatan penuh," dll.

Tetapi beberapa tujuan bisnis memerlukan pengindeksan teks lengkap, yang mesin relasional tidak berikan atau tempelkan sebagai renungan. Secara khusus, bidang hukum dan medis memiliki petak besar teks yang tidak terstruktur untuk disimpan dan dilalui.


1

Juga: * Skenario tertanam - Di mana biasanya diperlukan untuk menggunakan sesuatu yang lebih kecil daripada RDBMS yang lengkap. Db4o adalah ODB yang dapat dengan mudah digunakan dalam kasus seperti itu. * Pengembangan cepat atau bukti konsep - di mana Anda ingin fokus pada bisnis dan tidak khawatir tentang lapisan kegigihan


1

Teorema CAP menjelaskannya dengan ringkas. SQL terutama menyediakan "Konsistensi Yang Kuat: semua klien melihat tampilan yang sama, bahkan di hadapan pembaruan".


1

KISS: Keep It Small and Simple


1
Itu versi sopan ... Saya lebih sering mendengar "Tetap sederhana, bodoh" ... atau, teguk, mungkin itu yang dikatakan orang kepada saya! :-(
GreenMatt

1

Saya akan menawarkan RDBMS :) Jika Anda tidak ingin memiliki masalah dengan pengaturan / administrasi, gunakan SQLite. Dibangun pada RDBMS dengan dukungan SQL penuh. Bahkan memungkinkan Anda untuk menyimpan semua jenis data di kolom apa pun.

Keuntungan utama terhadap misalnya file log: Jika Anda memiliki yang besar, bagaimana Anda akan mencari di dalamnya? Dengan mesin SQL, Anda cukup membuat indeks dan mempercepat operasi secara dramatis.

Tentang pencarian teks lengkap: SQLite juga memiliki modul untuk pencarian teks lengkap ..

Nikmati saja antarmuka standar yang bagus untuk data Anda :)


0

Salah satu alasan bagus untuk tidak menggunakan basis data relasional adalah ketika Anda memiliki kumpulan data besar dan ingin melakukan pemrosesan paralel dan didistribusikan secara masif pada data. Indeks web Google akan menjadi contoh sempurna dari kasus seperti itu.

Hadoop juga memiliki implementasi Sistem File Google yang disebut Sistem File Terdistribusi Hadoop .


0

Saya akan sangat menyarankan Lua sebagai alternatif penyimpanan data jenis SQLite.

Karena:

  • Bahasa dirancang sebagai bahasa deskripsi data untuk memulai
  • Sintaksnya dapat dibaca manusia (XML tidak )
  • Satu dapat mengkompilasi potongan Lua ke biner, untuk kinerja tambahan

Ini adalah opsi "koleksi bahasa asli" dari jawaban yang diterima. Jika Anda menggunakan C / C ++ sebagai level aplikasi, sangat masuk akal untuk melempar mesin Lua (100kB biner) hanya demi membaca konfigurasi / data atau menuliskannya.


Lua adalah bahasa pemrograman. Saran ini dapat digeneralisasi untuk menyarankan fitur persistensi / serialisasi dari bahasa pemrograman apa pun (misalnya acar / pisahkan dalam Python, atau JSON / YAML untuk Perl et al, dan sebagainya). Ini tidak membahas akses bersamaan dan jaminan ACID sama sekali.
Jim Dennis

Kamu benar. Apa yang hilang dari entri saya adalah sifat baca-saja tersirat dari penggunaan tersebut. Dalam skenario seperti itu saya pegang teks saya. Untuk penggunaan baca-tulis Lua dengan cara ini sama sekali tidak masuk akal. Banyak hal, sebagian besar metadata sistem file hanya dapat dibaca sehingga pendekatan seperti itu tidak berarti persyaratan lengkap.
akauppi
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.