2015-06-09 29 views
13

Tôi đang sử dụng BulkWriteOperation (trình điều khiển java) để lưu trữ dữ liệu theo khối lớn. Lúc đầu nó có vẻ là làm việc tốt, nhưng khi bộ sưu tập phát triển về kích thước, các chèn có thể mất khá nhiều thời gian.Hiệu suất chèn hàng loạt trong MongoDB cho các bộ sưu tập lớn

Hiện tại đối với bộ sưu tập 20 triệu tài liệu, việc chèn hàng loạt 1000 tài liệu có thể mất khoảng 10 giây.

Có cách nào để làm cho chèn độc lập với kích thước bộ sưu tập không? Tôi không có bất kỳ cập nhật hoặc up ups nào, nó luôn là dữ liệu mới mà tôi đang chèn vào.

Đánh giá từ nhật ký, dường như không có bất kỳ sự cố nào với khóa. Mỗi tài liệu có một trường thời gian được lập chỉ mục, nhưng nó đang phát triển tuyến tính vì vậy tôi không thấy bất kỳ nhu cầu nào về mongo để dành thời gian tổ chức lại các chỉ mục.

Tôi muốn nghe một số ý tưởng để cải thiện hiệu suất

Cảm ơn

+0

Bạn đã từng nghĩ về việc sharding? Hiệu suất phụ thuộc vào rất nhiều tham số như kích thước tài liệu, dữ liệu ban đầu, hw, thiết lập cụm vv Ngoài ra kiểm tra xem có thể sử dụng mongoimport hay không. trong khi chèn inserto xác nhận đối tượng json, nếu tài liệu của bạn lớn thì việc xác nhận cũng sẽ mất thời gian và có thể cản trở hiệu năng trong những trường hợp như vậy, vô hiệu hóa việc xác nhận đó cũng có thể giúp, nhưng tăng sẽ nhỏ nếu tài liệu có kích thước nhỏ. –

+0

Hiệu suất khi bộ sưu tập có kích thước 2 triệu tài liệu là gì? Và các chỉ số nào được thiết lập trên bộ sưu tập, kích thước tài liệu mới trung bình là gì, phương tiện vật lý là gì và RAM của chính là gì? Ruột của tôi nói rằng một cơ sở hạ tầng quy mô nhỏ hơn bây giờ đã phải đối phó với một khối lượng công việc lớn hơn .... –

+0

Bạn đã cân nhắc viết số lượng lớn song song chưa? –

Trả lời

4

Bạn tin rằng việc lập chỉ mục không đòi hỏi bất kỳ document reorganisation và cách bạn mô tả chỉ số cho thấy rằng một right handed index là ok. Vì vậy, việc lập chỉ mục dường như bị loại trừ như một vấn đề. Bạn có thể tất nhiên - như đề nghị ở trên - dứt khoát cai trị này ra bằng cách thả chỉ số và chạy lại số lượng lớn của bạn viết.

Bên cạnh lập chỉ mục, tôi sẽ ...

  • Xem xét liệu đĩa của bạn có thể theo kịp với khối lượng dữ liệu bạn đang kiên trì. Thông tin chi tiết về vấn đề này trong Mongo docs
  • Sử dụng profiling để hiểu những gì đang xảy ra với viết của bạn
3
  1. Đừng có bất kỳ chỉ số trong bộ sưu tập của bạn? Nếu có, phải mất thời gian để xây dựng cây chỉ mục.
  2. là chuỗi thời gian dữ liệu? nếu có, hãy sử dụng các bản cập nhật nhiều hơn chèn. Vui lòng đọc blog này. Blog đề xuất các bản cập nhật tại chỗ hiệu quả hơn chèn (https://www.mongodb.com/blog/post/schema-design-for-time-series-data-in-mongodb)
  3. bạn có khả năng thiết lập các bộ sưu tập được phân bổ không? nếu có, nó sẽ làm giảm thời gian (thử nghiệm nó trong 3 máy chủ sharded với hồ sơ nhập geo 15million ip)
1
  • sử dụng đĩa & CPU: Kiểm tra việc sử dụng đĩa và CPU và xem nếu bất kỳ của các đang tối đa. Rõ ràng, nó phải là đĩa gây ra vấn đề này cho bạn.

  • Mongo log: Ngoài ra, nếu một truy vấn số lượng lớn 1000 đang diễn 10sec, sau đó kiểm tra các log Mongo nếu có bất kỳ vài chèn trong 1000 số lượng lớn được dành thời gian. Nếu có bất cứ thắc mắc như vậy, sau đó bạn có thể thu hẹp phân tích của bạn

Một điều đó là không rõ ràng là thứ tự của các truy vấn mà xảy ra trên dụ Mongo của bạn. Có chèn hoạt động duy nhất xảy ra hoặc có các truy vấn tìm kiếm khác chạy quá không?Nếu có, thì bạn nên xem xét mở rộng quy mô bất kỳ tài nguyên nào là tối đa.

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