MongoDB là một cơ sở dữ liệu NoSQL hoạt động với các bộ sưu tập và tài liệu. Mỗi tài liệu được tạo trên MongoDB có một thuộc tính ID đối tượng duy nhất. Vì vậy, khi tạo tài liệu mà không cần nhập ID, tài liệu sẽ được tạo bằng ID được tạo tự động
Ai tạo ID?
Khi điền thuộc tính của tài liệu, chúng ta không nhất thiết phải nhập ID đối tượng. Nhưng khi chúng ta tham khảo MongoDB sau khi tạo một tài liệu, nó sẽ có ID đối tượng giống như thế này
{
“_id”: “5f1819229fdf8a0c7c2d8c36”
}
Điều này giúp chúng tôi tạo tài liệu trong MongoDB dễ dàng hơn nhiều và tiết kiệm rất nhiều thời gian. ID đối tượng trong các tài liệu trong MongoDB được tạo bởi trình điều khiển MongoDB, nói chuyện với MongoDB. Vì vậy, điều này mang lại rất nhiều lợi thế
- Bạn không cần đợi MongoDB tạo mã định danh duy nhất mới
- Các ứng dụng của MongoDB có khả năng mở rộng cao
- Bạn có thể tạo một số phiên bản của MongoDB
- Không cần phải nói chuyện với một nơi trung tâm để có được một mã định danh duy nhất
Thuộc tính của ID đối tượng
ID đối tượng dài 24 ký tự với hai ký tự chiếm tối đa một byte, do đó chứa tổng cộng 12 byte. Đây là những gì 12 byte của ID đối tượng cho chúng ta biết
Dấu thời gian
Bốn byte đầu tiên của ID đối tượng biểu thị dấu thời gian khi tài liệu được tạo. Chúng tôi tránh phải tạo một thuộc tính riêng trong tài liệu, chẳng hạn như created-at
và do đó có thể tiết kiệm thời gian và có các dòng mã được tối ưu hóa
Do sự đóng góp của dấu thời gian cho ID đối tượng, chúng tôi có thể có được thời gian khi tài liệu được tạo bằng cách chỉ tham khảo ID. Do đó, khi truy vấn dữ liệu, chúng tôi không cần một phương pháp khác để sắp xếp tài liệu theo dấu thời gian
Bạn có thể lấy dấu thời gian của một đối tượng bằng cách sử dụng các lệnh sau
const mongoose = require['mongoose'];// Create object Id on memory
const id = new mongoose.Types.ObjectId[];// Get timestamp
console.log[id.getTimestamp[]];
mã định danh máy
Ba byte tiếp theo đại diện cho mã định danh máy [i. e. máy mà tài liệu được tạo trên đó]. Giả sử hai tài liệu được tạo cùng lúc trên các máy khác nhau. Ba byte này sẽ khác nhau, làm tăng thêm tính duy nhất của ID đối tượng
định danh quy trình
Hai byte tiếp theo đại diện cho định danh quy trình [i. e. quy trình trong máy mà tài liệu được tạo trên đó]. Giả sử hai tài liệu được tạo cùng lúc trên cùng một máy nhưng với các quy trình khác nhau. Hai byte này sẽ khác nhau, làm tăng thêm tính duy nhất của ID đối tượng
Phản đối
Ba byte cuối cùng đại diện cho một bộ đếm. Bộ đếm này là một số tăng tự động tương tự như các biến bộ đếm khác trong cơ sở dữ liệu SQL và NoSQL, làm cho ID đối tượng trở thành duy nhất [trong SQL, điều này có thể cản trở khả năng mở rộng]. Giả sử hai tài liệu được tạo cùng lúc trên cùng một máy và trên cùng một quy trình. Các byte bộ đếm sẽ khác nhau, góp phần tạo nên tính duy nhất của ID đối tượng
Vấn đề ID đối tượng
Trong MongoDB, một vấn đề phát sinh với bộ đếm trong ID đối tượng có thể hạn chế tính duy nhất của nó
ID đối tượng chỉ là duy nhất miễn là bộ đếm không tràn
Sự cố tràn bộ đếm xảy ra khi bộ đếm đã đạt đến công suất tối đa, dẫn đến các tài liệu có cùng ID đối tượng. Do đó, ID đối tượng gần như là duy nhất nhưng không phải là duy nhất 100%
Đây là lý do tại sao. Bộ đếm đang được phân bổ ba byte. Điều này có nghĩa là nó có khả năng đại diện cho tới 16 triệu số. Nếu nhiều tài liệu đó được tạo cùng lúc, trên cùng một máy và cùng một quy trình, thì hai tài liệu có thể chia sẻ cùng một ID đối tượng
Sử dụng Mongoose
Khi xây dựng ứng dụng bằng Node. js và Express. js, chúng tôi sử dụng cầy mangut. Mongoose là một sự trừu tượng hóa trên trình điều khiển MongoDB. Do đó, khi tạo tài liệu, cầy mangut sẽ nói chuyện với trình điều khiển MongoDB để tạo ID đối tượng mới
Tạo ID đối tượng
// create an object id on memory - Not on DB!const mongoose = require['mongoose'];const id = mongoose.Types.ObjectId[];
console.log[id];// output -> 5f1819229fdf8a0c7c2d8c36
Xác thực ID đối tượng
Với cầy mangut, bạn cũng có thể xác thực tĩnh ID đối tượng bằng cách sử dụng thuộc tính isValid
Phần kết luận
ID đối tượng MongoDB là duy nhất trừ khi đạt đến một kịch bản nhất định [đã thảo luận ở trên]. Do đó, với tư cách là nhà phát triển phần mềm, chúng ta nên xem xét quy mô và độ phức tạp của hệ thống để đánh đổi giữa ID được tạo tự động và ID đối tượng tùy chỉnh
Cách tiếp cận hoàn toàn do bạn quyết định. Để biết thêm thông tin về ID đối tượng MongoDB, bạn có thể tham khảo tài liệu chính thức của MongoDB và Mongoose
Tôi hy vọng câu chuyện này đã giáo dục bạn về tính duy nhất và độ tin cậy của ID đối tượng trong MongoDB. Hãy vui vẻ học tập và tận hưởng mã hóa