MongoDB vs Columnar

时间:2012-03-06 14:35:14

标签: mongodb

当有多个用于查询的列组合时,MongoDB是否合适,因此在所有列上创建索引是不可行的?例如,当您在列上没有索引并且该列有数百万条目时,MongoDB如何执行?

1 个答案:

答案 0 :(得分:0)

如果没有索引,则执行表扫描,与任何数据库系统一样。

如果文档在内存中,这仍然会相对较快,但仍然会根据集合中的文档数量花费一定的时间,因为数据库必须查看每个文档。为O(n)

问题是每个文档都有一小组不同的密钥,或者每个文档必须包含大量的密钥?

面向列的数据存储必须存储大量列以模拟不同的属性,但由于文档数据模型,mongodb更灵活。

如果您的文档具有少量不同的属性(在一大组属性中),则这是可索引的,并且将为O(logn)。

您的文件如下所示:

{ 
  "name":"some name", 
  "attrs":[ 
    {"n":"subject","v":"the subject"}, 
    {"n":"description","v":"Some amazing description"}, 
    {"n":"comments","v":"Comments on this thing"}, 
  ] 
}

像这样索引:

db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})

并且可以这样查询:

db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "the subject"}}})