MongoDB 3.0 dengan WiredTiger memperkenalkan fitur baru yang disebut 'Kompresi Awalan Indeks' yang sangat mengurangi memori yang dikonsumsi oleh indeks. Lebih sedikit memori yang digunakan oleh indeks berarti lebih banyak memori untuk penyimpanan dokumen atau indeks lain yang menyiratkan kinerja yang lebih baik.
Untuk kinerja terbaik di MongoDB, sebaiknya simpan indeks Anda di memori. Kehilangan halaman pada indeks adalah pukulan ganda – kesalahan satu halaman untuk membawa halaman indeks yang sebenarnya ke dalam memori dan kesalahan halaman lainnya nanti untuk membawa halaman data ke dalam memori.
Teknologi
Kompresi awalan indeks tidak menggunakan kompresi blok (seperti zlib, snappy dll) tetapi merupakan teknik yang berbeda untuk menyimpan indeks dalam memori. Ini mengurangi penggunaan memori dengan menyimpan awalan identik hanya sekali. “Kompresi awalan kunci” adalah cara khusus domain untuk mengompresi data dan mengacu pada format penyimpanan kunci di WiredTiger. Untuk detail selengkapnya, Anda dapat merujuk ke dokumentasi format file WiredTiger.
Uji Kinerja
Untuk pengujian kinerja kami, kami menggunakan struktur dokumen seperti yang dijelaskan di bawah ini:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Kami menambahkan indeks berikut pada pengaturan ini:
Index 1: db.ensureIndex({'employeeID':1}); Index 2: db.ensureIndex({'lastName':1, 'firstName':1}); Index 3: db.ensureIndex({'income':1}); Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})
Hasil
Dalam pengujian kami, kami memasukkan data yang identik (sekitar 10 juta catatan) ke dalam dua kelompok – satu set replika 2.6.x dan yang lainnya adalah MongoDB 3.0 dengan WiredTiger. Kemudian kami menambahkan indeks di atas pada kedua konfigurasi cluster. Hasilnya cukup mengejutkan – dalam beberapa kasus ada perbedaan urutan besarnya dalam ukuran indeks!
Nama indeks | Ukuran indeks MMAP (MB) | Ukuran Indeks WT (MB) | % Pengurangan ukuran |
{employeeID:1} | 230,7 | 94 | 59% |
{lastName:1, firstName:1} | 1530 | 36 | 97% |
{penghasilan:1} | 230 | 94 | 59% |
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} | 1530 | 35 | 97% |
Semua memori yang disimpan pada indeks adalah memori yang dapat digunakan untuk menyimpan data, indeks lain, dll. Jarak tempuh Anda mungkin berbeda – pastikan untuk menguji struktur indeks khusus Anda. Pengurangan ukuran indeks adalah peningkatan yang kurang dihargai di Mongo 3.0 dan dapat membuat perbedaan besar pada performa Anda!