Bạn chính xác nhận thấy rằng các tài liệu sẽ có kích thước khác nhau. Vì vậy, bạn sẽ tiết kiệm ít nhất 15 bytes
mỗi tài liệu (60%
cho các tài liệu tương tự) nếu bạn quyết định áp dụng giản đồ thứ hai. Điều này sẽ kết thúc bằng một cái gì đó giống như 140MB
cho 10 million
của bạn Hồ sơ. Điều này sẽ mang lại cho bạn lợi thế sau:
- Tiết kiệm ổ cứng. Vấn đề duy nhất là nhìn vào giá của ổ cứng HDD hiện tại, điều này gần như vô dụng.
- Tiết kiệm RAM. So với đĩa cứng, điều này có thể hữu ích cho việc lập chỉ mục. Trong mongodb tập hợp làm việc của các chỉ mục phải phù hợp với RAM để đạt được hiệu quả hiệu suất
. Vì vậy, nếu bạn có chỉ mục trên hai trường này, bạn sẽ không chỉ tiết kiệm được
140MB
dung lượng ổ cứng mà còn140MB
dung lượng RAM tiềm năng (thực sự đáng chú ý). - I / O . Rất nhiều tắc nghẽn xảy ra do giới hạn của hệ thống đầu vào / đầu ra (tốc độ đọc / ghi từ đĩa bị hạn chế). Đối với tài liệu của bạn, điều này có nghĩa là với giản đồ 2, bạn có thể đọc / ghi
twice as many documents
mỗi 1 giây. - mạng . Trong nhiều trường hợp, mạng thậm chí còn chậm hơn so với IO, và nếu máy chủ DB của bạn ở trên máy khác thì máy chủ ứng dụng của bạn, dữ liệu phải được gửi qua dây. Và bạn cũng sẽ có thể gửi gấp đôi dữ liệu.
Sau khi kể về những ưu điểm, tôi phải cho bạn biết một nhược điểm đối với một chiếc chìa khóa nhỏ:
- khả năng đọc của cơ sở dữ liệu. Khi bạn thực hiện
db.coll.findOne()
và thấy{_id: 1, t: 13423, a: 3, b:0.2}
khá khó để hiểu chính xác những gì được lưu trữ ở đây. - khả năng đọc của ứng dụng tương tự với cơ sở dữ liệu, nhưng ít nhất ở đây bạn có thể có một giải pháp. Với một logic ánh xạ, biến đổi
currentDate
thànhc
vàprice
thànhp
bạn có thể viết một mã rõ ràng và có một giản đồ ngắn gọn.