เครื่องมือสร้าง MongoDB ObjectID - สร้างตัวระบุ BSON ที่ไม่ซ้ำกัน
สร้าง MongoDB ObjectIDs ที่ไม่ซ้ำกันได้ทันทีด้วยเครื่องมือออนไลน์ฟรีของเรา สร้างตัวระบุ BSON ขนาด 12 ไบต์สำหรับการทดสอบ การพัฒนา และการดำเนินการฐานข้อมูล ไม่ต้องติดตั้งอะไรเลย
เครื่องมือสร้าง MongoDB ObjectID
เอกสารประกอบการใช้งาน
ObjectID ของ MongoDB คืออะไร?
ObjectID ของ MongoDB คือค่าขนาด 12 ไบต์ที่ MongoDB กำหนดให้กับฟิลด์ _id ของเอกสารทุกฉบับโดยค่าเริ่มต้น ค่านี้เขียนเป็นอักขระเลขฐานสิบหกตัวพิมพ์เล็ก 24 ตัวอย่างเช่น 507f1f77bcf86cd799439011 เครื่องมือนี้สร้าง ObjectID ที่ถูกต้องได้ครั้งละตั้งแต่ 1 ถึง 100 ค่าโดยตรงในเบราว์เซอร์ โดยไม่ต้องเชื่อมต่อฐานข้อมูล
โครงสร้าง ObjectID ของ MongoDB
ObjectID ประกอบด้วยสามส่วนที่วางต่อกันตามลำดับดังนี้:
- เวลาประทับ (4 ไบต์) จำนวนวินาทีนับตั้งแต่ 1 มกราคม ค.ศ. 1970 (ยุค Unix) ซึ่งจัดเก็บเป็นจำนวนเต็มไม่ติดเครื่องหมายแบบบิ๊กเอนเดียน ค่านี้ระบุว่า ObjectID ถูกสร้างขึ้นเมื่อใด ไบต์ทั้งสี่เก็บค่าได้ตั้งแต่ 0 ถึง 4,294,967,295 ดังนั้นฟิลด์นี้จะวนกลับไปเป็น 0 หลัง 7 กุมภาพันธ์ ค.ศ. 2106 เวลา 06:28:15 UTC
- ค่าสุ่ม (5 ไบต์) ตัวเลขที่สุ่มเลือกหนึ่งครั้งเมื่อโปรแกรมเริ่มทำงาน ObjectID ทุกค่าที่โปรแกรมนั้นสร้างหลังจากนั้นจะใช้ค่าสุ่มเดิม ทำให้คอมพิวเตอร์แต่ละเครื่องไม่จำเป็นต้องประสานงานกัน
- ตัวนับ (3 ไบต์) ตัวเลขที่เริ่มจากจุดสุ่มระหว่าง 0 ถึง 16,777,215 และเพิ่มขึ้นทีละ 1 สำหรับ ObjectID ใหม่แต่ละค่า หากเกิน 16,777,215 จะวนกลับไปเป็น 0
เมื่อนำแต่ละส่วนมาต่อกัน จะมีลักษณะดังนี้:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2ไดรเวอร์ MongoDB รุ่นเก่าสร้างส่วนตรงกลางจากตัวระบุเครื่องและรหัสกระบวนการ แทนที่จะใช้ตัวเลขสุ่ม ส่วนไดรเวอร์รุ่นปัจจุบัน รวมถึงตรรกะเบื้องหลังเครื่องมือนี้ ใช้ค่าสุ่มขนาด 5 ไบต์หนึ่งค่าต่อกระบวนการแทน
รูปแบบและสูตรของ ObjectID ใน MongoDB
ObjectID ไม่มีสูตรคำนวณทางคณิตศาสตร์อยู่เบื้องหลัง ต่างจากการคำนวณเปอร์เซ็นต์หรือดอกเบี้ย แต่สร้างขึ้นโดยแปลงตัวเลขสามค่าเป็นข้อความเลขฐานสิบหก แล้วนำมาต่อกัน:
- นำเวลาปัจจุบันในหน่วยวินาทีนับตั้งแต่ยุค Unix มาวนให้อยู่ในช่วง 0 ถึง 4,294,967,295 เพื่อให้พอดีกับสี่ไบต์ แล้วเขียนเป็นเลขฐานสิบหกจำนวน 8 หลัก
- นำค่าสุ่มคงที่ของกระบวนการ ซึ่งเป็นตัวเลขตั้งแต่ 0 ถึง 2^40 − 1 มาเขียนเป็นเลขฐานสิบหกจำนวน 10 หลัก
- นำค่าปัจจุบันของตัวนับ ซึ่งอยู่ระหว่าง 0 ถึง 16,777,215 มาเขียนเป็นเลขฐานสิบหกจำนวน 6 หลัก จากนั้นเพิ่มตัวนับขึ้น 1 สำหรับ ID ถัดไป
- นำสตริงเลขฐานสิบหกทั้งสามมาต่อกันตามลำดับให้เป็นสตริงยาว 24 อักขระ
ตัวอย่างพร้อมวิธีทำ
สมมติว่าโปรแกรมเริ่มทำงานที่เวลา Unix 1,700,000,000 วินาที ซึ่งตรงกับ 14 พฤศจิกายน ค.ศ. 2023 เวลา 22:13:20 UTC โปรแกรมเลือกค่าสุ่ม 3f2a91c8d4 และเริ่มตัวนับที่ 12,345
- เวลาประทับในรูปเลขฐานสิบหก:
6553f100 - ค่าสุ่มในรูปเลขฐานสิบหก:
3f2a91c8d4 - ตัวนับในรูปเลขฐานสิบหก:
003039
เมื่อนำค่าทั้งหมดมาต่อกัน จะได้ ObjectID ค่าแรก:
6553f1003f2a91c8d4003039
หากโปรแกรมสร้าง ObjectID ค่าที่สองภายในวินาทีเดียวกัน เวลาประทับและค่าสุ่มจะยังเหมือนเดิม แต่ตัวนับจะเพิ่มเป็น 12,346 (00303a):
6553f1003f2a91c8d400303a
การอ่าน ObjectID ก็ทำย้อนกลับได้เช่นกัน จาก 507f1f77bcf86cd799439011 อักขระแปดตัวแรก 8 คือ 507f1f77 ซึ่งถอดรหัสเป็น 1,350,508,407 วินาทีนับตั้งแต่ยุค Unix หรือ 17 ตุลาคม ค.ศ. 2012 เวลา 21:13:27 UTC
การใช้งานทั่วไปของ ObjectID ใน MongoDB
- คีย์หลัก MongoDB จะใส่ ObjectID ลงในฟิลด์
_idของเอกสารโดยอัตโนมัติ เว้นแต่จะระบุค่าอื่น - การค้นหาตามเวลาสร้าง เนื่องจากมีเวลาประทับฝังอยู่ในค่า โปรแกรมจึงอ่านเวลาสร้างโดยประมาณของเอกสารได้โดยไม่ต้องมีฟิลด์วันที่แยกต่างหาก
- การเรียงตามลำดับการแทรก การเรียงเอกสารตาม
_idจะเรียงตามเวลาสร้างได้โดยประมาณ เนื่องจากเวลาประทับอยู่ที่ต้นค่าดังกล่าว - ข้อมูลทดสอบและข้อมูลจำลอง นักพัฒนาใช้ ObjectID ที่สร้างขึ้นเพื่อสร้างเอกสารตัวอย่างหรือการทดสอบอัตโนมัติโดยไม่ต้องเปิดใช้งานฐานข้อมูล
ObjectID ของ MongoDB เทียบกับ UUID
UUID (ตัวระบุที่ไม่ซ้ำกันสากล) คือค่าขนาด 16 ไบต์ ซึ่งใหญ่กว่า ObjectID สี่ไบต์ โดยทั่วไป UUID มาตรฐานจะสุ่มตลอดทั้งค่า จึงไม่เปิดเผยเวลาสร้างและไม่เรียงตามลำดับการสร้าง ObjectID สั้นกว่าและเรียงตามเวลาได้โดยประมาณ ซึ่งเป็นเหตุผลหนึ่งที่ MongoDB ใช้เป็นค่าเริ่มต้น แม้จะไม่ได้ให้หลักประกันความไม่ซ้ำกันอย่างเป็นทางการในระดับเดียวกับ UUID ที่สร้างอย่างถูกต้อง
คำถามที่พบบ่อย
MongoDB ObjectID ใช้ทำอะไร
เป็นค่าเริ่มต้นที่ MongoDB ใส่ในฟิลด์ _id ของเอกสาร ทำให้เอกสารทุกฉบับมีคีย์ที่ไม่ซ้ำกันโดยไม่ต้องตั้งค่าเพิ่มเติม
MongoDB ObjectID รับประกันว่าไม่ซ้ำกันหรือไม่ ไม่ใช่ในความหมายทางคณิตศาสตร์อย่างเป็นทางการ แต่โอกาสชนกันนั้นต่ำมาก ObjectID สองค่าจะต้องมีค่าสุ่มและตำแหน่งตัวนับเดียวกันภายในวินาทีเดียวกัน ซึ่งโดยปกติจะเกิดได้เฉพาะภายในกระบวนการเดียว
อ่านวันที่สร้างจาก ObjectID ได้หรือไม่ ได้ อักขระเลขฐานสิบหก 8 ตัวแรก ซึ่งเท่ากับ 4 ไบต์ จะเก็บจำนวนวินาทีนับตั้งแต่ยุค Unix เมื่อนำจำนวนนั้นไปแปลงเป็นวันที่ ก็จะได้เวลาสร้างโดยประมาณ
ตัวสร้างนี้สร้าง ObjectID ได้ครั้งละกี่ค่า ตั้งแต่ 1 ถึง 100 ค่าต่อชุด ObjectID ทุกค่าในชุดเดียวกันใช้ค่าสุ่มระดับกระบวนการเดียวกัน และแต่ละค่าจะมีตัวนับสูงกว่าค่าก่อนหน้าหนึ่ง
นำ MongoDB ObjectID ไปใช้นอก MongoDB ได้หรือไม่ ได้ เนื่องจากเป็นเพียงค่าขนาด 12 ไบต์ที่เข้ารหัสเป็นข้อความเลขฐานสิบหก จึงใช้เป็น ID ที่ไม่ซ้ำกันในระบบอื่นได้เช่นกัน แม้รูปแบบ ID ของฐานข้อมูลนั้นเองอาจเหมาะกับความต้องการมากกว่า
ตัวสร้างนี้เชื่อมต่อกับฐานข้อมูล MongoDB จริงหรือไม่ ไม่ เครื่องมือนี้ทำงานทั้งหมดในเบราว์เซอร์ และไม่อ่านหรือเขียนข้อมูลไปยังฐานข้อมูลใด
เอกสารอ้างอิง
- "ObjectId." คู่มือ MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." ข้อกำหนด BSON ของ MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." ข้อกำหนด BSON, https://bsonspec.org/spec.html.