[英]Query running very slow on big MongoDB db
我有一個MongoDB數據庫,它具有一個相當大的文檔集合(13GB約200萬個文檔)坐在具有8GB RAM的單個服務器上。 每個文檔都有一個相對較大的文本字段(可以是整個博客文章),其他字段是有關文本內容和文本作者的數據。 架構如下所示:
{
text: "Last night there was a storm in San Francisco...",
author: {
name: "Firstname Lastname",
website_url: "http://..."
},
date: "201403075612",
language: "en",
concepts: [
{name: "WeatherConcept", hit: "storm", start: 23, stop: 28},
{name: "LocationConcept", hit: "San Francisco", start: 32, stop: 45}
],
location: "us",
coordinates: []
}
我打算以不同的方式查詢數據:
在“文本”字段上進行全文搜索。 假設我的文字搜尋查詢是q:
db.coll.aggregate([ { $match:{ $text: { $search:q } } } ])
按作者匯總文件:
db.coll.aggregate([ { $project: { name: "$author.name", url: "$author.website_url" } }, { $group: { _id: "$name", size: { $sum:1 }, url: { $first: "$url" } } }, { $sort:{ size:-1 } } ])
按概念匯總文檔:
db.coll.aggregate([ { $unwind: "$concepts" }, { $group: { _id: "$concepts.name", size: { $sum:1 } } }, { $sort:{ size:-1 } } ])
這三個查詢還可能包括對以下字段的過濾:日期,位置,坐標,語言,作者。
我還沒有索引,所以查詢運行非常慢。 但是由於索引對我訪問數據的不同方式會有很大不同,這是否排除索引作為解決方案? 還是有一種方法可以為所有這些情況建立索引,而不必將集合分片? 基本上我的問題是:
您的收藏夾上有索引嗎?
看看以下
http://docs.mongodb.org/manual/indexes/
如果您有索引,請執行以下操作以確保它們被命中
db.CollectionName.find({"Concept":"something"}).explain();
您還需要向我們提供有關您的設置的更多信息。 服務器有多少RAM? 我曾使用過一個MongoDB,該數據庫具有200GB的3個分區。 因此1上的13GB應該不是問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.