Selain indeks skalar (naik, turun), MongoDB juga mendukung indeks 'hash'. Saat Anda menggunakan indeks hash pada bidang, MongoDB menghitung hash dari nilai bidang dan menyimpan hash dalam indeks. Indeks hash hanya mendukung perbandingan kesetaraan dan tidak mendukung kueri rentang, dan biasanya digunakan dalam skenario sharding.
Membuat Indeks Hash MongoDB
Anda dapat menggunakan sintaks berikut untuk membuat indeks hash:
db.collection.ensureIndex({'field':'hashed'});
Anda dapat membuat indeks skalar dan indeks hash pada bidang yang sama.
Sharding MongoDB
Biasanya, sharding MongoDB diimplementasikan menggunakan partisi 'berbasis rentang'. Dalam pendekatan ini, setiap pecahan diberi rentang nilai kunci pecahan. Jika shard key meningkat secara monoton seperti stempel waktu atau objectID, hal ini terkadang dapat menghasilkan shard yang 'panas' karena nilai terbaru selalu berakhir dirutekan ke shard yang sama.
Cara untuk menyiasatinya adalah dengan menggunakan 'partisi berbasis hash'. Sebuah hash dari kunci shard dihitung dan nilai hash ini digunakan untuk merutekan ke shard, bukan nilai sebenarnya. Ini membantu mendistribusikan beban secara merata di semua shard daripada mengirim semua data terbaru ke shard yang sama. Partisi berbasis hash diimplementasikan menggunakan indeks hash pada kunci shard Anda. Untuk informasi lebih lanjut, lihat dokumentasi sharding.
Pro &Kontra Indeks Hash
-
Pro
Indeks hash cenderung lebih kecil daripada indeks skalar karena hanya hash kunci yang disimpan, bukan kunci lengkap. Misalnya. Dalam pengujian sederhana dengan 100k dokumen, kami menambahkan indeks hash dan skalar pada bidang string – 'fieldName'. Seperti yang ditunjukkan di bawah ini, indeks hash cenderung jauh lebih kecil daripada indeks skalar:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
Kontra
Tidak mendukung kueri rentang. Jika Anda menjalankan kueri rentang pada indeks hash, ini akan menghasilkan pemindaian indeks.
Batasan Indeks Berciri
- Indeks yang di-hash tidak mendukung array.
- Indeks yang di-hash tidak boleh berupa indeks gabungan.
- Anda tidak dapat menambahkan batasan unik pada indeks hash.