Lewati ke konten

Generator ObjectID MongoDB - Buat Pengidentifikasi BSON Unik

Hasilkan ObjectID MongoDB yang unik secara instan dengan alat online gratis kami. Buat pengidentifikasi BSON 12 byte yang valid untuk pengujian, pengembangan & operasi basis data. Tidak perlu instalasi.

Generator ID Objek MongoDB

Kalkulator pemuatan...
📚

Dokumentasi

Apa Itu ObjectID MongoDB?

ObjectID MongoDB adalah nilai 12 byte yang secara default ditetapkan MongoDB ke field _id setiap dokumen. Nilai ini ditulis sebagai 24 karakter heksadesimal huruf kecil, misalnya 507f1f77bcf86cd799439011. Alat ini menghasilkan antara 1 dan 100 ObjectID yang valid sekaligus, langsung di browser, tanpa memerlukan koneksi basis data.

Struktur ObjectID MongoDB

ObjectID dibentuk dari tiga bagian yang ditempatkan satu demi satu:

  • Stempel waktu (4 byte). Jumlah detik sejak 1 Januari 1970 (epoch Unix), disimpan sebagai angka big-endian tanpa tanda. Nilai ini mencatat waktu pembuatan ObjectID. Empat byte menyimpan nilai dari 0 hingga 4.294.967.295, sehingga field kembali ke 0 setelah 7 Februari 2106, 06:28:15 UTC.
  • Nilai acak (5 byte). Angka yang dipilih secara acak satu kali ketika program dimulai. Setiap ObjectID yang dibuat program tersebut setelahnya menggunakan kembali nilai acak yang sama, sehingga komputer yang berbeda tidak perlu berkoordinasi.
  • Penghitung (3 byte). Angka yang dimulai dari titik acak antara 0 dan 16.777.215, lalu bertambah sebesar 1 untuk setiap ObjectID baru. Jika melewati 16.777.215, nilainya kembali ke 0.

Jika disusun ujung ke ujung, bagian-bagian tersebut terlihat seperti ini:

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Driver MongoDB versi lama membentuk bagian tengah dari pengenal mesin dan ID proses, bukan dari angka acak. Driver saat ini, termasuk logika di balik alat ini, menggunakan satu nilai acak berukuran 5 byte untuk setiap proses.

Format dan Rumus ObjectID MongoDB

Tidak ada rumus aritmetika di balik ObjectID, berbeda dari persentase atau perhitungan bunga. ObjectID dirakit dengan mengonversi tiga angka menjadi teks heksadesimal lalu menggabungkannya ujung ke ujung:

  1. Ambil waktu saat ini dalam detik sejak epoch Unix, yang dibatasi ke rentang 0 hingga 4.294.967.295 agar dapat dimuat dalam empat byte. Tulis sebagai angka heksadesimal dengan 8 digit.
  2. Ambil nilai acak tetap milik proses, yaitu angka dari 0 hingga 2^40 − 1. Tulis sebagai angka heksadesimal dengan 10 digit.
  3. Ambil nilai penghitung saat ini, dari 0 hingga 16.777.215. Tulis sebagai angka heksadesimal dengan 6 digit, lalu naikkan penghitung sebesar 1 untuk ID berikutnya.
  4. Gabungkan ketiga string heksadesimal tersebut, dalam urutan itu, menjadi satu string dengan 24 karakter.

Contoh perhitungan

Misalkan sebuah program dimulai pada waktu Unix 1.700.000.000 detik, yaitu 14 November 2023, 22:13:20 UTC. Program tersebut memilih nilai acak 3f2a91c8d4 dan memulai penghitungnya pada 12.345.

  • Stempel waktu dalam heksadesimal: 6553f100
  • Nilai acak dalam heksadesimal: 3f2a91c8d4
  • Penghitung dalam heksadesimal: 003039

Dengan menggabungkannya, diperoleh ObjectID pertama:

6553f1003f2a91c8d4003039

Jika program menghasilkan ObjectID kedua pada detik yang sama, stempel waktu dan nilai acaknya tetap sama, tetapi penghitungnya naik menjadi 12.346 (00303a):

6553f1003f2a91c8d400303a

Pembacaan ObjectID juga dapat dilakukan secara terbalik. Dari 507f1f77bcf86cd799439011, 8 karakter pertamanya, yaitu 507f1f77, didekodekan menjadi 1.350.508.407 detik sejak epoch, yaitu 17 Oktober 2012, 21:13:27 UTC.

Penggunaan Umum ObjectID MongoDB

  • Kunci utama. MongoDB secara otomatis menempatkan ObjectID di field _id dokumen, kecuali nilai lain diberikan.
  • Pencarian berdasarkan waktu pembuatan. Karena stempel waktu tertanam di dalamnya, program dapat membaca perkiraan waktu pembuatan dokumen tanpa field tanggal terpisah.
  • Pengurutan berdasarkan urutan penyisipan. Mengurutkan dokumen berdasarkan _id secara kasar mengurutkannya berdasarkan waktu pembuatan, karena stempel waktu berada di bagian awal nilai tersebut.
  • Data pengujian dan tiruan. Pengembang menggunakan ObjectID yang dihasilkan untuk membuat dokumen sampel atau pengujian otomatis tanpa menjalankan basis data.

ObjectID MongoDB vs. UUID

UUID (Universally Unique Identifier) adalah nilai 16 byte, empat byte lebih besar daripada ObjectID. UUID standar biasanya acak di seluruh bagiannya, sehingga tidak mengungkapkan waktu pembuatan atau mengurutkan nilai berdasarkan urutan pembuatan. ObjectID lebih pendek dan secara kasar berurutan berdasarkan waktu, yang menjadi salah satu alasan MongoDB menggunakannya secara default, meskipun ObjectID tidak memiliki jaminan keunikan formal yang sama seperti UUID yang dibuat dengan benar.

Pertanyaan yang sering diajukan

Untuk apa ObjectID MongoDB digunakan? ObjectID adalah nilai default yang ditempatkan MongoDB di field _id dokumen, sehingga setiap dokumen mendapatkan kunci unik tanpa penyiapan tambahan.

Apakah keunikan ObjectID MongoDB dijamin? Tidak dalam pengertian formal dan matematis, tetapi kemungkinan terjadinya tabrakan sangat kecil. Dua ObjectID harus memiliki nilai acak dan posisi penghitung yang sama pada detik yang sama, yang biasanya hanya terjadi dalam satu proses.

Dapatkah tanggal pembuatan dibaca dari ObjectID? Ya. 8 karakter heksadesimal pertama, yaitu 4 byte, menyimpan jumlah detik sejak epoch Unix. Mengonversi angka tersebut menjadi tanggal akan menghasilkan perkiraan waktu pembuatan.

Berapa banyak ObjectID yang dapat dibuat generator ini sekaligus? Antara 1 dan 100 per batch. Setiap ID dalam satu batch menggunakan nilai acak yang sama di seluruh proses, dan masing-masing memiliki penghitung yang satu angka lebih tinggi daripada ID sebelumnya.

Dapatkah ObjectID MongoDB digunakan di luar MongoDB? Ya. Karena ObjectID hanyalah nilai 12 byte yang dikodekan sebagai teks heksadesimal, nilai ini juga dapat digunakan sebagai ID unik di sistem lain, meskipun skema ID bawaan suatu basis data mungkin lebih sesuai dengan kebutuhannya.

Apakah generator ini terhubung ke basis data MongoDB sungguhan? Tidak. Generator ini sepenuhnya berjalan di browser dan tidak membaca dari atau menulis ke basis data mana pun.

Referensi

  1. "ObjectId." Manual MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Spesifikasi BSON MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Spesifikasi BSON, https://bsonspec.org/spec.html.