我有一个包含数百万条推文的MongoDB数据库,为了提高查询性能,我需要添加一个或多个额外的复合索引。字段中已有单独的索引将进入复合索引。在我添加这些索引之前,我想知道影响将是什么,短期(是否需要几天才能添加初始索引?)和长期(是否会使插入变得足够慢)它超过了加速查询的好处吗?)
这不是生产数据库 - 没有副本,没有分片。它存在于一个低端的Linux机器上,如果有的话,它不会运行太多。正如我所说,数以百万计的推文。相关字段是userid和tweeted_at(日期)。机器上有足够的可用空间,我没有任何地方可以放置我的数据库的副本,所以在副本上试一试并不是真的有用。我不指望确切的答案,只是一些指导。
答案 0 :(得分:2)
{background:true}
选项在后台创建索引。然而,这是一种非常糟糕的想法,因为它会大大减慢索引创建的速度mongos
- 我负载很重的MacBook Air,同时编译一个Spring应用程序)并在2个值上创建一个复合索引1M文档花了大约16秒。即使我们假设每个mongod
使用一个CPU并且处理是并行完成的,磁盘也是限制因素。我认为,假设我们宁愿谈的是几分钟而不是几小时,更不用说几天了。编辑:为了加快速度,你可能想要设置noatime
标志来重新安装相应的分区。
答案 1 :(得分:0)
您的数据库包含数百万条推文不一定是个问题。正如马库斯所说,它有可能使你的查询停止,特别是如果你没有分片。
我所经历的最重要的额外事情(使用10和100万条记录)并不是记录的数量和那些记录的大小一样多。当我处理超过一百万条记录的TB数据时,它比100亿条记录中的100GB数据要快得多。
实际里程数会有所不同,但我认为推文数据库的记录足够小,索引应该相对较短,并且不应该为文档创建添加有意义的时间。