MongoDB MMAPv1 vs mesin penyimpanan WiredTiger

25

Di mongoDB3 muncul mesin penyimpanan baru: WiredTiger . Namun, MMAPv1 masih merupakan pilihan default di Mongo .

Satu mungkin tidak lebih baik dari yang lain, itu sering masalah use case dan memilih alat yang tepat untuk pekerjaan itu. Tapi mesin mana yang tepat untuk pekerjaan apa?

Bahkan, sementara MMAPv1 adalah mesin default, WiredTiger tampaknya lebih baik di hampir setiap bidang. Ini memiliki fitur yang sama dengan MMAPv1 plus:

  • kinerja menulis yang lebih baik,
  • konkurensi tingkat dokumen,
  • kompresi,
  • sistem snapshots dan pos pemeriksaan.

Saya menemukan tabel perbandingan di blog MongoDB :

Perbandingan WiredTiger dan MMAPv1

Jadi kecuali jika Anda menggunakan Solaris, adakah alasan untuk tidak memilih WiredTiger?


EDIT

Berikut adalah dua video yang menjelaskan secara rinci bagian dalam WiredTiger dan MMAPv1 .

Buzut
sumber
Semua orang di sini ... Anda dapat mengunjungi blog.clevertap.com/... untuk penjelasan yang sangat baik tentang masalah ini
therealprashant

Jawaban:

26

Secara pribadi, saya lebih suka mesin penyimpanan mmapv1 seperti yang sekarang karena tiga alasan.

Alasan 1: Kedewasaan

Bukannya WiredTiger belum dewasa. Tapi mmapv1 dipahami dengan baik dan pertarungan diuji semua jalan naik dan turun, bolak-balik dan di atas dan di luar. WiredTiger telah mengalami beberapa masalah serius (lihat http://jira.mongodb.com untuk detailnya) baru-baru ini, dan saya tidak mau pelanggan saya menemukan yang berikutnya dengan cara yang sulit.

Alasan 2: Fitur

Mengingat, WT memiliki beberapa ... fitur yang pada dasarnya luar biasa. Masalahnya adalah: Saya belum melihat ada yang mendapat manfaat dari mereka. Kompresi? Either way, Anda mengorbankan agak sulit untuk mencapai kinerja untuk ruang disk yang agak murah. Kurangnya masalah migrasi dokumen untuk memperluas dokumen? Yah, kami masih memiliki batas ukuran 16MB dan kompleksitas tambahan untuk dokumen yang disematkan, terutama ketika penyematan berlebihan.

Ada fitur lain, tetapi secara umum: Saya tidak melihat banyak manfaat dari mereka seperti yang sekarang .

Alasan 3: Total biaya kepemilikan

Untuk proyek-proyek baru, WT mungkin baik-baik saja, terutama sejak 3.2, karena yang berikut ini tidak berlaku.

Melakukan migrasi data mahal. Perlu direncanakan, rencana harus disetujui oleh semua pemangku kepentingan, rencana darurat harus dibuat dan disepakati, migrasi perlu disiapkan, dilaksanakan dan ditinjau. Sekarang gandakan waktu yang dibutuhkan dengan para pemangku kepentingan yang merupakan bagian dari proses ini, dan biaya untuk migrasi data meroket. Pengembalian investasi di sisi lain tampaknya agak kecil. Anda dapat mengukur sedikit daripada melakukan migrasi jika Anda memperhitungkan faktor-faktor tersebut. Untuk memberi Anda kesan: Saya memperkirakan sekitar satu "minggu kerja" per pemangku kepentingan jika migrasi direncanakan, dilaksanakan, dan ditinjau dengan benar. Dengan biaya $ 100 per jam per orang, dan hanya tiga orang yang terlibat (manajer, DBA dan pengembang), itu berjumlah $ 12.000. Perhatikan bahwa ini adalah perkiraan konservatif.

Kesimpulan

Semua faktor di atas telah membawa saya pada kesimpulan untuk tidak menggunakan WT sama sekali. Saat ini.


Memperbarui

Posting ini sudah berumur beberapa bulan sekarang, sehingga layak untuk diperbarui

Pada saat jatuh tempo

Komentar asli saya tentang jatuh tempo sudah usang. WiredTiger belum memiliki masalah besar untuk sementara waktu sekarang dan telah menjadi mesin penyimpanan default pada MongoDB 3.2

Tentang Fitur

Komentar asli saya masih memiliki validitas, imho.

Kompresi

Namun, ketika menjadi terbatas pada anggaran atau, secara umum, kinerja bukanlah perhatian utama, tradeoff kinerja agak kecil, dan Anda pada dasarnya memperdagangkan sedikit dampak kinerja (bila dibandingkan dengan WT yang tidak terkompresi) untuk ruang disk, menggunakan apa yang sebaliknya akan menganggur sekitar: CPU.

Enkripsi

MongoDB 3.2 Enterprise memperkenalkan kemampuan agar penyimpanan WiredTiger dienkripsi. Untuk data dengan kebutuhan keamanan yang ditingkatkan, ini adalah fitur mematikan dan menjadikan WT satu-satunya mesin penyimpanan pilihan, baik secara teknis (MMAPv1 tidak mendukung enkripsi) dan secara konseptual. Menyingkirkan kemungkinan partisi disk terenkripsi, tentu saja, meskipun Anda mungkin tidak memiliki opsi itu di beberapa lingkungan.

Penguncian tingkat dokumen

Saya harus mengakui bahwa saya pada dasarnya menghilangkan fitur WT dalam analisis saya di atas, terutama karena itu tidak berlaku untuk saya atau pelanggan saya ketika saya menulis jawaban asli.

Tergantung pada pengaturan Anda, terutama ketika Anda memiliki banyak klien menulis bersamaan, fitur ini dapat memberikan peningkatan kinerja yang hebat.

Total biaya kepemilikan

Melakukan migrasi masih mahal. Namun, dengan mempertimbangkan perubahan dalam jatuh tempo dan perubahan tampilan pada fitur, migrasi mungkin sepadan dengan investasi jika:

  • Anda perlu enkripsi (Edisi Perusahaan saja!)
  • Kinerja bukan perhatian utama mutlak Anda dan Anda dapat menghemat uang dalam jangka panjang (menghitung secara konservatif) menggunakan kompresi
  • Anda memiliki banyak proses menulis secara bersamaan, karena peningkatan kinerja mungkin menghemat skala vertikal atau horizontal.

Kesimpulan yang Diperbarui

Untuk proyek baru, saya menggunakan WiredTiger sekarang. Karena migrasi dari penyimpanan WiredTiger yang terkompresi ke tidak terkompresi agak mudah, saya cenderung memulai dengan kompresi untuk meningkatkan pemanfaatan CPU ("dapatkan lebih banyak untuk hasil"). Jika kompresi memiliki dampak nyata pada kinerja atau UX, saya bermigrasi ke WiredTiger yang tidak terkompresi.

Untuk proyek dengan banyak penulis bersamaan, jawaban untuk bermigrasi atau tidak hampir selalu "Ya", kecuali - kecuali anggaran proyek melarang investasi. Dalam jangka panjang, peningkatan kinerja harus membayar sendiri, jika penempatan itu direncanakan secara wajar. Namun, Anda perlu menambahkan beberapa waktu pengembangan ke perhitungan, karena dalam beberapa kasus driver perlu diperbarui, dan mungkin ada masalah yang perlu ditangani.

Untuk proyek-proyek yang ketat anggarannya dan tidak mampu menyediakan lebih banyak ruang disk untuk saat ini, bermigrasi ke WiredTiger yang terkompresi dapat menjadi pilihan, tetapi kompresi menempatkan sedikit beban pada CPU, sesuatu yang tidak pernah terjadi dengan MMAPv1. Selain itu, biaya migrasi mungkin sangat mahal untuk proyek semacam itu.

Markus W Mahlberg
sumber
Markus terima kasih atas jawaban Anda. Saya mengerti argumen Anda. Apakah Anda akan menyarankan untuk kembali ke MMAPv1 untuk proyek-proyek baru? Maksud saya, jika kinerja menjadi masalah, kompresi juga dapat dinonaktifkan secara total. Ruang disk murah, tetapi kompresi mungkin membantu pengaturan yang pas di RAM ... dan karenanya mendapatkan kinerja yang baik. Atau saya salah?
Buzut
1
Sejauh yang saya tahu, kompresi hanya diterapkan pada file data. Mengenai proyek-proyek baru, izinkan saya menjelaskannya: Saya akan meminta keputusan manajemen, menampilkan pro dan kontra. Saya pribadi menggunakan WT di salah satu proyek saya dan belum mengalami masalah, tetapi mungkin ada faktor-faktor lain seperti SLA (yang saya dapat hitung cukup baik berdasarkan pengalaman dengan mmapv1), anggaran yang ketat (yang membutuhkan WT yang dikompresi untuk menghemat ruang disk) dan banyak faktor lainnya. Menimbang risiko dan peluang bukanlah keputusan DBA. DBA harus memberikan informasi yang diperlukan untuk melakukan panggilan.
Markus W Mahlberg
1
Artikel ini tampaknya menunjukkan bahwa cara indeks disimpan adalah manfaat yang sangat besar karena dapat mengurangi ruang indeks Anda hingga 10 kali lipat: ilearnasigoalong.blogspot.com/2015/03/… . Ruang disk murah, tetapi ram tidak.
BT
Saya agak bingung tentang poin Anda tentang Fitur, apakah Anda mengatakan ada fitur MMAPv1 yang tidak dimiliki WiredTiger? Akan lebih baik jika bagian itu sedikit lebih jelas.
BT
@ Bt Tidak sama sekali. Apa yang saya coba katakan adalah bahwa WT memiliki beberapa fitur keren yang untuk beberapa kasus penggunaan mungkin membantu, tetapi tidak secara umum. Saya lebih suka mesin penyimpanan yang telah teruji pertempuran daripada yang terdepan dalam hal penyimpanan data. Sesuai artikel: Ya, dimungkinkan dengan kompresi awalan untuk menghemat RAM, dan ini mungkin ide yang bagus jika tidak ada masalah lain. Bayangkan Anda bisa dianggap andal untuk kehilangan data atau masalah kinerja.
Markus W Mahlberg
5

Dua sen saya:

Menulis jurnal di WiredTiger dapat kehilangan pembaruan dalam shutdowns keras karena menggunakan buffering di-memori untuk menyimpan catatan jurnal.

Di sela-sela operasi penulisan, sementara catatan jurnal tetap berada di buffer WiredTiger, pembaruan dapat hilang setelah penutupan mongod yang sulit.

Penjurnalan di MMAPv1 menulis perubahan dalam file jurnal on-disk.

Jika instance mongod mogok tanpa menerapkan penulisan ke file data, jurnal dapat memutar ulang penulisan ke tampilan bersama untuk akhirnya menulis ke file data.

gabrielgiussi
sumber
4

Kami beralih ke WiredTiger dari MMAPv1 dengan iming-iming kenaikan kinerja 7x hingga 10x. Kami harus kembali ke MMAPv1 karena MongoDB akan mengunci ketika cache WiredTiger mencapai 100%. Kami telah mendokumentasikan pengalaman kami di sini - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/

Anand
sumber
2
Langgan yang bagus. Agak mengingatkan saya pada Uber pergi dari MySQL ke PostgreSQL pada 2013 dan kemudian kembali ke MySQL pada Juni 2016.
RolandoMySQLDBA
juga menjelaskan kami juga memiliki pengalaman yang sama dengan harimau kabel sehingga revreted untuk MMAPV1
Viren