Php 查询1000万个mongodb文档
我在mongodb文档中存储书籍元数据,如姓名、作者、价格、出版商等。我有大约1000万份这样的文件,它们都在一个集合中。文档的平均大小为1.9KB。现在我有了Php 查询1000万个mongodb文档,php,mongodb,Php,Mongodb,我在mongodb文档中存储书籍元数据,如姓名、作者、价格、出版商等。我有大约1000万份这样的文件,它们都在一个集合中。文档的平均大小为1.9KB。现在我有了name、authors和price的索引。事实上,我有两个价格指数,一个是升序,一个是降序。我的mongodb版本是2.2.0,我正在使用php驱动程序查询mongo。驱动程序的版本是1.12。但当我对价格进行范围查询时,会得到一个MongoCorSortimeoutException。在我的查询中,我试图找到特定价格范围内的书籍,如“
name
、authors
和price
的索引。事实上,我有两个价格指数,一个是升序,一个是降序。我的mongodb版本是2.2.0,我正在使用php驱动程序查询mongo。驱动程序的版本是1.12。但当我对价格进行范围查询时,会得到一个MongoCorSortimeoutException
。在我的查询中,我试图找到特定价格范围内的书籍,如“价格低于1000和高于500”
增加超时时间似乎不是一个好主意(已经是30秒了)。我还能做些什么来加快查询过程吗
编辑
实际上我的价格指数是复合的。我有一个状态字段,它有一个整数值,所以我的价格指数看起来像{price:-1,status:1}
和{price:1,status:1}
我还试图用PHP一次检索20个文档
10英里。您还可以考虑在计算机之间共享数据。请记住,硬盘读取速度比cpu周期慢。我们在Mongo collections方面有很多经验,Mongo collections拥有数百万文档,使用单一/共享服务器和EC2上的专用副本集,使用传统卷和SSD EBS卷。工作负载是多种多样的:一些是面向分析的,另一些是支持Web请求的。以下是我建议的根本原因分析路径:
希望这有帮助。因为@JohnyHK说我的RAM太低了。因此,它增加到12GB,现在可以工作了。感谢大家的评论和回答memcached?这是18场演出,难怪。你安装了多少内存?@iccthedral我有8GB内存。但我的总索引大小约为6GB。所以我有足够的内存来保存我的索引,在价格上有单独的升序和降序索引是一种浪费。单字段索引的方向。移除其中一个以释放一些索引RAM。@JohnnyHK实际上我的价格指数是复合的。我有一个状态字段,它有一个整数值,所以我的价格指数看起来像
{price:-1,status:1}
和{price:1,status:1}
@lovesh OK;即使如此,也要确保使用explain
来确保这两个索引都被使用。无论如何,拥有6GB的索引和8GB的RAM感觉太紧了。我试图一次检索20个文档,所以limit
是20