2015-12-24 13 views
6

Ứng dụng Meteor của tôi có một tệp CSV, phân tích cú pháp nó với Baby Parse (Papa Parse cho máy chủ) và chèn dữ liệu vào bộ sưu tập MongoDB.Tại sao 24 MB dữ liệu CSV trở thành 230 MB trong bộ sưu tập MongoDB?

Mỗi hàng CSV được chèn dưới dạng tài liệu. Tệp CSV 24 MB chứa ~ 900.000 hàng; do đó, ~ 900.000 tài liệu trong bộ sưu tập. Mỗi tài liệu có 5 trường bao gồm id duy nhất của tài liệu.

Khi tôi sử dụng dataSize() để nhận kích thước bộ sưu tập, tôi nhận được số 230172976; nếu tôi không nhầm, con số này bằng byte; do đó nó là 230 MB.

Tại sao sự gia tăng khổng lồ này lại xảy ra? Làm thế nào tôi có thể sửa lỗi này?

+3

Vui lòng cung cấp các hàng mẫu để có giải thích rõ ràng. –

Trả lời

6

Điều này là do giá trị trả về theo số .dataSize() bao gồm các bản ghi padding. Cũng lưu ý rằng nếu tài liệu của bạn không có trường _id, nó sẽ được thêm vào và mỗi trường _id12-byte. Bạn có thể muốn đọc Record Allocation Strategies

Làm thế nào tôi có thể sửa lỗi này:

Sử dụng lệnh collMod với cờ noPadding hoặc db.createCollection() phương pháp với các tùy chọn noPadding. Nhưng bạn không nên làm điều đó bởi vì như đã đề cập trong documentation:

Chỉ thiết noPadding đến đúng đối với bộ sưu tập có khối lượng công việc không có hoạt động cập nhật các văn bản mà nguyên nhân phát triển, chẳng hạn như đối với các bộ sưu tập với khối lượng công việc được chèn -chỉ có.

Như Pete Garafano đã đề cập trong số comment bên dưới, điều này chỉ áp dụng cho MMAPv1 Storage Engine; đó là công cụ lưu trữ mặc định trong MongoDB 3.0 và tất cả các phiên bản trước đó.

MongoDB 3.2 sử dụng WiredTiger Storage Engine và bạn sẽ cần phải thay đổi công cụ lưu trữ mặc định để sử dụng tùy chọn đó trong configuration file hoặc sử dụng tùy chọn --storageEngine của mình.

+0

Điều quan trọng cần lưu ý là tùy chọn này chỉ áp dụng cho MMAPv1. Trong MongoDB 3.2, WiredTiger là bộ lưu trữ mặc địnhEngine. –

Các vấn đề liên quan