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

Xây dựng chỉ mục lớn MongoDB rất chậm

Quan niệm sai lầm

Tốc độ

Ngay cả khi không nói về một chỉ mục đa khóa, đây là những gì sẽ xảy ra. Có một cuộc quét bảng lớn đang diễn ra. Vì vậy, mongoDB lặp lại các tài liệu, cố gắng tìm trường được lập chỉ mục, đánh giá trường đó (thành null nếu nó không tồn tại trong tài liệu hiện tại) và ghi những phát hiện của nó vào không ít hơn 6 tệp như chúng ta đang nói về 6 chỉ số. Làm phép toán:200.000.000 / 86400 * 5 cho chúng ta biết rằng mongoDB thực hiện điều này với khoảng 460 tài liệu mỗi giây hoặc chỉ cần 2,2 mili giây trên mỗi tài liệu . Tôi sẽ không gọi là chậm. Có thể mất nhiều thời gian, nhưng không hề chậm.

{background:true}

Sử dụng tham số này không khóa bạn khỏi cơ sở dữ liệu. Hoàn toàn ngược lại, được nêu rõ trong tài liệu, cả trên Phần tạo chỉ mục và trong phần ​​hướng dẫn về cách tạo chỉ số trong nền . Tuy nhiên, có một câu có thể dễ bị hiểu sai:

Điều đó có nghĩa là bạn không thể thực hiện các thao tác áp dụng cho tất cả các cơ sở dữ liệu yêu cầu khóa đọc hoặc ghi.

Cách cải thiện (trong tương lai)

Cụm được chia nhỏ

Sử dụng một cụm được chia sẻ với các phân đoạn tập hợp bản sao. Nó rất dễ cài đặt và có nhiều ưu điểm bên cạnh hiệu suất được cải thiện. Một trong số đó là khả năng mở rộng dễ dàng thêm một phân đoạn (và do đó thêm không gian và sức mạnh tính toán vào một cụm) là rất dễ. Các bản sao lưu ít ảnh hưởng đến ứng dụng hơn. Không còn một điểm lỗi nào nữa (khi được thực hiện đúng, điều này thậm chí còn áp dụng cho các trường hợp ngừng hoạt động ở quy mô của toàn bộ trung tâm dữ liệu).

Sử dụng hệ thống tệp khác

Xin lỗi, việc chạy ứng dụng phụ thuộc vào hiệu suất ổ đĩa trên Windows Server không có ý nghĩa gì đối với tôi - chút nào. ExtFS4 hoặc XFS nhanh hơn NTFS hoặc ReFS từ 25% đến 40%, tùy thuộc vào mức tối ưu hóa. Điều này làm cho một thực tế sự khác biệt trên các ứng dụng phụ thuộc vào IO đĩa như trường hợp sử dụng của bạn. Chúng ta đang nói về vấn đề ngày (thậm chí còn chưa tính đến việc ánh xạ bộ nhớ hiệu quả hơn và giảm mức tiêu thụ bộ nhớ của HĐH trên hệ thống Linux).

{background:true}

Mặc dù điều này không thực sự cải thiện hiệu suất (thực sự xây dựng chỉ số trong nền mất nhiều thời gian hơn ở nền trước vì những lý do rõ ràng), ứng dụng của bạn vẫn có sẵn trong thời gian chỉ mục được xây dựng. Vì vậy, tùy thuộc vào nhu cầu của bạn, đây có thể là một lựa chọn khả thi.

Ghi chú bên lề :Đó là một Ý tưởng tồi ™ , để chia tỷ lệ theo chiều dọc khi sử dụng mongoDB vì nó được thiết kế rõ ràng để chia tỷ lệ theo chiều ngang. Điều này đặc biệt áp dụng cho các bộ sưu tập lớn như của bạn vì xử lý song song sẽ cải thiện đáng kể hiệu suất của ứng dụng của bạn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Vấn đề về Node + Mongodb + ISODate + Múi giờ

  2. Tổng hợp Mongodb $ group, giới hạn độ dài của mảng

  3. Làm cách nào để lấy dữ liệu từ MongoDB sang mảng đơn giản bằng Node.JS và Mongoose?

  4. Tổng hợp Mongo so với Java cho vòng lặp và hiệu suất

  5. MongoDB làm nhà cung cấp tệp tĩnh?