Jawaban:
Saya akan memposting ini sebagai jawaban murni untuk mendukung percakapan - Tim Mahy , nawroth , dan CraigTP telah menyarankan database yang layak. CouchDB akan menjadi pilihan saya karena penggunaan Erlang , tetapi ada orang lain di luar sana.
Saya akan mengatakan ACID tidak bertentangan atau meniadakan konsep NoSQL ... Meskipun tampaknya ada tren mengikuti pendapat yang diungkapkan oleh merpati , saya berpendapat konsepnya berbeda.
NoSQL pada dasarnya tentang nilai kunci sederhana (misalnya Redis) atau skema gaya dokumen (pasangan nilai kunci yang dikumpulkan dalam model "dokumen", misalnya MongoDB) sebagai alternatif langsung ke skema eksplisit dalam RDBMSs klasik. Hal ini memungkinkan pengembang untuk memperlakukan hal - hal secara asimetris, sedangkan mesin tradisional telah menegakkan kesamaan di seluruh model data. Alasan ini sangat menarik adalah karena menyediakan cara berbeda untuk menghadapi perubahan , dan untuk set data yang lebih besar, ini memberikan peluang menarik untuk menangani volume dan kinerja.
ACID memberikan prinsip-prinsip yang mengatur bagaimana perubahan diterapkan ke database. Dengan cara yang sangat sederhana, ini menyatakan (versi saya sendiri):
Percakapan menjadi sedikit lebih bersemangat ketika datang ke gagasan propagasi dan kendala . Beberapa mesin RDBMS menyediakan kemampuan untuk menegakkan batasan (misalnya kunci asing) yang mungkin memiliki elemen propagasi (a cascade ). Dalam istilah yang lebih sederhana, satu "benda" mungkin memiliki hubungan dengan "benda" lain di dalam basis data, dan jika Anda mengubah atribut yang satu itu mungkin memerlukan yang lainnya diubah (diperbarui, dihapus, ... banyak opsi). Basis data NoSQL , yang sebagian besar (saat ini) berfokus pada volume data tinggi dan lalu lintas tinggi, tampaknya menangani gagasan pembaruan terdistribusi yang terjadi di dalam (dari perspektif konsumen) kerangka waktu sewenang-wenang. Ini pada dasarnya adalah bentuk replikasi khusus yang dikelola viatransaksi - jadi saya akan mengatakan bahwa jika basis data tradisional yang terdistribusi dapat mendukung ACID, demikian juga dengan basis data NoSQL.
Beberapa sumber untuk bacaan lebih lanjut:
UPDATE (27 Juli 2012): Tautan ke artikel Wikipedia telah diperbarui untuk mencerminkan versi artikel yang saat ini ketika jawaban ini diposting. Harap dicatat bahwa artikel Wikipedia saat ini telah banyak direvisi!
Menurut versi artikel Wikipedia yang lebih lama di NoSQL :
NoSQL adalah gerakan yang mempromosikan kelas penyimpanan data non-relasional yang didefinisikan secara longgar, yang terpecah dengan sejarah panjang basis data relasional dan jaminan ACID.
dan juga:
Nama itu merupakan upaya untuk menggambarkan munculnya semakin banyak toko data non-relasional terdistribusi yang sering tidak berupaya memberikan jaminan ACID.
dan
Sistem NoSQL sering memberikan jaminan konsistensi yang lemah seperti konsistensi akhirnya dan transaksi terbatas pada item data tunggal, meskipun orang dapat memaksakan jaminan ACID penuh dengan menambahkan lapisan middleware tambahan.
Jadi, singkatnya, saya akan mengatakan bahwa salah satu manfaat utama dari "NoSQL" menyimpan data berbeda yang kurangnya dari ACID properti. Selain itu, IMHO, semakin banyak orang mencoba menerapkan dan menegakkan properti ACID , semakin jauh dari "semangat" penyimpanan data "NoSQL" yang Anda dapatkan, dan semakin dekat ke RDBMS "benar" yang Anda dapatkan (relatif berbicara, tentu saja ).
Namun, semua yang mengatakan, "NoSQL" adalah istilah yang sangat samar dan terbuka untuk interpretasi individu, dan sangat bergantung pada seberapa banyak dari sudut pandang murni yang Anda miliki. Misalnya, yang paling modern-hari RDBMS sistem tidak benar-benar mematuhi semua dari Edgar F. Codd 's 12 aturan nya Model hubungan !
Mengambil pendekatan pragmatis, akan terlihat bahwa Apache CouchDB menjadi yang paling dekat dengan mewujudkan kedua kepatuhan ACID sambil tetap mempertahankan mentalitas "NoSQL" yang tidak berpasangan dan tidak berhubungan.
Harap pastikan Anda membaca pengantar Martin Fowler tentang database NoSQL . Dan video yang sesuai.
Pertama-tama, kita dapat membedakan dua jenis database NoSQL:
Secara desain, kebanyakan basis data yang berorientasi Grafik adalah ASAM !
Lalu, bagaimana dengan tipe lainnya?
Dalam database berorientasi agregat, kita dapat menempatkan tiga sub-tipe:
Apa yang kita sebut Agregat di sini, adalah apa yang didefinisikan oleh Eric Evans dalam Desain Berbasis Domain sebagai kemandirian Entitas dan Nilai-Objek dalam Konteks Terbatas yang diberikan.
Sebagai konsekuensinya, agregat adalah kumpulan data yang kami berinteraksi sebagai satu unit. Agregat membentuk batasan untuk operasi ACID dengan database. (Martin Fowler)
Jadi, pada tingkat Agregat, kita dapat mengatakan bahwa sebagian besar basis data NoSQL dapat seaman ACID RDBMS , dengan pengaturan yang tepat. Tentu saja, jika Anda menyetel server Anda untuk kecepatan terbaik, Anda mungkin akan melakukan sesuatu yang bukan ACID. Tetapi replikasi akan membantu.
Poin utama saya adalah bahwa Anda harus menggunakan database NoSQL sebagaimana adanya, bukan sebagai alternatif (murah) dari RDBMS. Saya telah melihat terlalu banyak proyek menyalahgunakan hubungan antar dokumen. Ini tidak bisa ASAM. Jika Anda tetap pada level dokumen, yaitu pada batas Agregat, Anda tidak memerlukan transaksi apa pun. Dan data Anda akan seaman dengan database ACID, bahkan jika itu tidak benar-benar ACID, karena Anda tidak memerlukan transaksi tersebut! Jika Anda memerlukan transaksi dan memperbarui beberapa "dokumen" sekaligus, Anda tidak lagi berada di dunia NoSQL - jadi gunakan mesin RDBMS!
beberapa pembaruan 2019: Mulai dalam versi 4.0, untuk situasi yang memerlukan atomicity untuk pembaruan ke beberapa dokumen atau konsistensi antara membaca ke beberapa dokumen, MongoDB menyediakan transaksi multi-dokumen untuk set replika .
FoundationDB kompatibel dengan ACID:
Ini memiliki transaksi yang tepat, sehingga Anda dapat memperbarui beberapa item data yang berbeda secara ACID. Ini digunakan sebagai dasar untuk mempertahankan indeks pada lapisan yang lebih tinggi.
Dalam pertanyaan ini seseorang harus menyebutkan OrientDB : OrientDB adalah basis data NoSQL, satu dari sedikit, yang mendukung transaksi sepenuhnya ACID. ACID tidak hanya untuk RDBMS karena itu bukan bagian dari aljabar Relasional. Jadi mungkin untuk memiliki database NoSQL yang mendukung ACID.
Fitur ini adalah yang paling saya lewatkan di MongoDB
ACID dan NoSQL sepenuhnya ortogonal. Satu tidak menyiratkan yang lain.
Saya memiliki buku catatan di meja saya, saya menggunakannya untuk mencatat hal-hal yang masih harus saya lakukan. Notebook ini adalah basis data NoSQL. Saya meminta menggunakan pencarian linear dengan "cache halaman" jadi saya tidak selalu harus mencari setiap halaman. Ini juga sesuai ACID karena saya memastikan bahwa saya hanya menulis satu hal pada satu waktu dan tidak pernah saat saya membacanya.
NoSQL berarti bukan SQL. Banyak orang bingung dan berpikir itu berarti penyimpanan sangat liar-barat-super-cepat. Tidak. Itu tidak berarti penyimpanan nilai kunci, atau konsistensi akhirnya. Semua itu berarti "bukan SQL", ada banyak basis data di planet ini dan kebanyakan dari mereka bukan SQL [rujukan?] .
Anda dapat menemukan banyak contoh di jawaban lain jadi saya tidak perlu mencantumkannya di sini, tetapi ada database non-SQL dengan kepatuhan ACID untuk berbagai operasi, beberapa hanya ACID untuk objek tunggal menulis sementara beberapa jaminan jauh lebih banyak. Setiap basis data berbeda.
"NoSQL" bukan istilah yang didefinisikan dengan baik. Itu konsep yang sangat kabur. Dengan demikian, bahkan tidak mungkin untuk mengatakan apa yang ada dan apa yang bukan produk "NoSQL". Tidak hampir semua produk yang secara khas bermerek dengan label merupakan kunci-nilai toko.
Ya, MarkLogic Server adalah solusi NoSQL (database dokumen yang saya suka menyebutnya) yang bekerja dengan transaksi ACID
Kakek NoSQL: ZODB kompatibel dengan ACID. http://www.zodb.org/
Namun, itu hanya Python.
Sebagai salah satu penggagas NoSQL (saya adalah kontributor awal untuk Apache CouchDB, dan pembicara pada acara NoSQL pertama yang diadakan di CBS Interactive / CNET pada tahun 2009) Saya senang melihat algoritma baru membuat kemungkinan yang tidak ada sebelumnya . Protokol Calvin menawarkan cara baru untuk memikirkan kendala fisik seperti CAP dan PACELC .
Alih-alih replikasi async aktif / pasif, atau replikasi sinkron aktif / aktif, Calvin mempertahankan kebenaran dan ketersediaan selama pemadaman replika dengan menggunakan protokol seperti RAFT untuk memelihara log transaksi. Selain itu, transaksi diproses secara deterministik di setiap replika, menghilangkan potensi kebuntuan, sehingga kesepakatan dicapai hanya dengan satu putaran konsensus. Ini membuatnya cepat bahkan pada penyebaran multi-cloud di seluruh dunia.
FaunaDB adalah satu-satunya implementasi basis data yang menggunakan protokol Calvin, membuatnya secara unik cocok untuk beban kerja yang memerlukan integritas data seperti mainframe dengan skala dan fleksibilitas NoSQL.
Jika Anda mencari toko kunci / nilai yang sesuai dengan ACID, ada Berkeley DB . Di antara basis data grafik setidaknya Neo4j dan HyperGraphDB menawarkan transaksi ACID (HyperGraphDB sebenarnya menggunakan Berkeley DB untuk penyimpanan tingkat rendah saat ini).
Konsep ini didefinisikan oleh kontributor Wikipedia sebagai:
[…] Kelas sistem manajemen basis data relasional modern yang berupaya memberikan kinerja sistem NoSQL scalable yang sama untuk beban transaksi baca-tulis pemrosesan transaksi online (OLTP) sambil tetap mempertahankan jaminan ACID dari sistem basis data tradisional.
[1][2][3]
[1]
Nancy Lynch dan Seth Gilbert, "dugaan Brewer dan kelayakan layanan web yang konsisten, tersedia, dan toleran-partisi" , ACM SIGACT News, Volume 33 Edisi 2 (2002), hal. 51-59.
[2]
"Brewer's CAP Theorem" , julianbrowne.com, Diperoleh 02-Mar-2010
[3]
"Brewers CAP teorema pada sistem terdistribusi" , royans.net
MongoDB mengumumkan bahwa versi 4.0-nya akan sesuai dengan ACID untuk transaksi multi-dokumen.
Versi 4.2. seharusnya mendukungnya di bawah pengaturan sharded.
https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb
FoundationDB disebutkan dan pada saat itu bukan open source. Sudah open source oleh Apple dua hari lalu: https://www.foundationdb.org/blog/foundationdb-is-open-source/
Saya percaya ini sesuai ACID.
Untuk menambah daftar alternatif, sepenuhnya ASAM basis data NoSQL lain compliant adalah GT.M .
Hyperdex Warp http://hyperdex.org/warp/ Warp (fitur ACID) adalah hak milik, tetapi Hyperdex gratis.
db4o
Tidak seperti roll-kegigihan Anda sendiri atau serialisasi, db4o adalah transaksi ACID aman dan memungkinkan untuk perubahan kueri, replikasi dan skema selama runtime
Tarantool adalah basis data ACID NoSQL sepenuhnya. Anda dapat mengeluarkan operasi CRUD atau prosedur tersimpan, semuanya akan berjalan sesuai ketat dengan properti ACID. Anda juga dapat membaca tentang itu di sini: http://stable.tarantool.org/doc/mpage/data-and-persistence.html
MarkLogic juga kompatibel dengan ACID. Saya pikir adalah salah satu pemain terbesar sekarang.
Tunggu sudah berakhir.
ACID NoSQL DB yang sesuai keluar ----------- lihat citrusleaf
BergDB adalah basis data NoSQL yang ringan, sumber terbuka, dan dirancang sejak awal untuk menjalankan transaksi ACID. Sebenarnya, BergDB "lebih" ACID daripada kebanyakan database SQL dalam arti bahwa satu - satunya cara untuk mengubah keadaan database adalah dengan menjalankan transaksi ACID dengan tingkat isolasi tertinggi (istilah SQL: "serializable"). Tidak akan pernah ada masalah dengan pembacaan yang kotor, pembacaan yang tidak dapat diulang, atau pembacaan hantu.
Menurut pendapat saya, database masih sangat berkinerja; tapi jangan percaya padaku, saya membuat perangkat lunak. Cobalah sendiri.
Banyak solusi NoSQL modern tidak mendukung transaksi ACID (pembaruan multi-kunci yang terisolasi secara atom), tetapi kebanyakan dari mereka mendukung primitif yang memungkinkan Anda untuk mengimplementasikan transaksi pada level aplikasi.
Jika penyimpanan data mendukung per liniabilitas utama dan bandingkan-dan-set (atomisitas tingkat dokumen) maka cukup untuk mengimplementasikan transaksi sisi klien, lebih dari itu Anda memiliki beberapa opsi untuk dipilih:
Jika Anda membutuhkan tingkat isolasi Serializable maka Anda dapat mengikuti algoritma yang sama yang digunakan Google untuk sistem Percolator atau Lab Kecoa untuk CockroachDB . Saya telah membuat blog tentang hal itu dan membuat visualisasi langkah demi langkah , saya harap ini akan membantu Anda untuk memahami ide utama di balik algoritma.
Jika Anda mengharapkan pertengkaran tinggi tetapi tidak masalah bagi Anda untuk memiliki tingkat isolasi Baca Komit maka silakan lihat pada transaksi RAMP oleh Peter Bailis.
Pendekatan ketiga adalah menggunakan transaksi kompensasi yang juga dikenal sebagai pola saga. Itu dijelaskan pada akhir 80-an di koran Sagas tetapi menjadi lebih aktual dengan peningkatan sistem terdistribusi. Silakan lihat ceramah Menerapkan Pola Saga untuk inspirasi.
Daftar toko data yang cocok untuk transaksi sisi klien termasuk Cassandra dengan transaksi ringan, Riak dengan bucket konsisten, RethinkDB, ZooKeeper, Etdc, HBase, DynamoDB, MongoDB, dan lainnya.
YugaByte DB mendukung txns terdistribusi ACID Compliant serta kompatibilitas Redis dan CQL API pada lapisan kueri.
VoltDB adalah peserta yang mengklaim kepatuhan ACID, dan meskipun masih menggunakan SQL, tujuannya sama dalam hal skalabilitas
Node levelUP bersifat transaksional dan dibangun di atas leveldb https://github.com/rvagg/node-levelup#batch
DynamoDB adalah database NoSQL dan memiliki transaksi ACID .
Tidak hanya NoSQL tidak sesuai dengan desain ACID. Gerakan NoSQL merangkul BASE (Dasarnya Tersedia, Soft state, Akhirnya konsistensi) diklaim sebagai lawan dari ACID. Basis data NoSQL sering disebut basis data Eventually-Consisted. Untuk memahami perbedaannya, Anda harus menelusuri ke dalam teorema CAP (teorema Brewer's)
Kunjungi http://www.julianbrowne.com/article/viewer/brewers-cap-theorem