我在mongodb文档中存储了诸如名称,作者,价格,出版商等书籍元数据.我有大约1000万份这些文件,它们都在一个集合中.平均文档大小为1.9 KB.现在我有索引name,authors和price.事实上,我有两个索引,价格一个按升序排列,一个降序排列.我的mongodb版本是2.2.0,我使用PHP驱动程序来查询mongo.驱动程序的版本是1.12.但是当我对价格进行范围查询时,我会得到一个MongoCursorTimeoutException.在我的查询中,我试图找到某个价格范围内的书籍,如"价格低于1000且超过500".
增加超时似乎不是一个好主意(它已经是30秒).还有什么我可以做的,以加快查询过程.
编辑
其实我的价格指数是复合的.我有,所以我的价格指数看起来像它有一个整数值的状态字段{price:-1,status:1}和{price:1,status:1}
我也是想在与PHP一次检索20个文档.
我们在使用传统和SSD EBS卷的EC2上使用单/共享服务器和专用副本集的Mongo集合拥有数百万个文档的大量经验.工作负载是多种多样的:一些是面向分析的,另一些是支持Web请求.这是我建议的根本原因分析路径:
运行查询.explain()以查看所使用的索引的进展情况等.如有必要,请调整索引.Mongo的优化器相当天真,所以如果你的索引与查询模式不完全匹配,它们可能会被遗漏.
检查MMS并查找以下任何问题:(1)并非内存中的所有数据(由页面错误指示)和(2)队列长度(通常表示某种类型的瓶颈).当并非所有数据都在内存中时,Mongo的性能会迅速下降,因为数据库只有一个全局锁定和触摸存储,特别是在云端是坏消息.我们最近升级到SSD云存储,我们看到数据库的性能提高了3-10倍,大小约为1/2 Tb.
将分析级别增加到2(最大值),运行一段时间并查看操作日志.请参阅MongoDB分析器.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
5600 次 |
| 最近记录: |