Chúng tôi có bộ sưu tập MongoDB với gần 40 triệu bản ghi. Kích thước hiện tại của bộ sưu tập là 5GB. Dữ liệu được lưu trữ trong bộ sưu tập này chứa các trường sau:
_id: "Id MongoDB"
userid: "id người dùng" (int)
mobile: "số điện thoại di động của người dùng" (int)
giao dịch: "id giao dịch" (int)
sms: "tin nhắn đã gửi tới điện thoại di động của người dùng" (văn bản)
create_dt: "dấu thời gian unix của giao dịch"
Ngoài chỉ mục trên _id (được tạo theo mặc định), chúng tôi cũng xác định các chỉ mục riêng biệt trên các trường chuyển động và giao dịch.
Tuy nhiên, truy vấn sau sẽ mất từ 60 đến 120 giây để hoàn thành:
{
di động:
}
Tôi sử dụng RockMongo để truy cập MongoDB. MongoDB được lưu trữ trên máy chủ có RAM 16GB. Gần 8GB RAM miễn phí trên máy chủ này.
Tôi đang làm gì sai ở đây?
gia hạn:
Đầu ra được giải thích:
{
"con trỏ" : "Con trỏ cơ bản",
"đã quét" : 37145516,
"nscannedObject" : 37145516,
"n" : 37145516,
"millis" : 296040,
"nYield" : 1343,
"nChunkSkips" : 0,
"isMultiKey" : sai,
"indexOnly": sai,
"indexBound" : {
}
}
Đầu ra Mongostat khi truy vấn
chèn truy vấn cập nhật xóa lệnh getmore xóa các lỗi đã ánh xạ so với kích thước res đã bị khóa % idx miss % qr|qw ar|aw netIn netOut conn time
13 2 0 0 0 1 0 168g 336g 6,86g 1 1 0 0|0 1|0 21k 1k 19 11:30:04
16 0 0 0 0 1 0 168g 336g 6,88g 0 0,1 0 0|0 1|0 21k 1k 19 11:30:05
14 0 0 0 0 1 0 168g 336g 6,86g 0 0 0 0|0 1|0 29k 1k 19 11:30:06
10 0 0 0 0 1 0 168g 336g 6,86g 0 0 0 0|0 1|0 19k 1k 19 11:30:07
16 0 0 0 0 1 0 168g 336g 6,88g 0 0,1 0 0|0 1|0 21k 1k 19 11:30:08
9 0 0 0 0 1 0 168g 336g 6,89g 0 0 0 0|0 1|0 13k 1k 19 11:30:09
19 0 0 0 0 1 0 168g 336g 6,89g 0 0 0 0|0 1|0 27k 1k 19 11:30:10
12 0 0 0 0 1 0 168g 336g 6,89g 1 1,2 0 0|0 1|0 24k 1k 19 11:30:11
17 0 0 0 0 1 0 168g 336g 6,89g 1 1,7 0 0|0 1|0 31k 1k 19 11:30:12
15 0 0 0 0 1 0 168g 336g 6,89g 0 0 0 0|0 1|0 19k 1k 19 11:30:13
更新 2:
Cho đến gần đây, chúng ta đã quen với việc lưu trữ một bộ sưu tập khác gồm khoảng 1,3 tỷ tài liệu trong cùng một máy chủ MongoDB. Bộ sưu tập này hiện đã bị xóa (loại bỏ). Điều này có thể giải thích cột được ánh xạ/vsize trong đầu ra mongostat ở trên.
Máy chủ cũng lưu trữ sáu bộ sưu tập được chèn thường xuyên khác. Tổng dung lượng lưu trữ hiện tại là khoảng 35GB.
Cập nhật 3:
Chỉ mục được xác định trên bộ sưu tập. Được tạo bằng RockMongo.
[
{
"v" : 1,
"chìa khóa" : {
"_id" : 1
},
"ns" : "mymongodb.transaction_sms_details",
"tên" : "_id_"
},
{
"v" : 1,
"chìa khóa" : {
"_transaction_mobile_" : 1
},
"ns" : "mymongodb.transaction_sms_details",
"nền" : 1,
"tên" : "di động"
},
{
"v" : 1,
"chìa khóa" : {
"_transaction_transaction_" : 1
},
"ns" : "mymongodb.transaction_sms_details",
"nền" : 1,
"tên" : "giao dịch"
}
]
Khóa do RockMongo tạo rõ ràng là không chính xác.
"_transaction_mobile_" : 1
"_transaction_transtion_" : 1
Tôi không biết RockMongo có vấn đề gì, nhưng tôi nghĩ điều này sẽ có tác dụng:
db.xxx.dropIndexes();
db.xxx.ensureIndex({mobile: 1});
db.xxx.ensureIndex({giao dịch: 1});
Lưu ý: Việc này có thể mất nhiều thời gian. Đừng làm điều này trên một máy sản xuất đang chạy.
Tôi là một lập trình viên xuất sắc, rất giỏi!