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

Gambaran Umum Pengindeksan Basis Data untuk MongoDB

Apa itu Pengindeksan?

Pengindeksan adalah konsep penting dalam dunia database. Keuntungan utama dari membuat indeks pada bidang apapun adalah akses data yang lebih cepat. Ini mengoptimalkan proses pencarian dan pengaksesan database. Pertimbangkan contoh ini untuk memahaminya.

Ketika ada pengguna yang meminta baris tertentu dari database, apa yang akan dilakukan sistem DB? Ini akan mulai dari baris pertama dan memeriksa apakah ini baris yang diinginkan pengguna? Jika ya, kembalikan baris itu, jika tidak, lanjutkan mencari baris sampai akhir.

Umumnya, saat Anda menentukan indeks pada bidang tertentu, sistem DB akan membuat daftar berurutan dari nilai bidang itu dan menyimpannya di tabel yang berbeda. Setiap entri tabel ini akan menunjuk ke nilai yang sesuai di tabel asli. Jadi ketika pengguna mencoba mencari baris apa pun, pertama-tama ia akan mencari nilai dalam tabel indeks menggunakan algoritma pencarian biner dan mengembalikan nilai yang sesuai dari tabel asli. Proses ini akan memakan waktu lebih sedikit karena kami menggunakan pencarian biner daripada pencarian linier.

Dalam artikel ini, kita akan fokus pada Pengindeksan MongoDB dan memahami cara membuat dan menggunakan indeks di MongoDB.

Bagaimana Cara Membuat Indeks di Koleksi MongoDB?

Untuk membuat indeks menggunakan shell Mongo, Anda dapat menggunakan sintaks ini:

db.collection.createIndex( <key and index type specification>, <options> )

Contoh:

Untuk membuat indeks pada bidang nama di koleksi myColl:

db.myColl.createIndex( { name: -1 } )

Jenis Indeks MongoDB

  1. Indeks _id default

    Ini adalah indeks default yang akan dibuat oleh MongoDB saat Anda membuat koleksi baru. Jika Anda tidak menentukan nilai apa pun untuk bidang ini, maka _id akan menjadi kunci utama secara default untuk koleksi Anda sehingga pengguna tidak dapat menyisipkan dua dokumen dengan nilai bidang _id yang sama. Anda tidak dapat menghapus indeks ini dari bidang _id.

  2. Indeks Bidang Tunggal

    Anda dapat menggunakan jenis indeks ini ketika Anda ingin membuat indeks baru di bidang apa pun selain bidang _id.

    Contoh:

    db.myColl.createIndex( { name: 1 } )

    Ini akan membuat indeks menaik kunci tunggal pada bidang nama di koleksi myColl

  3. Indeks Gabungan

    Anda juga dapat membuat indeks di beberapa bidang menggunakan indeks Gabungan. Untuk indeks ini, urutan bidang di mana mereka didefinisikan dalam indeks penting. Perhatikan contoh ini:

    db.myColl.createIndex({ name: 1, score: -1 })

    Indeks ini pertama-tama akan mengurutkan koleksi berdasarkan nama dalam urutan menaik dan kemudian untuk setiap nilai nama, itu akan mengurutkan berdasarkan nilai skor dalam urutan menurun.

  4. Indeks Multikey

    Indeks ini dapat digunakan untuk mengindeks data array. Jika ada bidang dalam koleksi yang memiliki larik sebagai nilainya, maka Anda dapat menggunakan indeks ini yang akan membuat entri indeks terpisah untuk setiap elemen dalam larik. Jika bidang yang diindeks adalah array, maka MongoDB akan secara otomatis membuat indeks Multikey di atasnya.

    Perhatikan contoh ini:

    {
    ‘userid’: 1,
    ‘name’: ‘mongo’,
    ‘addr’: [
        {zip: 12345, ...},
    {zip: 34567, ...}
    ]
    }

    Anda dapat membuat indeks Multikey pada bidang addr dengan mengeluarkan perintah ini di shell Mongo.

    db.myColl.createIndex({ addr.zip: 1 })
  5. Indeks Geospasial

    Misalkan Anda telah menyimpan beberapa koordinat dalam koleksi MongoDB. Untuk membuat indeks pada bidang jenis ini (yang memiliki data geospasial), Anda dapat menggunakan indeks Geospasial. MongoDB mendukung dua jenis indeks geospasial.

    • Indeks 2d:Anda dapat menggunakan indeks ini untuk data yang disimpan sebagai titik pada bidang 2D.

      db.collection.createIndex( { <location field> : "2d" } )
    • Indeks 2dsphere:Gunakan indeks ini ketika data Anda disimpan sebagai format GeoJson atau pasangan koordinat (bujur, lintang)

    db.collection.createIndex( { <location field> : "2dsphere" } )
  6. Indeks Teks

    Untuk mendukung kueri yang mencakup pencarian beberapa teks dalam koleksi, Anda dapat menggunakan indeks Teks.

    Contoh:

    db.myColl.createIndex( { address: "text" } )
  7. Indeks Berciri

    MongoDB mendukung sharding berbasis hash. Indeks hash menghitung hash dari nilai bidang yang diindeks. Indeks hash mendukung sharding menggunakan kunci sharded hash. Sharding yang di-hash menggunakan indeks ini sebagai kunci pecahan untuk mempartisi data di seluruh cluster Anda.

    Contoh:

    db.myColl.createIndex( { _id: "hashed" } )
Properti Indeks
  1. Indeks Unik

    Properti ini memastikan bahwa tidak ada nilai duplikat di bidang yang diindeks. Jika ada duplikat yang ditemukan saat membuat indeks, maka entri tersebut akan dibuang.

  2. Indeks Jarang

    Properti ini memastikan bahwa semua kueri mencari dokumen dengan bidang yang diindeks. Jika ada dokumen yang tidak memiliki bidang yang diindeks, maka itu akan dibuang dari kumpulan hasil.

  3. Indeks TTL

    Indeks ini digunakan untuk menghapus dokumen secara otomatis dari koleksi setelah interval waktu tertentu (TTL) . Ini ideal untuk menghapus dokumen log peristiwa atau sesi pengguna.

Analisis Kinerja

Pertimbangkan kumpulan nilai siswa. Ini memiliki persis 3000000 dokumen di dalamnya. Kami belum membuat indeks apa pun dalam koleksi ini. Lihat gambar di bawah ini untuk memahami skemanya.

Contoh dokumen dalam koleksi skor

Sekarang, pertimbangkan kueri ini tanpa indeks apa pun:

db.scores.find({ student: 585534 }).explain("executionStats")

Kueri ini membutuhkan waktu 1155 md untuk dieksekusi. Berikut adalah outputnya. Cari bidang executionTimeMillis untuk hasilnya.

Waktu eksekusi tanpa pengindeksan

Sekarang mari kita buat indeks pada bidang siswa. Untuk membuat indeks, jalankan kueri ini.

db.scores.createIndex({ student: 1 })

Sekarang kueri yang sama membutuhkan waktu 0 md.

Waktu eksekusi dengan pengindeksan

Anda dapat dengan jelas melihat perbedaan waktu eksekusi. Ini hampir seketika. Itulah kekuatan pengindeksan.

Kesimpulan

Satu takeaway yang jelas adalah:Buat indeks. Berdasarkan kueri Anda, Anda dapat menentukan berbagai jenis indeks pada koleksi Anda. Jika Anda tidak membuat indeks, maka setiap kueri akan memindai koleksi lengkap yang membutuhkan banyak waktu membuat aplikasi Anda sangat lambat dan menggunakan banyak sumber daya dari server Anda. Di sisi lain, jangan membuat terlalu banyak indeks karena membuat indeks yang tidak perlu akan menyebabkan overhead waktu ekstra untuk semua penyisipan, penghapusan, dan pembaruan. Ketika Anda melakukan salah satu dari operasi ini pada bidang yang diindeks, maka Anda juga harus melakukan operasi yang sama pada pohon indeks yang membutuhkan waktu. Indeks disimpan dalam RAM sehingga membuat indeks yang tidak relevan dapat menghabiskan ruang RAM Anda, dan memperlambat server Anda.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara memfilter array dalam subdocument dengan MongoDB

  2. Cara memperbarui subdokumen di mongodb

  3. NodeJS dan MongoDB FindAndModify() perlu dihapus atau diperbarui

  4. 2 Cara Membatasi Dokumen yang Dikembalikan di MongoDB

  5. Bagaimana cara memvalidasi anggota bidang array?