Chuyển đến nội dung

Trình tạo MongoDB ObjectID - Tạo Định danh BSON Duy nhất

Tạo ngay các ObjectID MongoDB duy nhất với công cụ trực tuyến miễn phí của chúng tôi. Tạo các định danh BSON 12 byte hợp lệ để kiểm tra, phát triển và thao tác cơ sở dữ liệu. Không cần cài đặt.

Trình tạo ID đối tượng MongoDB

Máy tính tải...
📚

Tài liệu hướng dẫn

ObjectID của MongoDB là gì?

ObjectID của MongoDB là một giá trị 12 byte mà MongoDB mặc định gán cho trường _id của mọi tài liệu. Giá trị này được viết bằng 24 ký tự thập lục phân viết thường, chẳng hạn như 507f1f77bcf86cd799439011. Công cụ này tạo từ 1 đến 100 ObjectID hợp lệ mỗi lần, trực tiếp trong trình duyệt và không cần kết nối cơ sở dữ liệu.

Cấu trúc ObjectID của MongoDB

Một ObjectID được tạo từ ba phần, đặt nối tiếp nhau:

  • Dấu thời gian (4 byte). Số giây kể từ 1 tháng 1, 1970 (kỷ nguyên Unix), được lưu dưới dạng số không dấu, theo thứ tự byte lớn. Nó ghi lại thời điểm ObjectID được tạo. Bốn byte chứa các giá trị từ 0 đến 4.294.967.295, vì vậy trường này quay lại 0 sau 7 tháng 2, 2106, 06:28:15 UTC.
  • Giá trị ngẫu nhiên (5 byte). Một số được chọn ngẫu nhiên một lần khi chương trình khởi động. Mọi ObjectID mà chương trình đó tạo sau đó đều dùng lại cùng giá trị ngẫu nhiên, nên các máy tính khác nhau không cần phối hợp với nhau.
  • Bộ đếm (3 byte). Một số bắt đầu tại một điểm ngẫu nhiên trong khoảng từ 0 đến 16.777.215 và tăng thêm 1 cho mỗi ObjectID mới. Nếu vượt quá 16.777.215, nó quay lại 0.

Khi đặt các phần nối tiếp nhau, chúng có dạng như sau:

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

Các trình điều khiển MongoDB cũ tạo phần ở giữa từ mã định danh máy và mã định danh tiến trình thay vì một số ngẫu nhiên. Các trình điều khiển hiện tại, bao gồm cả logic đứng sau công cụ này, sử dụng một giá trị ngẫu nhiên dài 5 byte cho mỗi tiến trình.

Định dạng và công thức của ObjectID MongoDB

ObjectID không có công thức số học đứng sau, khác với phép tính phần trăm hoặc lãi suất. Nó được tạo bằng cách chuyển ba số thành văn bản thập lục phân rồi nối chúng lại:

  1. Lấy thời gian hiện tại tính bằng giây kể từ kỷ nguyên Unix, đưa về phạm vi từ 0 đến 4.294.967.295 để vừa trong bốn byte. Viết số đó dưới dạng số thập lục phân gồm 8 chữ số.
  2. Lấy giá trị ngẫu nhiên cố định của tiến trình, một số từ 0 đến 2^40 − 1. Viết số đó dưới dạng số thập lục phân gồm 10 chữ số.
  3. Lấy giá trị hiện tại của bộ đếm, từ 0 đến 16.777.215. Viết số đó dưới dạng số thập lục phân gồm 6 chữ số, sau đó tăng bộ đếm thêm 1 cho ID tiếp theo.
  4. Nối ba chuỗi thập lục phân theo đúng thứ tự đó thành một chuỗi gồm 24 ký tự.

Ví dụ minh họa

Giả sử một chương trình khởi động tại thời điểm Unix 1.700.000.000 giây, tương ứng với 14 tháng 11, 2023, 22:13:20 UTC. Chương trình chọn giá trị ngẫu nhiên 3f2a91c8d4 và bắt đầu bộ đếm tại 12.345.

  • Dấu thời gian ở dạng thập lục phân: 6553f100
  • Giá trị ngẫu nhiên ở dạng thập lục phân: 3f2a91c8d4
  • Bộ đếm ở dạng thập lục phân: 003039

Nối các phần này lại ta được ObjectID đầu tiên:

6553f1003f2a91c8d4003039

Nếu chương trình tạo ObjectID thứ hai trong cùng một giây, dấu thời gian và giá trị ngẫu nhiên vẫn giữ nguyên, nhưng bộ đếm tăng lên 12.346 (00303a):

6553f1003f2a91c8d400303a

Việc đọc một ObjectID cũng diễn ra theo chiều ngược lại. Với 507f1f77bcf86cd799439011, 8 ký tự đầu tiên là 507f1f77, giải mã thành 1.350.508.407 giây kể từ kỷ nguyên Unix, tương ứng với 17 tháng 10, 2012, 21:13:27 UTC.

Các cách sử dụng phổ biến của ObjectID MongoDB

  • Khóa chính. MongoDB tự động đặt một ObjectID vào trường _id của tài liệu, trừ khi có một giá trị khác được cung cấp.
  • Tra cứu thời điểm tạo. Vì dấu thời gian được tích hợp trong ObjectID, chương trình có thể đọc thời điểm tạo gần đúng của tài liệu mà không cần trường ngày riêng.
  • Sắp xếp theo thứ tự chèn. Sắp xếp tài liệu theo _id sẽ gần đúng với việc sắp xếp theo thời điểm tạo, vì dấu thời gian đứng đầu giá trị.
  • Dữ liệu kiểm thử và dữ liệu mô phỏng. Nhà phát triển dùng các ObjectID được tạo sẵn để xây dựng tài liệu mẫu hoặc các bài kiểm thử tự động mà không cần chạy cơ sở dữ liệu.

ObjectID MongoDB và UUID

UUID (Mã định danh duy nhất trên toàn cầu) là một giá trị 16 byte, lớn hơn ObjectID bốn byte. UUID tiêu chuẩn thường hoàn toàn ngẫu nhiên, nên không tiết lộ thời điểm tạo và không được sắp xếp theo thứ tự tạo. ObjectID ngắn hơn và gần như được sắp xếp theo thời gian, đây là một lý do MongoDB mặc định sử dụng nó, dù nó không có cùng mức bảo đảm duy nhất chính thức như UUID được tạo đúng cách.

Các câu hỏi thường gặp

ObjectID MongoDB được dùng để làm gì? Đó là giá trị mặc định mà MongoDB đặt vào trường _id của tài liệu, nhờ đó mọi tài liệu đều có một khóa duy nhất mà không cần thiết lập thêm.

ObjectID MongoDB có được bảo đảm là duy nhất không? Không theo nghĩa chính thức về mặt toán học, nhưng khả năng trùng là cực kỳ thấp. Hai ObjectID phải có cùng giá trị ngẫu nhiên và cùng vị trí bộ đếm trong cùng một giây; điều này thường chỉ xảy ra trong một tiến trình duy nhất.

Có thể đọc ngày tạo từ một ObjectID không? Có. 8 ký tự thập lục phân đầu tiên, tương ứng với 4 byte, chứa số giây kể từ kỷ nguyên Unix. Chuyển số đó thành ngày sẽ cho biết thời điểm tạo gần đúng.

Công cụ tạo này có thể tạo bao nhiêu ObjectID cùng lúc? Từ 1 đến 100 ObjectID mỗi lô. Mọi ID trong một lô đều dùng chung một giá trị ngẫu nhiên cấp tiến trình, và mỗi ID có bộ đếm cao hơn ID trước một đơn vị.

Có thể dùng ObjectID MongoDB bên ngoài MongoDB không? Có. Vì chúng chỉ là các giá trị dài 12 byte được mã hóa dưới dạng văn bản thập lục phân, chúng cũng có thể làm ID duy nhất trong các hệ thống khác, dù cơ chế ID riêng của cơ sở dữ liệu có thể phù hợp hơn với nhu cầu của hệ thống đó.

Công cụ tạo này có kết nối với cơ sở dữ liệu MongoDB thực không? Không. Công cụ chạy hoàn toàn trong trình duyệt và không đọc từ hoặc ghi vào bất kỳ cơ sở dữ liệu nào.

Tài liệu tham khảo

  1. "ObjectId." Sổ tay MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Đặc tả BSON của MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Đặc tả BSON, https://bsonspec.org/spec.html.