[英]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.