2016-11-23 15 views
6

Cần sự giúp đỡ của bạn trong những việc sau:MongoDB. Tại sao yêu cầu của chỉ mục được thực hiện chậm?

Tôi có bộ sưu tập MongoDB bao gồm hơn 26 triệu tài liệu. cấu trúc Document là hằng số (pastebin.com/iBzW0Fkz)

Bộ sưu tập bao gồm một chỉ mục trên các "người dùng"

db.conversations.getIndexes(); 

KẾT QUẢ - pastebin.com/xHecpw00

Mọi yêu cầu cho lĩnh vực " người dùng" được thực hiện rất chậm (hơn 100 ms)

db.getCollection('conversations').find({users: {$all: ["5942328", "9082468"]}}); 

GIẢI THÍCH - pastebin.com/0C11Cr9F

01.235.
db.getCollection('conversations').find({users: "9163099"}); 

GIẢI THÍCH - pastebin.com/CmvuDf10

Danh sách các câu hỏi sau:

  1. Tại sao yêu cầu của chỉ số được thực hiện rất chậm?
  2. Làm cách nào để làm ấm chỉ mục sau khi khởi động lại máy chủ hoặc quá trình mongodb? Lệnh Touch() không còn khả dụng trong công cụ WiredTiger nữa.

Dưới đây là một thông tin bổ sung

db.stats(); 

KẾT QUẢ - pastebin.com/9JZF8ChQ

db.getCollection('conversations').stats(); 

KẾT QUẢ - pastebin.com/17yV4Fsi

db.conversations.getIndexes(); 

KẾT QUẢ - pastebin .com/xHecpw00

.210

Thông tin về máy chủ:

lscpu - pastebin.com/k7wUE4gH

lshw Short - pastebin.com/w5XYuY3U

Có một giả định rằng đọc hoạt động từ HDD là một nút cổ chai và SSD có thể giải quyết vấn đề này, nhưng không có cơ hội để kiểm tra nó.

Xin cảm ơn trước.

Trả lời

0
  1. Tôi nghĩ rằng vấn đề là bạn có nhiều dữ liệu.
  2. Chỉ mục của bạn là trên trường mảng, không hiệu quả vì chỉ mục của bạn trở nên rất lớn khi MongoDB lập chỉ mục mỗi giá trị của mảng, vì vậy bạn có thể truy vấn cho từng mục.

Bạn có thể muốn xem xét sharding để chia dữ liệu của bạn trên nhiều trường hợp, nhưng lưu ý rằng bạn không thể chọn users field as shard key

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