Langkau ke kandungan

Penjana ID Objek MongoDB - Hasilkan Pengecam BSON Unik

Hasilkan ID Objek MongoDB yang unik serta-merta dengan alat dalam talian percuma kami. Cipta pengecam BSON 12-bait yang sah untuk ujian, pembangunan & operasi pangkalan data. Tiada pemasangan diperlukan.

Penjana ID Objek MongoDB

Kalkulator Pemuatan...
📚

Dokumentasi

Apakah ObjectID MongoDB?

ObjectID MongoDB ialah nilai sepanjang 12 bait yang diberikan oleh MongoDB secara lalai kepada medan _id bagi setiap dokumen. Nilai ini ditulis sebagai 24 aksara heksadesimal huruf kecil, contohnya 507f1f77bcf86cd799439011. Alat ini menjana antara 1 hingga 100 ObjectID yang sah pada satu-satu masa, terus dalam pelayar, tanpa memerlukan sambungan pangkalan data.

Struktur ObjectID MongoDB

ObjectID dibina daripada tiga bahagian yang diletakkan berturutan:

  • Cap waktu (4 bait). Bilangan saat sejak 1 Januari 1970 (epok Unix), disimpan sebagai nombor tanpa tanda dalam format big-endian. Nilai ini merekodkan waktu ObjectID dicipta. Empat bait menyimpan nilai daripada 0 hingga 4,294,967,295, jadi medan ini kembali kepada 0 selepas 7 Februari 2106, 06:28:15 UTC.
  • Nilai rawak (5 bait). Nombor yang dipilih secara rawak sekali apabila sesuatu atur cara dimulakan. Setiap ObjectID yang kemudiannya dicipta oleh atur cara itu menggunakan semula nilai rawak yang sama, jadi komputer yang berbeza tidak perlu menyelaras sesama sendiri.
  • Kaunter (3 bait). Nombor yang bermula pada titik rawak antara 0 hingga 16,777,215 dan meningkat sebanyak 1 bagi setiap ObjectID baharu. Jika melepasi 16,777,215, nilainya kembali kepada 0.

Apabila disusun hujung ke hujung, bahagian-bahagian itu kelihatan seperti ini:

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

Pemacu MongoDB yang lebih lama membina bahagian tengah daripada pengecam mesin dan ID proses, bukannya nombor rawak. Pemacu semasa, termasuk logik di sebalik alat ini, menggunakan satu nilai rawak sepanjang 5 bait bagi setiap proses.

Format dan Rumus ObjectID MongoDB

Tiada rumus aritmetik di sebalik ObjectID, tidak seperti pengiraan peratusan atau faedah. ObjectID dibentuk dengan menukarkan tiga nombor kepada teks heksadesimal dan mencantumkannya hujung ke hujung:

  1. Ambil waktu semasa dalam saat sejak epok Unix, dibungkus dalam julat 0 hingga 4,294,967,295 supaya muat dalam empat bait. Tulisnya sebagai nombor heksadesimal sepanjang 8 digit.
  2. Ambil nilai rawak tetap proses, iaitu nombor daripada 0 hingga 2^40 − 1. Tulisnya sebagai nombor heksadesimal sepanjang 10 digit.
  3. Ambil nilai semasa pembilang, daripada 0 hingga 16,777,215. Tulisnya sebagai nombor heksadesimal sepanjang 6 digit, kemudian tingkatkan pembilang sebanyak 1 untuk ID seterusnya.
  4. Cantumkan ketiga-tiga rentetan heksadesimal itu, mengikut susunan tersebut, menjadi satu rentetan sepanjang 24 aksara.

Contoh pengiraan

Katakan sesuatu atur cara bermula pada waktu Unix 1,700,000,000 saat, iaitu 14 November 2023, 22:13:20 UTC. Atur cara itu memilih nilai rawak 3f2a91c8d4 dan memulakan pembilangnya pada 12,345.

  • Cap waktu dalam heksadesimal: 6553f100
  • Nilai rawak dalam heksadesimal: 3f2a91c8d4
  • Pembilang dalam heksadesimal: 003039

Percantuman ini menghasilkan ObjectID pertama:

6553f1003f2a91c8d4003039

Jika atur cara menjana ObjectID kedua dalam saat yang sama, cap waktu dan nilai rawak kekal sama, tetapi pembilang meningkat kepada 12,346 (00303a):

6553f1003f2a91c8d400303a

Pembacaan ObjectID juga boleh dilakukan secara terbalik. Diberikan 507f1f77bcf86cd799439011, 8 aksara pertamanya, iaitu 507f1f77, dinyahkodkan kepada 1,350,508,407 saat sejak epok, iaitu 17 Oktober 2012, 21:13:27 UTC.

Kegunaan Umum ObjectID MongoDB

  • Kunci utama. MongoDB memasukkan ObjectID ke dalam medan _id dokumen secara automatik, kecuali nilai lain diberikan.
  • Carian berdasarkan waktu penciptaan. Oleh sebab cap waktu terbenam di dalamnya, atur cara boleh membaca anggaran waktu penciptaan dokumen tanpa medan tarikh berasingan.
  • Pengisihan mengikut susunan sisipan. Mengisih dokumen mengikut _id secara kasar mengisihnya mengikut waktu penciptaan, kerana cap waktu muncul dahulu dalam nilai tersebut.
  • Data ujian dan data olok-olok. Pembangun menggunakan ObjectID yang dijana untuk membina dokumen sampel atau ujian automatik tanpa menjalankan pangkalan data.

ObjectID MongoDB berbanding UUID

UUID (Pengecam Unik Sejagat) ialah nilai sepanjang 16 bait, iaitu empat bait lebih besar daripada ObjectID. UUID piawai biasanya rawak sepenuhnya, jadi UUID tidak mendedahkan waktu penciptaan dan tidak tersusun mengikut urutan penciptaan. ObjectID lebih pendek dan secara kasar tersusun mengikut waktu, yang merupakan salah satu sebab MongoDB menggunakannya secara lalai, walaupun ObjectID tidak membawa jaminan keunikan formal yang sama seperti UUID yang dijana dengan betul.

Soalan lazim

Untuk apakah ObjectID MongoDB digunakan? Ia ialah nilai lalai yang dimasukkan MongoDB ke dalam medan _id dokumen, supaya setiap dokumen mendapat kunci unik tanpa persediaan tambahan.

Adakah ObjectID MongoDB dijamin unik? Tidak dalam erti kata formal dan matematik, tetapi perlanggaran amat tidak mungkin berlaku. Dua ObjectID perlu mempunyai nilai rawak dan kedudukan pembilang yang sama dalam saat yang sama, yang biasanya hanya berlaku dalam satu proses.

Bolehkah tarikh penciptaan dibaca daripada ObjectID? Ya. 8 aksara heksadesimal pertama, iaitu 4 bait, menyimpan bilangan saat sejak epok Unix. Penukaran nombor itu kepada tarikh memberikan anggaran waktu penciptaan.

Berapakah bilangan ObjectID yang boleh dijana oleh penjana ini pada satu-satu masa? Antara 1 hingga 100 bagi setiap kelompok. Setiap ID dalam kelompok berkongsi nilai rawak seluruh proses yang sama, dan setiap satunya mempunyai pembilang yang satu lebih tinggi daripada pembilang ID sebelumnya.

Bolehkah ObjectID MongoDB digunakan di luar MongoDB? Ya. Oleh sebab ObjectID hanyalah nilai sepanjang 12 bait yang dikodkan sebagai teks heksadesimal, ia juga boleh berfungsi sebagai ID unik dalam sistem lain, walaupun skim ID pangkalan data itu sendiri mungkin lebih sesuai dengan keperluannya.

Adakah penjana ini disambungkan kepada pangkalan data MongoDB sebenar? Tidak. Penjana ini berjalan sepenuhnya dalam pelayar dan tidak membaca daripada atau menulis kepada mana-mana pangkalan data.

Rujukan

  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.