ข้ามไปยังเนื้อหา

เครื่องมือสร้าง 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 ไม่มีสูตรคำนวณทางคณิตศาสตร์อยู่เบื้องหลัง ต่างจากการคำนวณเปอร์เซ็นต์หรือดอกเบี้ย แต่สร้างขึ้นโดยแปลงตัวเลขสามค่าเป็นข้อความเลขฐานสิบหก แล้วนำมาต่อกัน:

  1. นำเวลาปัจจุบันในหน่วยวินาทีนับตั้งแต่ยุค Unix มาวนให้อยู่ในช่วง 0 ถึง 4,294,967,295 เพื่อให้พอดีกับสี่ไบต์ แล้วเขียนเป็นเลขฐานสิบหกจำนวน 8 หลัก
  2. นำค่าสุ่มคงที่ของกระบวนการ ซึ่งเป็นตัวเลขตั้งแต่ 0 ถึง 2^40 − 1 มาเขียนเป็นเลขฐานสิบหกจำนวน 10 หลัก
  3. นำค่าปัจจุบันของตัวนับ ซึ่งอยู่ระหว่าง 0 ถึง 16,777,215 มาเขียนเป็นเลขฐานสิบหกจำนวน 6 หลัก จากนั้นเพิ่มตัวนับขึ้น 1 สำหรับ ID ถัดไป
  4. นำสตริงเลขฐานสิบหกทั้งสามมาต่อกันตามลำดับให้เป็นสตริงยาว 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 จริงหรือไม่ ไม่ เครื่องมือนี้ทำงานทั้งหมดในเบราว์เซอร์ และไม่อ่านหรือเขียนข้อมูลไปยังฐานข้อมูลใด

เอกสารอ้างอิง

  1. "ObjectId." คู่มือ MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." ข้อกำหนด BSON ของ MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." ข้อกำหนด BSON, https://bsonspec.org/spec.html.