在mongodb上的大阵列的字段

时间:2017-11-23 17:04:47

标签: arrays mongodb performance mongoose gridfs

我是Mongo的初学者,我使用以下拓扑创建了数据库。

元数据的某些字段和包含实验结果的一个字段。 实验结果 - 具有~150,000值的整数向量

status = db.DataTest.insert_one(
    {
        "person_num" : num,
        "life_cycle" : cycle,
        "other_metadata" : meta_data,
        "results_of_experiment": big_array
    }
)

我插入了7500个这样的文件 它占用了8GB的内存,并且对于查找操作来说工作非常慢。

我不需要那些实验结果来搜索它们只能选择从数据库中检索它们作为数据块。 是否有另一种解决方案可以在DB上存储实验结果? 正在使用" gridfs"与此案有关并且不太复杂?

1 个答案:

答案 0 :(得分:0)

根据您的评论,最常见的查询是

db.DataTest.find( { "life_cycle": { $gt: 800 } }).limit(5)

如果life_cycle字段没有索引,MongoDB将被迫进行收集扫描。也就是说,获取&逐个评估您馆藏中的所有文件。在大型系列中,这需要很长时间。

MongoDB 自动创建索引。您必须观察最常见的查询,并创建索引以支持这些查询。据我所知,任何数据库软件都没有自动创建索引; SQL,NoSQL或其他。

数据库索引是一个深层次的主题,无法用简短的答案解释。

话虽如此,如果您在life_cycle字段上创建索引,它应该会改善您的查询时间,但仅限于您在上面发布的查询。其他查询类型可能需要不同的索引。您可以在mongo shell中执行此操作:

db.DataTest.createIndex({life_cycle: 1})

我建议您阅读这些页面以了解有关MongoDB索引的更多信息: