【问题标题】:Do mongoDB SystemIndexes vary with database contents, or are they static configuration?mongoDB SystemIndexes 是否随数据库内容而变化,还是它们是静态配置?
【发布时间】:2014-10-20 11:55:18
【问题描述】:

我们在 mongo 2.6 上使用全文搜索。为此,我们使用 db.ensureIndex 命令创建索引。然后我们保存这些系统索引,以便开发人员可以将具有适当索引的测试数据导入干净的数据库中。我们使用以下策略将全文搜索索引导入干净的数据库:

mongoimport -d krypton -c system.indexes --jsonArray --drop --file deploy/systemIndexes.js

systemIndexes.js 文件已使用 mongoexport 命令生成,如下所示:

[{ "v" : 1, "key" : { "_id" : 1 }, "name" : "id", "ns" : "krypton.finder" },{ "v" : 1, "key" : { "loc" : "2d" } ....

这些系统索引会随着文档添加到数据库而变化吗?我的猜测是不,他们不是,systemIndexes 代表静态配置(哪些列(哪些)集合被索引,等等。

我说的对吗?但是,如果我是正确的,mongo 在哪些文件中维护已经在或正在添加到数据库中的文档的实际索引?

我假设这些文件的大小会随着新文档添加到数据库中而增加。

欢迎所有提示或观点。 提前致谢!

【问题讨论】:

    标签: json mongodb file indexing system


    【解决方案1】:

    system.indexes 集合只包含索引定义。如果您只使用mongodump 转储集合,您将获得类似的输出,其中将有一个包含数据的BSON 文件和一个包含索引定义的元数据JSON 文件(我会推荐这种方法而不是通常使用mongoexport)。通过按照您的描述导出 system.indexes 集合,您基本上是手动执行此操作。

    当您将定义恢复到 system.indexes(手动或使用 mongorestore)时,只要您插入到 system.indexes,就会启动索引构建。如果有少量数据(或没有数据),那么这将很快完成,并且随着文档的添加,索引也会更新 - 对于大型数据集,这将花费大量时间。

    在存储方面,索引存储在数据文件中,而不是在其他地方的单独文件中 - 它们存储在这些文件中的单独范围中,但这不是暴露在数据库之外的东西。有一个长期存在的功能要求允许索引分开 (SERVER-965),但目前尚未计划实施。

    因此,如果您希望交付完整的索引,您还需要交付数据,它们不能单独交付。如果您想同时提供两者,那么您只需向开发人员提供数据库文件:dbname.ns、dbname.0、dbname.1、dbname.2 等。停止写入(为了保持一致性),将这些文件打包(或使用您选择的存档方法)并将它们提供给您的开发人员 - 每个数据库都可以被认为是独立的。

    【讨论】:

    • 非常感谢。这很有帮助。
    • 没问题 :) - 值得注意的是,MMS 备份服务(免费试用,正确使用付费,可作为本地解决方案提供)有效地为您执行此操作 - 每个数据库快照 (如果需要,可以在任意时间点创建)作为一组完整的数据文件(因此数据和索引)交付,并将有效地为您自动化整个过程:mms.mongodb.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多