MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mengapa MongoDB tidak menggunakan fsync()?

Alasannya adalah kinerja. Tanpa harus menulis ke disk pada setiap perubahan, MongoDB dapat menangani pembaruan lebih cepat.

MongoDB memberi tahu Anda saat pembaruan dikirim ke server, bukan saat pembaruan ditulis , seperti yang dapat Anda baca di dokumentasi di Memverifikasi Propagasi dari Menulis dengan getLastError :

Ini bertentangan dengan ACID , lebih khusus melawan D, yang merupakan singkatan dari durability :

Sifat ACID sebagian besar berlaku untuk sistem RDBMS tradisional. Sistem NoSQL, yang mencakup MongoDB, menyerah pada satu atau lebih properti ACID untuk mencapai skalabilitas yang lebih baik. Dalam kasus MongoDB daya tahan telah dikorbankan untuk kinerja yang lebih baik saat menangani pembaruan dalam jumlah besar.

MongoDB dan ACID

Sebagian besar properti ACID dijamin pada tingkat transaksi . Transaksi biasanya merupakan sekelompok kueri yang harus diperlakukan sebagai satu unit. MongoDB tidak memiliki konsep transaksi, sekali lagi karena alasan kinerja . Oleh karena itu, sebagian besar properti ACID tidak berlaku untuk MongoDB.

A — Atomicity menyatakan bahwa suatu transaksi harus berhasil atau gagal. Tidak diperbolehkan untuk berhasil sebagian; jika sebagian transaksi gagal, seluruh transaksi harus dibatalkan. MongoDB mendukung operasi atom pada tingkat dokumen, tetapi tidak pada tingkat 'transaksi'.

C — Konsistensi sebagian mengacu pada atomisitas, tetapi juga mencakup integritas referensial . Database relasional bertanggung jawab untuk memastikan bahwa semua referensi kunci asing valid. MongoDB tidak memiliki konsep kunci asing, jadi properti ACID ini tidak berlaku.

Saya — Isolasi menyatakan bahwa dua transaksi bersamaan tidak diizinkan untuk saling mengganggu; jika dua transaksi mencoba mengubah data yang sama, transaksi kedua harus menunggu hingga transaksi pertama selesai. Untuk mencapai ini, database akan mengunci data. MongoDB tidak memiliki konsep penguncian, sehingga tidak mendukung isolasi untuk banyak operasi. Operasi tunggal diisolasi.

D — Daya tahan dijelaskan di atas. MongoDB belum mendukung daya tahan yang sebenarnya (belum), dalam hal daya tahan ACID-ic.

Sekarang, Anda mungkin berpikir bahwa MongoDB tidak berguna dibandingkan dengan sistem RDBMS karena tidak memiliki transaksi dan sebagian besar jaminan ACID. Namun, sebagian alasan mengapa transaksi ada adalah karena basis data relasional perlu memperlakukan data tertentu sebagai entitas tunggal , tetapi data ini telah dinormalisasi menjadi beberapa tabel .

MongoDB memungkinkan Anda untuk menyimpan data Anda sebagai satu entitas . Ini menghilangkan kebutuhan akan kunci asing dan integritas referensial dalam banyak kasus. Anda juga tidak memerlukan transaksi multi-kueri, karena Anda tidak memerlukan banyak tabel untuk memperbarui satu entitas. Sering kali Anda hanya perlu memperbarui satu dokumen, dan operasi ini bersifat atomik di MongoDB.

Menurut komentar pertama di halaman ini , db.eval() menyediakan isolasi untuk beberapa operasi. Namun, menurut dokumentasi Anda biasanya ingin menghindari penggunaan db.eval() .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Merancang hubungan Banyak-ke-Banyak di MongoDB (bukan tabel relasional)

  2. Basis data NoSQL mana yang harus saya gunakan untuk masuk?

  3. Soket tukang pos menutup telepon tidak dapat terhubung ke Mongodb

  4. Tidak dapat mengautentikasi pengguna di MongoDB 3.0.2 menggunakan koneksi java

  5. Urutan acara webhook stripe