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

Tăng giới hạn bộ nhớ cho các công việc tổng hợp mongodb

Chà, không có cài đặt nào cả và nếu bạn thực sự nghĩ về nó thì đó là lý do chính đáng cho việc này. Vì vậy, nếu trước tiên bạn xem xét tổng hợp đang làm gì và MongoDB làm gì nói chung thì điều đó sẽ trở nên rõ ràng.

Đây là điều "nên" ở "đầu" của bất kỳ quy trình tổng hợp hợp lý nào:

db.collection.aggregate([
    { "$match:{ /* Something here */ } },

Và đây là những lý do:

  1. Nó có ý nghĩa tốt để thử để giảm nhóm làm việc mà bạn đang vận hành trong bất kỳ hoạt động.

  2. Đây cũng là duy nhất khi bạn có cơ hội sử dụng chỉ mục để hỗ trợ tìm kiếm lựa chọn. Cái nào luôn luôn tốt hơn quét bộ sưu tập.

  3. Mặc dù có một "trình tối ưu hóa" được tích hợp sẵn tìm kiếm những thứ như "phép chiếu" giới hạn các trường "đã chọn", người giám sát tốt nhất về kích thước tập hợp làm việc là chỉ làm việc trên các hồ sơ hợp lệ. Các trận đấu ở giai đoạn sau không được "tối ưu hóa" theo cách này. (Xem điểm 1 )

Điều tiếp theo cần xem xét là hành vi chung của MongoDB. Vì vậy, quá trình máy chủ muốn để làm, là "tiêu thụ" như nhiều của bộ nhớ máy khả dụng để giữ dữ liệu "nhóm làm việc" (bộ sưu tập và / hoặc chỉ mục) để "hoạt động" trên dữ liệu đó bằng phương tiện hiệu quả nhất .

Vì vậy, nó thực sự là "lợi ích tốt nhất" của công cụ cơ sở dữ liệu để "chi tiêu" hầu hết phân bổ bộ nhớ của nó theo cách này. Theo cách đó, cả "tổng hợp" của bạn công việc và tất cả khác các quy trình đồng thời có quyền truy cập vào "dữ liệu làm việc" trong không gian bộ nhớ.

Vì vậy, do đó nó là "không tối ưu" để MongoDB "ăn cắp" phân bổ bộ nhớ này khỏi các hoạt động đồng thời khác chỉ để phục vụ hoạt động tổng hợp đang chạy của bạn.

Trong phần "lập trình theo yêu cầu phần cứng" , bạn cũng biết rằng các bản phát hành trong tương lai cho phép đường ống tổng hợp thực hiện "sử dụng đĩa" để cho phép xử lý lớn hơn. Bạn luôn có thể triển khai SSD hoặc nhanh khác công nghệ lưu trữ. Và tất nhiên "10%" của RAM phụ thuộc vào dung lượng RAM được cài đặt trong hệ thống. Vì vậy, bạn luôn có thể tăng điều đó.

Tổng hợp của điều này là, MongoDB có một công việc thực tế trở thành "kho dữ liệu đồng thời" và làm tốt điều đó. Điều gì không là một cụ thể "tổng hợp người chạy việc "và không nên được đối xử như vậy.

Vì vậy, hoặc "chia tay" khối lượng công việc của bạn hoặc tăng thông số phần cứng của bạn hoặc chỉ cần chuyển hoạt động lớn "đang chạy tác vụ" sang hoạt động nào đó thực hiện tập trung vào công việc đang chạy, chẳng hạn như kiểu Hadoop "mapReduce" và để MongoDB làm công việc cung cấp dữ liệu.

Hoặc tất nhiên, thay đổi thiết kế của bạn thành "tổng hợp trước" dữ liệu bắt buộc ở đâu đó "đang ghi" .

Như câu nói, "Ngựa cho các khóa học" hoặc sử dụng các công cụ của bạn cho những gì chúng được thiết kế cho .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tìm thời gian thao tác cập nhật / chèn / xóa lần cuối trên bộ sưu tập mongodb mà không có trường objectid

  2. Bắt các hàng trùng lặp ở bên trái tham gia vào báo cáo Birt

  3. Sắp xếp mảng đối tượng lồng nhau

  4. Không thể lấy thuộc tính từ đối tượng mongoose

  5. Làm cách nào để xuất bộ sưu tập sang CSV trong MongoDB?