MongoDB Index vs MySQL Index
Memahami Agregasi pada MongoDB
Konsep Agregasi Pada MongoDB
Merupakan sebuah operasi untuk memproses data dan mengembalikan hasil yang telah dilakukan komputasi.

Agregasi Dasar
- $addFields - Menambahkan fields baru ke dokumen yang sudah ada.
- $replaceRoot - Me-replace seluruh field yang sudah ada ke input document.
- $geoNear - Mencari data geopoint terdekat dari titik yang diinginkan dari data geopoint yang tersedia
- $sample - Mengambil data acak sebanyak N sesuai yang diinginkan dari sebuah dokumen.
Core Aggregation
- $group - Melakukan pengelompokan data input berdasarkan _id yang diinginkan
- $unwind - Mendekonstruksi data field array dari sebuah dokumen.
- $bucketAuto - Melakukan kategorisasi dokumen kedalam sebuah group yang bernama buckets berdasarkan dengan kondisi yang diinginkan
- $sortByCount - Melakukan pengelompokan berdasarkan nilai dari kondisi tertentu, kemudian dilakukan penghitungan jumlah dari tiap group.
Performa Agregasi dan Optimalisasi Pipeline
1. Performa agregasi yang dilakukan dapat dilihat dengan menambahkan parameter berikut:
db.customers.aggregate([
...
db.customers.aggregate([
...
], { explain: true })
2. Performa agregasi perlu optimal karena terdapat limitasi saat eksekusi agregasi dan pipeline.
Batasan Memory
2. Performa agregasi perlu optimal karena terdapat limitasi saat eksekusi agregasi dan pipeline.
Batasan Memory
- Batas ukuran untuk output setiap agregasi adalah 16MB.
- Menggunakan $limit dan $project untuk membatasi jumlah output dokumen dan field yang ditampilkan.
- Batas 100MB RAM untuk setiap stage pada agregasi.
- Menggunakan index untuk mengurangi penggunaan memory.
- Menambahkan parameter allowDiskUse seperti contoh berikut:
- db.<collection>.aggregate([ ... ], { allowDiskUse: true })
- Kekurangan: Kecepatan query akan berkurang
Mengenal Elasticsearch
Konsep elasticsearch
Merupakan mesin analisis dan pencarian yang biasa digunakan untuk menyimpan, mencari, dan menganalisis data dalam jumlah besar dengan cepat dan real time. Mesin pencarian ini memiliki arsitektur berbasis RESTful.
Setup Cluster Elasticsearch
Cluster Elasticsearch merupakan sebuah group yang terdiri beberapa Elasticsearch nodes yang saling terhubung.
Cluster Elasticsearch merupakan sebuah group yang terdiri beberapa Elasticsearch nodes yang saling terhubung.
Tiap node dari elasticsearch dapat diberikan tugas sebagai berikut :
Membuat Index pada Dokumen Elasticsearch
Indexing Dokumen
Untuk melakukan indexing satu dokumen, dapat dilakukan dengan cara melakukan GET request sesuai dengan spesifikasi dari document ID dari data yang telah dimasukkan sebelumnya.
- Data Nodes : menyimpan data dan menjalankan operasi terkait data seperti pencarian dan agregasi data
- Master Nodes : Memanajemen seluruh cluster dan konfigurasi seperti menambah atau menghapus node elasticsearch
- Client Nodes : menuruskan permintaan sebuah cluster ke master nodes
- Ingest Nodes : melakukan pra-pemrosesan dokumen sebelum dilakukan pengindeksan
Membuat Index pada Dokumen Elasticsearch
Indexing Dokumen
Untuk melakukan indexing satu dokumen, dapat dilakukan dengan cara melakukan GET request sesuai dengan spesifikasi dari document ID dari data yang telah dimasukkan sebelumnya.
Indexing pada Banyak Dokumen
Terdapat penambahan query parameter pada saat melakukan indexing data yaitu dengan menambahkan request _bulk pada parameter.
Sumber Referensi : stackshare.io | elastic.co