【发布时间】:2015-09-16 01:30:06
【问题描述】:
我有一个大表,其中的列是 user_id、user_feature_1、user_feature_2、....、user_feature_n
所以每一行对应一个用户和他或她的特征。
我通过将每列的值存储为数组来将此表存储在 MongoDB 中,例如
{
'name': 'user_feature_1',
'values': [
15,
10,
...
]
}
我正在使用 Meteor 从 MongoDB 中提取数据,这种存储方式有助于快速轻松地检索整个列的值以进行绘图。
但是,这种存储方式有一个很大的缺点;我无法存储大于 16mb 的数组。
有几个可能的解决方案,但似乎都不够好:
使用 gridFS 存储每列的值。我不确定meteor是否支持gridFS,并且它缺乏对数据切片的支持,也就是说,我可能只需要获取一列的前1000个值。
-
以面向行的格式存储表格。例如
{ 'user_id': 1, 'user_feature_1': 10, 'user_feature_2':0.9,
…… 'user_feature_n':42 }
但我认为这种存储数据的方式对于查询特征列的值来说效率低下
或者MongoDB根本不适合而sql是要走的路?但是Meteor不支持sql
更新 1: 我发现这篇关于 mongodb 中数组的有趣文章效率低下。 https://www.mongosoup.de/blog-entry/Storing-Large-Lists-In-MongoDB.html
以下解释来自http://bsonspec.org/spec.html
Array - 数组的文档是一个普通的 BSON 文档,键为整数值,从 0 开始并按顺序继续。例如,数组 ['red', 'blue'] 将被编码为文档 {'0': 'red', '1': 'blue'}。键必须按数字升序排列。
这意味着我们可以在一个文档中最多存储 100 万个值,如果值和键是浮点类型(16mb/128 位)
【问题讨论】:
-
“似乎足够好”,“我认为”,...性能不是关于感觉或意见,而是关于基准和配置文件。你的呢?