MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tại sao các tên khóa được lưu trữ trong tài liệu trong MongodDB

Những gì bạn đang đề cập đến thường được gọi là "nén khóa" *. Có một số lý do khiến nó không được triển khai:

  1. Nếu muốn, bạn hiện có thể thực hiện ở cấp Ứng dụng / ORM / ODM khá dễ dàng.
  2. Nó không nhất thiết là một lợi thế về hiệu suất ** trong mọi trường hợp - hãy nghĩ rằng các bộ sưu tập có nhiều tên khóa và / hoặc tên khóa khác nhau giữa các tài liệu.
  3. Nó có thể hoàn toàn không mang lại lợi thế về hiệu suất có thể đo lường ** cho đến khi bạn có hàng triệu tài liệu.
  4. Nếu máy chủ làm điều đó, các tên khóa đầy đủ vẫn phải được truyền qua mạng.
  5. Nếu các tên khóa nén được truyền qua mạng, thì khả năng đọc thực sự gặp khó khăn khi sử dụng bảng điều khiển javascript.
  6. Nén toàn bộ tài liệu JSON có thể cung cấp mang lại lợi thế về hiệu suất thậm chí còn tốt hơn.

Giống như tất cả các tính năng, có một phân tích lợi ích chi phí để triển khai nó và (ít nhất là cho đến nay) các tính năng khác đã cung cấp nhiều "hiệu quả hơn".

Nén toàn bộ tài liệu [đang được xem xét] [1] cho phiên bản MongoDB trong tương lai. có sẵn kể từ phiên bản 3.0 (xem bên dưới)

* Bảng tra cứu trong bộ nhớ cho các tên khóa về cơ bản là một trường hợp đặc biệt của nén kiểu LZW - đó ít nhiều là điều mà hầu hết các thuật toán nén thực hiện.

** Tính năng nén mang lại lợi thế về không gian và lợi thế về hiệu suất. Tài liệu nhỏ hơn có nghĩa là có thể đọc nhiều tài liệu hơn trên mỗi IO, có nghĩa là trong một hệ thống có IO cố định, có thể đọc nhiều tài liệu hơn mỗi giây.

Cập nhật

MongoDB phiên bản 3.0 trở lên hiện có khả năng nén tài liệu đầy đủ với WiredTiger công cụ lưu trữ.

Hai thuật toán nén có sẵn: snappy zlib . Mục đích là để snappy trở thành lựa chọn tốt nhất cho hiệu suất toàn diện và zlib là lựa chọn tốt nhất cho dung lượng lưu trữ tối đa.

Trong thử nghiệm cá nhân của tôi (không khoa học, nhưng liên quan đến một dự án thương mại), nén nhanh (chúng tôi không đánh giá zlib) đã cung cấp mật độ lưu trữ được cải thiện đáng kể mà không có chi phí hiệu suất ròng đáng chú ý. Trên thực tế, trong một số trường hợp, có hiệu suất tốt hơn một chút, gần giống với những nhận xét / dự đoán trước đây của tôi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose và giản đồ mới:trả về ReferenceError:Schema không được xác định

  2. Nhập / xuất MongoDB bằng Node.js

  3. Làm cách nào để tạo ngày truy vấn trong mongodb bằng pymongo?

  4. truy vấn một bộ sưu tập mà không chuyển lược đồ trong mongoose

  5. Sắp xếp mảng trong tài liệu với MongoDB