我在MLab的M2示例上有一个Mongo v3.4 DB,在一个专用服务器上有3.5 GB RAM。
我有500,000个文档存储tweet,tweet的主体在一个字符串字段中,我在那个字段上有一个$text索引。
当我查询该字段时,可能需要几秒钟到两分钟多的时间。
[{
"$match": {
"$text": {
"$search": "game losing"
}
}
},
{
"$sort": {
"score": {
"$meta": "textScore"
}
}
},
{
"$limit": 10
}]
我已审核以下帖子:
- Mongodb text search for large collection
- MongoDB Text Search on Large Dataset
- Improving MongoDB Text Search Performance
并且已经整合了对它们的回应,但我的表现仍然很差。
我确实会根据任何新的统计数据更新推文(比如,推文的点赞数上升了)。
- Mongo文本搜索不是为50万以上的文档设计的吗?
- 这只是一个试点,可能会增长到数百万条推文。我应该直接切换到ElasticSearch吗?
- 我应该使用不同的策略吗?我应该将统计数据与消息文档分开存储吗?
1条答案
按热度按时间eoigrqb61#
MongoDB是专门为处理数百万个文档而设计的,500K是一个非常小的数据集。
我认为你在客户端同时加载了所有的数据(当用户搜索该项目时),并将其分页。这导致了服务器超时。因为数据也可以是如此巨大。
您可以在此执行以下操作:使用
Aggeration Framework
。限制从Atlas服务器发送的数据数量。请参阅此处的文档:https://docs.mongodb.com/manual/aggregation/
请参见该文档中的
Examples
。:)