我正在使用 mongodb 来持久化一个非常大的(90G),它有近 40,000,000 个项目。我读取并解析这个文件并将所有项目插入到 mongodb(我的编程语言是 perl,batch_insert,我将一个项目映射到一个 mongodb 文档)。
在插入之前,我已经预先创建了索引(大约 10 个索引键)。我发现插入速度不能满足我的需要(每秒 200 到 400 个项目)。我知道太多的索引键肯定会减慢我的插入速度,尤其是当集合的大小变得很大时。所以我想知道我是否可以在将所有数据转储到 db 后索引它们。
谁能告诉我这种方式是否可用,是否绝对可以节省我的时间?
是的,您可以在导入后对它们进行索引(然后_id集合中将只有默认索引)。这也是推荐的,因为结果索引将更紧凑和更有效(出于类似的原因,如果您负担得起,最好使用前景与背景索引)。不过这需要一些时间才能完成,尤其是要构建 10 个索引。
要在导入后构建,只需在导入完成之前不要定义任何索引,然后使用ensureIndex()命令创建所需的索引(通常需要注意的是,此类索引创建将是资源密集型的)。想要查询更多的信息:
http://docs.mongodb.org/manual/core/index-creation/