Pembaruan basis data hadir dengan fitur yang ditingkatkan untuk kinerja, keamanan, dan dengan fitur terintegrasi baru. Selalu disarankan untuk menguji versi baru sebelum menerapkannya ke dalam produksi, hanya untuk memastikan bahwa itu sesuai dengan kebutuhan Anda dan tidak ada kemungkinan crash.
Mengingat banyak produk, yang mendahului versi minor pertama dari versi mayor baru memiliki perbaikan yang paling penting. Misalnya saya lebih suka memiliki MongoDB versi 4.2.1 dalam produksi beberapa hari setelah rilis daripada yang saya lakukan untuk versi 4.2.0.
Dalam blog ini kita akan membahas apa saja yang telah disertakan dan peningkatan apa yang telah dilakukan pada MongoDB versi 4.2
Yang Baru di MongoDB 4.2
- Transaksi terdistribusi
- Indeks karakter pengganti
- Baca dan tulis yang dapat dicoba lagi
- Enkripsi tingkat Bidang Sisi Klien Otomatis.
- Bahasa kueri yang disempurnakan untuk pembaruan ekspresif
- Tampilan terwujud sesuai permintaan
- Operasi pemeliharaan modern
Transaksi Terdistribusi
Transaksi adalah fitur database penting yang memastikan konsistensi dan integritas data, terutama yang menjamin prosedur ACID. MongoDB versi 4.2 sekarang mendukung transaksi multi-dokumen pada set replika dan cluster yang di-sharding melalui pendekatan transaksi terdistribusi. Sintaks yang sama untuk menggunakan transaksi telah dipertahankan seperti versi 4.0 sebelumnya.
Namun, spesifikasi driver klien telah sedikit berubah sehingga jika seseorang ingin menggunakan transaksi di MongoDB 4.2, Anda harus mengupgrade driver ke versi yang kompatibel dengan server 4.2.
Versi ini tidak membatasi ukuran transaksi dalam hal penggunaan memori tetapi hanya bergantung pada ukuran perangkat keras Anda dan kemampuan penanganan perangkat keras.
Penugasan ulang lokal cluster global sekarang dimungkinkan dengan versi 4.2. Artinya, untuk implementasi sharding zona geografis, jika pengguna yang berada di wilayah A pindah ke wilayah B, dengan mengubah nilai bidang lokasi mereka, data dapat dipindahkan secara otomatis dari wilayah A ke B melalui transaksi.
Sistem sharding sekarang memungkinkan seseorang untuk mengubah kunci shard yang bertentangan dengan versi sebelumnya. Secara harfiah, ketika kunci pecahan diubah, itu sama dengan memindahkan dokumen ke pecahan lain. Dalam versi ini, MongoDB membungkus pembaruan ini dan jika dokumen perlu dipindahkan dari satu pecahan ke pecahan lainnya, pembaruan akan dijalankan di dalam transaksi secara latar belakang.
Menggunakan transaksi bukanlah pendekatan yang disarankan karena menurunkan kinerja basis data terutama jika terjadi beberapa kali. Selama periode transaksi, ada rentang waktu operasi yang dapat menyebabkan konflik saat melakukan penulisan ke dokumen yang terpengaruh. Sebanyak transaksi dapat dicoba ulang, mungkin ada pembaruan yang dibuat pada dokumen sebelum percobaan ulang ini, dan setiap kali percobaan ulang terjadi, itu mungkin berurusan dengan versi dokumen lama daripada versi dokumen terbaru. Percobaan ulang jelas menghabiskan lebih banyak biaya pemrosesan selain meningkatkan waktu henti aplikasi melalui peningkatan latensi.
Praktik yang baik dalam menggunakan transaksi meliputi:
- Hindari penggunaan kueri yang tidak diindeks di dalam transaksi sebagai cara untuk memastikan Operasi tidak akan lambat.
- Transaksi Anda harus melibatkan beberapa dokumen.
Dengan format skema dinamis MongoDB dan fitur penyematan, Anda dapat memilih untuk menempatkan semua bidang dalam koleksi yang sama untuk menghindari kebutuhan menggunakan transaksi sebagai ukuran pertama.
Indeks Wildcard
Indeks wildcard diperkenalkan di MongoDB versi 4.2 untuk meningkatkan kueri terhadap bidang arbitrer atau bidang yang namanya tidak diketahui sebelumnya, dengan mengindeks seluruh dokumen atau subdokumen. Indeks tersebut tidak dimaksudkan untuk menggantikan indeks berbasis beban kerja tetapi sesuai bekerja dengan data yang melibatkan pola polimorfik. Pola polimorfik adalah di mana semua dokumen dalam koleksi serupa tetapi tidak memiliki struktur yang identik. Pola data polimorfik dapat dihasilkan dari aplikasi yang melibatkan, katalog produk atau data sosial. Di bawah ini adalah contoh kumpulan data Polymorphic
{
Sport: ‘Chess’,
playerName: ‘John Mah’,
Career_earning: {amount: NumberDecimal(“3000”), currency: “EUR”},
gamesPlayed:25,
career_titles:10
},
{
Sport: Tennis,
playerName: ‘Semenya Jones,
Career_earning: {amount: NumberDecimal(“34545”), currency: “USD”},
Event: {
name:”Olympics”,
career_titles:10,
career_tournaments:14
}
Dengan mengindeks seluruh dokumen menggunakan indeks Wildcard, Anda dapat membuat kueri menggunakan bidang sembarang sebagai indeks.
Untuk membuat indeks Wildcard
$db.collection.createIndex({“fieldA.$**”: 1})
Jika bidang yang dipilih adalah dokumen atau larik bersarang, indeks Wildcard muncul kembali ke dalam dokumen dan menyimpan nilai untuk semua bidang dalam dokumen atau larik.
Baca dan Tulis yang Dapat Dicoba lagi
Biasanya database mungkin sering mengalami pemadaman sementara jaringan yang dapat mengakibatkan kueri tidak dijalankan sebagian atau seluruhnya. Kesalahan jaringan ini mungkin tidak terlalu serius sehingga menawarkan kesempatan untuk mencoba lagi kueri ini setelah terhubung kembali. Dimulai dengan MongoDB 4.2, konfigurasi coba lagi diaktifkan secara default. Driver MongoDB dapat mencoba lagi membaca dan menulis yang gagal untuk transaksi tertentu setiap kali mereka menemukan kesalahan jaringan kecil atau lebih tepatnya ketika mereka tidak dapat menemukan beberapa primer yang sehat di sharded cluster/replika set. Namun, jika Anda tidak ingin penulisan yang dapat dicoba lagi, Anda dapat menonaktifkannya secara eksplisit di konfigurasi Anda, tetapi saya tidak menemukan alasan kuat mengapa seseorang harus menonaktifkannya.
Fitur ini untuk memastikan bahwa dalam hal apapun infrastruktur MongoDB berubah, kode aplikasi tidak akan terpengaruh. Mengenai contoh yang dijelaskan oleh Eliot Horowitz, Co-founder MongoDB, untuk halaman web yang melakukan 20 operasi basis data berbeda, alih-alih memuat ulang semuanya atau harus membungkus seluruh halaman web dalam semacam loop, driver di bawah selimut hanya dapat memutuskan untuk mencoba kembali operasi. Setiap kali penulisan gagal, itu akan mencoba lagi secara otomatis dan akan memiliki kontrak dengan server untuk menjamin bahwa setiap penulisan hanya terjadi sekali.
Penulisan yang dapat dicoba ulang hanya membuat satu upaya coba lagi yang membantu mengatasi pemilihan kumpulan replika dan kesalahan jaringan sementara, tetapi tidak untuk kesalahan jaringan yang terus-menerus.
Penulisan yang dapat dicoba lagi tidak menangani kejadian di mana periode failover melebihi nilai serverSelectionTimoutMs dalam konfigurasi parameter.
Dengan versi MongoDB ini, seseorang dapat memperbarui nilai kunci shard dokumen (kecuali jika shardkey adalah bidang _id yang tidak dapat diubah) dengan mengeluarkan operasi findAndModify/update dokumen tunggal baik dalam transaksi atau sebagai penulisan yang dapat dicoba lagi .
MongoDB versi 4.2 sekarang dapat mencoba kembali operasi upsert dokumen tunggal (yaitu upsert:true dan multi:false) yang mungkin gagal karena kesalahan kunci duplikat jika operasi memenuhi kondisi kunci berikut:
- Pengumpulan target berisi indeks unik yang membuat kesalahan kunci duplikat.
- Operasi pembaruan tidak akan mengubah bidang apa pun dalam predikat kueri.
- Kondisi kecocokan pembaruan adalah predikat kesetaraan tunggal {field:“value”} atau logika AND dari predikat kesetaraan {filed:“value”, field0:“value0”}
- Kumpulan bidang dalam pola kunci indeks unik cocok dengan kumpulan bidang dalam predikat kueri pembaruan.
Enkripsi Tingkat Bidang Sisi Klien Otomatis
MongoDB versi 4.2 dilengkapi dengan enkripsi Tingkat Bidang Sisi Klien Otomatis (CSFLE), sebuah fitur yang memungkinkan pengembang untuk secara selektif mengenkripsi setiap bidang dokumen di sisi klien sebelum dikirim ke server. Dengan demikian, data terenkripsi dirahasiakan dari penyedia yang menghosting database dan setiap pengguna yang mungkin memiliki akses langsung ke database.
Hanya aplikasi dengan akses ke kunci enkripsi yang benar yang dapat mendekripsi dan membaca data yang dilindungi. Jika kunci enkripsi dihapus, semua data yang dienkripsi akan menjadi tidak dapat dibaca.
Catatan:fitur ini hanya tersedia dengan MongoDB enterprise saja.
Bahasa kueri yang disempurnakan untuk pembaruan ekspresif
MongoDB versi 4.2 menyediakan bahasa kueri yang lebih kaya daripada pendahulunya. Sekarang mendukung agregasi dan operasi kasus penggunaan modern di sepanjang garis pencarian berbasis geografis, pencarian grafik dan pencarian teks. Ini telah mengintegrasikan mesin pencari pihak ketiga yang membuat pencarian lebih cepat mengingat mesin pencari berjalan pada proses/server yang berbeda. Ini umumnya meningkatkan kinerja basis data yang bertentangan dengan jika semua pencarian dilakukan ke proses mongod yang lebih suka membuat latensi operasi basis data tidak stabil setiap kali mesin pencari mengindeks ulang.
Dengan versi ini, Anda sekarang dapat menangani array, melakukan penjumlahan, dan operasi matematika lainnya secara langsung melalui pernyataan pembaruan.
Tampilan Terwujud Sesuai Permintaan
Kerangka kerja pipa agregasi data di MongoDB adalah fitur hebat dengan berbagai tahapan mengubah dokumen ke keadaan yang diinginkan. MongoDB versi 4.2 memperkenalkan tahap baru $merge yang bagi saya saya akan mengatakan itu menghemat waktu saya bekerja dengan hasil akhir yang perlu disimpan dalam koleksi. Awalnya, tahap $out memungkinkan pembuatan koleksi baru berdasarkan agregasi dan mengisi koleksi dengan hasil yang diperoleh. Jika koleksi sudah ada, itu akan menimpa koleksi dengan hasil baru yang bertentangan dengan tahap $merge yang hanya menggabungkan hasil pipa ke output yang ada daripada mengganti koleksi sepenuhnya. Membuat ulang seluruh koleksi setiap kali dengan tahap $out menghabiskan banyak CPU dan IO yang dapat menurunkan kinerja database. Oleh karena itu, konten keluaran akan diperbarui tepat waktu sehingga memungkinkan pengguna untuk membuat tampilan sesuai permintaan
Operasi Pemeliharaan Modern
Pengembang sekarang dapat memiliki pengalaman operasional yang luar biasa dengan MongoDB versi 4.2 dengan fitur terintegrasi yang meningkatkan ketersediaan tinggi, strategi pencadangan terkelola cloud, meningkatkan daya pemantauan dan sistem peringatan. MongoDB Atlas dan MongoDB Ops Manager adalah platform yang menyediakan fitur-fitur ini. Yang terakhir telah diberi label sebagai yang terbaik untuk menjalankan MongoDB di perusahaan. Ini juga telah terintegrasi dengan operator Kubernetes untuk pengguna lokal yang pindah ke private cloud. Antarmuka ini memungkinkan seseorang untuk mengontrol Manajer Operasi secara langsung.
Ada beberapa perubahan internal yang dilakukan pada MongoDB versi 4.2 yang meliputi:
- Mencantumkan kursor terbuka.
- Penghapusan mesin penyimpanan MMAPv1.
- Peningkatan pada perbaikan file data WiredTiger.
- Bidang diagnostik sekarang dapat memiliki queryHash
- Pemisahan otomatis thread untuk node mongos telah dihapus.
Kesimpulan
MongoDB versi 4.2 hadir dengan beberapa peningkatan di sepanjang baris keamanan dan kinerja database. Ini telah menyertakan Enkripsi Tingkat Bidang Sisi Klien Otomatis yang memastikan data dilindungi dari sudut klien. Lebih banyak fitur seperti mesin telusur pihak ketiga dan penyertaan tahap $merge dalam kerangka kerja agregasi memberikan beberapa peningkatan dalam kinerja basis data. Sebelum memasukkan versi ini ke dalam produksi, harap pastikan bahwa semua kebutuhan Anda terpenuhi sepenuhnya.