mongodb 上的大数组字段
A field with big array on mongodb
我是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内存,查找操作速度非常慢
我不需要那些实验结果来搜索它们 只需要将它们作为数据块从数据库中检索的选项。
是否有另一种解决方案可以将实验结果存储在数据库中?
使用 "gridfs" 是否与这种情况相关并且不太复杂?
根据您的评论,最常见的查询是
db.DataTest.find( { "life_cycle": { $gt: 800 } }).limit(5)
life_cycle
字段没有索引,MongoDB 被迫进行集合扫描。也就是说,逐一获取和评估您集合中的所有文档。在大型集合中,这将花费很长时间。
MongoDB 不会 自动创建索引。您将不得不观察最常见的查询,并创建索引来支持这些查询。据我所知,任何数据库软件都没有自动创建索引的功能; SQL、否SQL,否则。
数据库索引是一个很深的话题,不能用简短的回答来解释。
话虽如此,如果您在 life_cycle
字段上创建索引,它应该会改善您的查询时间 ,但仅限于您在上面发布的查询 。其他查询类型可能需要不同的索引。您可以在 mongo
shell:
db.DataTest.createIndex({life_cycle: 1})
我鼓励您阅读这些页面以了解有关 MongoDB 中的索引的更多信息:
我是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内存,查找操作速度非常慢
我不需要那些实验结果来搜索它们 只需要将它们作为数据块从数据库中检索的选项。 是否有另一种解决方案可以将实验结果存储在数据库中? 使用 "gridfs" 是否与这种情况相关并且不太复杂?
根据您的评论,最常见的查询是
db.DataTest.find( { "life_cycle": { $gt: 800 } }).limit(5)
life_cycle
字段没有索引,MongoDB 被迫进行集合扫描。也就是说,逐一获取和评估您集合中的所有文档。在大型集合中,这将花费很长时间。
MongoDB 不会 自动创建索引。您将不得不观察最常见的查询,并创建索引来支持这些查询。据我所知,任何数据库软件都没有自动创建索引的功能; SQL、否SQL,否则。
数据库索引是一个很深的话题,不能用简短的回答来解释。
话虽如此,如果您在 life_cycle
字段上创建索引,它应该会改善您的查询时间 ,但仅限于您在上面发布的查询 。其他查询类型可能需要不同的索引。您可以在 mongo
shell:
db.DataTest.createIndex({life_cycle: 1})
我鼓励您阅读这些页面以了解有关 MongoDB 中的索引的更多信息: