Kursus
Sejauh ini, saya telah mengikuti banyak wawancara data science dan database. Semakin banyak perusahaan mencari profesional yang memiliki keahlian dalam basis data NoSQL. MongoDB adalah salah satu database yang paling fleksibel, mampu mendukung aplikasi modern yang skalabel dengan waktu henti minimal.
Dalam artikel ini, saya telah mengumpulkan daftar pertanyaan wawancara yang pernah saya temui, beserta wawasan yang saya kumpulkan dari pengalaman wawancara rekan-rekan saya.
Apa itu MongoDB?
MongoDB adalah basis data No-SQL yang menyimpan data dalam arsitektur yang fleksibel dan tanpa skema. Berbeda dengan tabel tradisional, MongoDB menggunakan dokumen dan koleksi untuk menyimpan catatan dalam format mirip JSON yang disebut BSON. Format ini memungkinkan MongoDB menyimpan berbagai tipe data dalam model hierarkis.
Karena MongoDB tidak memiliki skema tetap, ia memungkinkan penyimpanan jenis apa pun, menjadikannya pilihan tepat untuk analitik real-time dan streaming data. Selain itu, aplikasi modern sering mengalami pertumbuhan cepat atau lalu lintas yang tidak terduga, yang dapat ditangani dengan baik oleh MongoDB. Misalnya, MongoDB mendukung penskalaan horizontal, memungkinkan Anda menambahkan server tambahan untuk menangani peningkatan beban.
Pertanyaan Wawancara MongoDB Dasar
Pada bagian ini, kita akan berfokus pada pertanyaan-pertanyaan dasar yang sering ditanyakan dalam wawancara MongoDB.
Jelaskan format penyimpanan BSON.
BSON adalah singkatan dari Binary JavaScript Object Notation. BSON menyimpan dokumen JSON yang diserialisasi dalam format biner dan memperluas kemampuan JSON dengan mendukung tipe data tambahan seperti Date, ObjectId, dan regular expression.
Sebuah dokumen BSON biasanya terdiri dari tiga komponen: ukuran dokumen, elemen bidang (seperti tipe data, nama, dan nilai), serta penutup null, semuanya dalam format biner.
Tabel berikut menggambarkan perbedaan antara BSON dan JSON, terutama karena BSON memperluas kemampuan JSON:
|
Fitur |
JSON |
BSON |
|
Format Enkode |
Berbasis teks |
Biner |
|
Tipe Data yang Didukung |
String, Number, Boolean, dll. |
Tipe JSON + Date, ObjectId, Regular Expressions |
|
Keterbacaan |
Dapat dibaca manusia |
Dapat dibaca mesin |
|
Kasus Penggunaan |
Pertukaran data |
Penyimpanan data di MongoDB |
Apa itu koleksi di MongoDB?
Koleksi MongoDB adalah sekumpulan dokumen yang disimpan dalam satu database. Ini mirip dengan tabel dalam basis data relasional, di mana setiap dokumen dalam koleksi mewakili satu baris di tabel. Namun, koleksi tidak memiliki skema tetap, yang berarti dokumen dalam suatu koleksi dapat memiliki tipe data yang berbeda.
Bagaimana cara melakukan query dokumen di MongoDB?
Di MongoDB, Anda dapat melakukan query dokumen menggunakan metode find(). Untuk menanyakan semua dokumen dalam sebuah koleksi, gunakan db.collection_name.find(). Metode find memiliki dua parameter masukan: query dan projection. Parameter query digunakan untuk memfilter dokumen yang memenuhi kondisi tertentu.
Sintaks untuk parameter query:
db.collection_name.find({condition})
Parameter kedua adalah projection yang menunjukkan kolom yang akan disertakan atau dikecualikan dalam keluaran. Beri nilai 1 pada kolom yang ingin Anda ambil. Berikut sintaksnya:
db.collection_name.find({},{column1: 1, column2: 1})
Apa perbedaan antara find() dan findOne()?
Metode find() mengembalikan kursor ke banyak dokumen yang sesuai dengan kriteria query. Ini bekerja dengan mengiterasi semua hasil dan mengambil dokumen yang cocok. Di sisi lain, metode findOne() mengembalikan dokumen pertama yang cocok.
Apa itu field _id di MongoDB?
Setiap dokumen yang disimpan dalam koleksi memerlukan pengenal unik. Field _id ini bertindak sebagai primary key untuk mengidentifikasi dokumen secara unik dalam sebuah koleksi.
Pertanyaan Wawancara MongoDB Tingkat Menengah
Sekarang, mari beralih ke beberapa konsep inti MongoDB yang diharapkan pewawancara Anda ketahui.
Bagaimana MongoDB menyimpan gambar dan video berukuran besar?
Secara tradisional, MongoDB tidak mengizinkan penyimpanan dokumen yang lebih besar dari 16 MB. Namun, MongoDB memiliki spesifikasi khusus bernama GridFS untuk menyimpan dan mengambil file yang lebih besar dari 16 MB. GridFS membagi file menjadi potongan-potongan kecil berukuran sama dan menyimpannya sebagai dokumen terpisah secara internal.
Tabel di bawah merangkum bagaimana MongoDB menyimpan file besar menggunakan GridFS:
|
Langkah |
Deskripsi |
|
Pemenggalan File |
Membagi file menjadi potongan-potongan lebih kecil berukuran 255 KB atau kurang |
|
Penyimpanan Metadata |
Menyimpan metadata tentang file dalam koleksi |
|
Penyimpanan Chunk |
Menyimpan potongan file dalam koleksi |
|
Pengambilan Kembali |
Menyusun ulang file dari potongan yang tersimpan |
Bagaimana MongoDB memastikan ketersediaan tinggi?
MongoDB mencapai ketersediaan tinggi melalui replikasi. Replica set menyimpan salinan data yang berbeda di berbagai node sehingga jika satu node gagal, node lain dapat mengambil alih.
Apa itu sharding di MongoDB?
Sharding memungkinkan penskalaan horizontal di MongoDB. Ketika satu instance tidak dapat menangani dataset yang besar, MongoDB membagi data menjadi potongan-potongan kecil dan mendistribusikannya ke beberapa server, yang disebut shard.
Tabel berikut memperjelas perbedaan antara replikasi dan sharding:
|
Fitur |
Replikasi |
Sharding |
|
Tujuan |
Ketersediaan tinggi |
Skalabilitas untuk dataset besar |
|
Implementasi |
Replica set (banyak salinan) |
Data dipartisi di berbagai shard |
|
Kasus Penggunaan |
Toleransi kesalahan |
Load balancing untuk database besar |
|
Distribusi Data |
Semua node menyimpan data yang sama |
Data didistribusikan di berbagai node |
Apa itu replica set di MongoDB?
Replica set di MongoDB adalah sekumpulan instance yang memelihara dataset yang sama. Replica set diterapkan pada aplikasi yang membutuhkan ketersediaan tinggi karena jika satu instance bermasalah, sistem secara otomatis beralih ke node berikutnya yang tersedia dalam replica set.
Jelaskan konsep agregasi di MongoDB.
MongoDB mengagregasikan data dari beberapa dokumen dan memprosesnya untuk mengembalikan satu hasil. Ini melibatkan pipeline agregasi, di mana dokumen melewati beberapa tahap—keluaran setiap tahap menjadi masukan untuk tahap berikutnya. Pipeline khas mungkin mencakup tahap seperti match, group, dan sort:
- Match: memfilter dokumen berdasarkan kriteria yang diberikan.
- Group: Melakukan operasi agregasi.
- Sort: Mengurutkan hasil akhir sesuai kebutuhan kita.
Apa itu capped collection di MongoDB?
Capped collection memiliki ukuran tetap dan batas jumlah dokumen. Saat batas tercapai, koleksi ini secara otomatis menimpa dokumen tertua dan menyimpan informasi terbaru. Konsep ini membuatnya cocok untuk kasus penggunaan seperti logging dan caching.
Pertanyaan Wawancara MongoDB Tingkat Lanjutan
Di bagian ini, kita melihat beberapa pertanyaan dan jawaban wawancara MongoDB tingkat lanjut yang populer.
Apakah MongoDB mendukung transaksi ACID?
Hingga versi 4.0, MongoDB mendukung transaksi ACID hanya untuk dokumen tunggal. Dengan transaksi ACID multi-dokumen, pengembang kini dapat memastikan properti ACID di beberapa dokumen dalam satu koleksi.
Apa itu map-reduce di MongoDB?
Map-reduce adalah paradigma pemrosesan data yang melakukan operasi pada dataset besar dan menghasilkan hasil teragregasi. MongoDB menyediakan fungsi bawaan mapReduce() yang terdiri dari dua tahap: map dan reduce.
Selama fase map, fungsi memproses setiap dokumen dalam koleksi dan menghasilkan pasangan key-value. Pasangan key-value ini diagregasikan pada fase reduce, dan operasi dilakukan.
Sebagai contoh, jika Anda memiliki koleksi dokumen teks, fungsi map akan mengonversi setiap kata menjadi sebuah key dan memberikan nilai 1. Fungsi reduce kemudian menjumlahkan nilai setiap key untuk menghitung kemunculan setiap kata di seluruh koleksi.
Jelaskan indeks TTL di MongoDB.
Data yang dihasilkan harus ditinjau secara berkala dan dihapus saat tidak diperlukan; jika tidak, Anda akan kehabisan sumber daya untuk menampung informasi terbaru.
MongoDB menyediakan indeks Time-to-Live (TTL), yang mempermudah penghapusan dokumen kedaluwarsa. Anda hanya perlu menentukan berapa lama sebuah dokumen harus disimpan, dan TTL akan secara otomatis menghapusnya setelah periode waktu yang ditentukan berlalu.
Tabel berikut menjelaskan jenis indeks yang tersedia di MongoDB dan kasus penggunaannya:
|
Jenis Indeks |
Deskripsi |
Contoh Kasus Penggunaan |
|
Single Field |
Indeks pada satu field |
Mengindeks email untuk pencarian lebih cepat |
|
Compound |
Indeks pada beberapa field |
Mengurutkan berdasarkan |
|
Text |
Pencarian teks penuh pada field string |
Mencari postingan blog berdasarkan kata kunci |
|
TTL |
Secara otomatis menghapus dokumen yang kedaluwarsa |
Pembersihan log setelah waktu tertentu |
|
Geospatial |
Mendukung query berbasis lokasi |
Menemukan restoran terdekat |
Apakah MongoDB memiliki fitur backup dan pemulihan?
MongoDB memungkinkan pencadangan data melalui utilitas mongodump. Alat ini membuat backup biner dari data Anda, yang dapat Anda impor kapan pun diperlukan. Opsi lain adalah menggunakan solusi cloud pihak ketiga atau MongoDB Atlas(layanan cloud) untuk mengotomatiskan proses backup.
MongoDB menyediakan utilitas mongorestore untuk mengimpor data dari file BSON hasil backup. Selain itu, solusi cloud pihak ketiga menawarkan kemampuan pemulihan otomatis, sehingga meminimalkan waktu henti.
Bagaimana Anda dapat mengoptimalkan query MongoDB?
Berikut beberapa solusi yang dapat diterapkan untuk mengoptimalkan query MongoDB Anda:
- Indeks menyimpan informasi tentang dokumen, yang membantu menemukan data yang tepat dengan cepat. Jadi, membuat indeks dapat meningkatkan kinerja query.
- Jika Anda tahu kolom mana yang diperlukan, gunakan metode projection untuk mengembalikan hanya field tersebut demi kinerja yang lebih baik.
- Hindari operasi mahal seperti regular expression; gunakan pencarian prefix atau field yang diindeks.
- Pilih shard key yang tepat, terutama saat bekerja pada beban kerja yang banyak membaca (read-heavy).
Jelaskan journaling di MongoDB.
Saat operasi tulis dilakukan, MongoDB mencatatnya ke file jurnal sebelum dituliskan ke file database. Log ini memastikan bahwa operasi tulis yang telah dikomit dapat dipulihkan dengan cepat jika terjadi kegagalan sistem atau crash.
Pertanyaan Wawancara Koding MongoDB
Pertanyaan wawancara koding sering berfokus pada kemampuan Anda mengimplementasikan konsep MongoDB melalui kode. Pertanyaan ini menguji sintaks, praktik pengkodean, dan seberapa efisien Anda menggunakan alat dan fungsi MongoDB.
Bagaimana cara membuat indeks di MongoDB?
MongoDB memiliki fungsi createIndex() untuk membuat berbagai jenis indeks, seperti indeks single-field, indeks teks, dan indeks 2D. Metode ini memiliki dua parameter masukan: keys yang mendefinisikan kolom yang diindeks dan opsi lainnya.
Sintaks:
db.collection.createIndex(keys, options)
- Keys:
{ field1: 1, field2: -1, ... }, 1 untuk urutan menaik dan -1 untuk urutan menurun - Options:
{unique: true},{sparse: true},{ expireAfterSeconds: 3600 }
Contoh:
db.users.createIndex({ email: 1 }, { unique: true });
Bagaimana cara mengimplementasikan agregasi di MongoDB?
Agregasi biasanya berisi tiga tahap: match, group, dan sort. Mari kita lihat bagaimana kita dapat mengimplementasikannya dalam kode.
Contoh dokumen “products”:
[
{ "_id": 1, "product_id": "t2409", "amount": $250, "status": "done" },
{ "_id": 2, "product_id": "t2009", "amount": $300, "status": "done" },
{ "_id": 3, "product_id": "t1309", "amount": $150, "status": "pending" },
{ "_id": 4, "product_id": "t1919", "amount": $480, "status": "done" },
{ "_id": 5, "product_id": "t5459", "amount": $120, "status": "pending" },
{ "_id": 6, "product_id": "t3829", "amount": $280, "status": "done" }
]
$match: Untuk memfilter dokumen berdasarkan suatu kondisi$group: Mengelompokkan data dan menerapkan operasi agregasi$sort: Mengurutkan dokumen keluaran sesuai kebutuhan
Contoh:
db.products.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$product_id", totalAmount: { $sum: "$amount" },
{ $sort
]);
Bagaimana Anda melakukan ekuivalen join SQL di MongoDB?
MongoDB menyediakan operator agregasi seperti $lookup untuk melakukan join yang setara dengan SQL.
Sintaks:
db.collection_1_name.aggregate([
{
$lookup: {
from: "collection_2_name", // Koleksi lain untuk digabungkan
localField: "field_in_collection_1", // Field yang digunakan untuk join
foreignField: "field_in_collection_2", // Field dari koleksi kedua untuk operasi join
as: "result_field" // Nama field baru untuk menyimpan hasil join
}
}
])
Contoh:
Misalkan Anda memiliki koleksi order dan product dengan data sebagai berikut:
Koleksi “Orders”:
[
{ "_id": 1, "product_id": 101, "order_amount": 250 },
{ "_id": 2, "product_id": 102, "order_amount": 300 },
{ "_id": 3, "product_id": 101, "order_amount": 150 }
]
Koleksi “Products”:
[
{ "_id": 3789, "product_id": 102, "product_price": $100},
{ "_id": 3970, "product_id": 103, "product_price": $297},
{ "_id": 3509, "product_id": 101, "product_price": $300},
]
Operasi join:
db.orders.aggregate([
{
$lookup: {
from: "products",
localField: "customer_id",
foreignField: "_id",
as: "customer_info"
}
}
])
Bagaimana Anda memodelkan relasi one-to-many di MongoDB?
Anda dapat membuat model data yang menggunakan dokumen tertanam (embedded) untuk menggambarkan relasi one-to-many. Misalnya, satu tim dapat memiliki banyak karyawan, sehingga Anda dapat menanamkannya sebagai berikut:
Data:
// detail tim
{
_id: "Datascience"
company_name: "DataCamp"
team_name: "Data leaders"
}
// karyawan satu
{
name: "John"
employee_id: "t009456"
email: johnsmith@datacamp.com
}
// karyawan dua
{
name: "Emily"
employee_id: "t8068ms"
email: emilyjones@datacamp.com
}
Dokumen tertanam one-to-many:
{
"_id": "Datascience",
"company_name": "DataCamp",
"team_name": "Data leaders",
"employees": [
{
"name": "John",
"employee_id": "t009456",
"email": "johnsmith@datacamp.com"
},
{
"name": "Emily",
"employee_id": "t8068ms",
"email": "emilyjones@datacamp.com"
}
]
}
Pertanyaan Wawancara Berbasis Skenario MongoDB untuk DBA
Pewawancara akan menempatkan Anda pada situasi yang menantang dan menilai bagaimana Anda menanganinya. Ini membantu mereka memahami kemampuan Anda menangani masalah real-time saat bekerja dengan MongoDB.
Bayangkan Anda melakukan operasi pencarian pada database “orders” sebagai berikut. Bagaimana Anda men-debug mengapa query lambat?
df.orders.find({
customer_id: 'yop89'
ordered_items: {
product_id: 'toi45'
product_id: 'tac87'
}
});
Pertama, Anda harus mengatur profiling level 1 untuk memilih hanya query yang berjalan lambat:
db.setProfilingLevel(1, { slowms: 100 }); // Mencatat query yang lebih lambat dari 100ms
Sekarang, kode berikut memberi kita detail tambahan seperti jenis operasi, waktu yang dibutuhkan, serta key atau dokumen yang dipindai. Informasi ini membantu Anda menemukan query yang berjalan lambat:
db.system.profile.find({ millis: { $gt: 100 } }).sort({ millis: -1 }).limit(10);
Dalam skenario di atas, bagaimana Anda meningkatkan kinerja query yang berjalan lambat?
Dari keluaran kode di atas, jika query memindai seluruh koleksi, buat indeks pada customer_id dan ordered_items. Indeks dapat mengurangi jumlah dokumen yang dipindai, sehingga meningkatkan waktu eksekusi query.
db.orders.createIndex({ customer_id: 1, "ordered_items.product_id": 1});
Dalam sharding, jika satu shard kelebihan beban dan shard lainnya tetap idle, bagaimana Anda menyeimbangkannya?
Dua potensi masalah adalah pemilihan shard key yang tidak tepat dan distribusi data yang tidak merata di berbagai shard.
Perbaikan 1: Pilih shard key yang tepat
- Pilih kolom dengan kardinalitas tinggi sebagai shard key. Artinya, shard key harus memiliki banyak nilai unik.
- Jika beban kerja Anda banyak menulis (write-heavy), pastikan shard key Anda tidak mengarahkan semua penulisan ke satu shard.
- Pilih shard key yang selaras dengan query yang paling sering Anda jalankan. Misalnya, jika query Anda sering melakukan join pada field tertentu, field tersebut bisa menjadi shard key yang efektif.
Perbaikan 2: Seimbangkan kembali distribusi yang tidak merata
Perintah di bawah ini memberikan gambaran umum distribusi data di berbagai shard. Jika chunk tidak terdistribusi dengan baik, aktifkan balancer.
sh.status()
Perintah berikut mendapatkan status balancer. Jika dinonaktifkan, gunakan perintah setelahnya untuk mengaktifkannya.
sh.getBalancerState()
sh.enableBalancing("db_name.collection_name")
Tantangan apa yang mungkin Anda hadapi saat migrasi dari RDBMS ke MongoDB?
Memetakan operasi basis data relasional ke padanan mereka di NoSQL bisa menjadi tantangan.
- Misalnya, join SQL tidaklah langsung di MongoDB; sebagai gantinya, Anda perlu menggunakan kerangka kerja agregasi untuk mencapai fungsionalitas serupa.
- Tantangan lain adalah data yang disimpan dalam tabel terstruktur perlu ditransformasikan agar sesuai dengan format penyimpanan BSON MongoDB.
- Selain itu, sementara RDBMS menyediakan kepatuhan ACID yang kuat, MongoDB hanya menawarkan properti ACID tingkat dokumen, yang berarti transaksi ACID yang kompleks mungkin memerlukan perhatian ekstra.
Tips Mempersiapkan Wawancara MongoDB
Berhasil dalam wawancara MongoDB membutuhkan pemahaman konsep yang mendalam dan keahlian praktis di bidang tersebut. Penting untuk meningkatkan pengetahuan Anda tentang basis data NoSQL, menguasai sintaks MongoDB, serta memiliki paparan terhadap berbagai skenario kegagalan MongoDB dan belajar menanganinya.
Berikut tips terbaik saya untuk membantu Anda lulus wawancara MongoDB berikutnya:
- Kuasai fundamental: Baik Anda melamar peran tingkat awal maupun posisi senior, fundamental selalu diuji. Jadi, pahami arsitektur MongoDB, jenis penyimpanan, sintaks, dan operasi yang didukung.
- Topik lanjutan: Anda harus mengetahui cara kerja konsep lanjutan seperti replikasi, agregasi, sharding, dan pengindeksan di MongoDB serta mampu mengimplementasikannya bila diperlukan.
- Skenario dunia nyata: Pewawancara sering menguji bagaimana Anda mengelola database MongoDB dalam berbagai skenario di tempat kerja. Misalnya, Anda mungkin ditanya bagaimana memigrasikan database RDBMS yang ada ke MongoDB. Dalam wawancara yang lebih maju, Anda mungkin diberi skenario dan diminta menulis kode untuk menanganinya.
- Baca pengalaman sebelumnya: Mempelajari pengalaman wawancara sebelumnya di perusahaan memberi Anda gambaran tentang jenis pertanyaan yang diharapkan dan pola wawancaranya, sehingga Anda dapat mempersiapkan diri. Saya pribadi menggunakan platform seperti Glassdoor, Blind, YouTube, dan LinkedIn untuk pengalaman wawancara sebelumnya.
- Wawancara tiruan: Wawancara tiruan membantu Anda menilai kekuatan dan kelemahan Anda. Wawancara ini juga mempersiapkan Anda untuk suasana wawancara, sehingga Anda merasa percaya diri dan nyaman saat wawancara sebenarnya.
- Keterampilan lunak: Kemampuan mengomunikasikan topik kompleks sangat penting untuk mengesankan pewawancara. Jadi, latih keterampilan komunikasi dan presentasi Anda.
- Sertifikasi: Sertifikasi MongoDB menjadi bukti keahlian Anda. Sertifikasi memperdalam pemahaman Anda dan meningkatkan peluang untuk direkrut. Berikut panduan lengkap untuk mendapatkan sertifikasi MongoDB.
Kesimpulan
MongoDB adalah basis data NoSQL yang kuat dengan skema fleksibel yang mendukung aplikasi modern. Karena itu, keahliannya sangat dicari dalam pengembangan perangkat lunak.
Dalam artikel ini, kita telah membahas pertanyaan wawancara penting, mulai dari dasar hingga koding dan berbasis skenario. Selain itu, tips di akhir akan meningkatkan peluang Anda untuk sukses dalam wawancara.
Untuk memperdalam pemahaman Anda tentang MongoDB, pertimbangkan untuk mengeksplorasi korsus seperti MongoDB dalam Python dan konsep NoSQL.
Srujana adalah penulis lepas di bidang teknologi dengan gelar sarjana Ilmu Komputer. Menulis tentang berbagai topik, termasuk data science, komputasi awan, pengembangan, pemrograman, keamanan, dan banyak lainnya adalah hal yang alami baginya. Ia menyukai sastra klasik dan menjelajahi destinasi baru.

