在MongoDB中存储面向列的表以优化数据查询的最佳方式是什么
我有一个大表,其中的列是user\u id、user\u feature\u 1、user\u feature\u 2、…、user\u feature\u n 因此,每一行对应一个用户及其特征 我通过将每列的值存储为一个数组,将该表存储在MongoDB中,例如在MongoDB中存储面向列的表以优化数据查询的最佳方式是什么,mongodb,meteor,Mongodb,Meteor,我有一个大表,其中的列是user\u id、user\u feature\u 1、user\u feature\u 2、…、user\u feature\u n 因此,每一行对应一个用户及其特征 我通过将每列的值存储为一个数组,将该表存储在MongoDB中,例如 { 'name': 'user_feature_1', 'values': [ 15, 10, ... ] } 我使用Meteor从MongoDB中提取数据,这种存储方式有助于快速轻松地检索整个列的
{
'name': 'user_feature_1',
'values': [
15,
10,
...
]
}
我使用Meteor从MongoDB中提取数据,这种存储方式有助于快速轻松地检索整个列的值,以便绘制图表
然而,这种储存方式有一个主要缺点;我无法存储大于16mb的阵列
有几种可能的解决方案,但没有一种似乎足够好:
.... “用户功能”:42 }
这意味着,如果值和键是浮点类型(16mb/128位),那么我们在一个文档中最多可以存储100万个值。还有第三个选项。针对每个用户和功能的单独文档:
{ u:"1", f:"user_feature_1", v:10 },
{ u:"1", f:"user_feature_2", v:11 },
{ u:"1", f:"user_feature_3", v:52 },
{ u:"2", f:"user_feature_1", v:4 },
{ u:"2", f:"user_feature_2", v:13 },
{ u:"2", f:"user_feature_3", v:12 },
您将不会遇到文档增长问题,您可以查询“用户x的所有值”和“功能x的所有值”,而无需访问任何不相关的数据。
16MB/64位浮点=2000000个未压缩数据点
。什么样的图表要求每列至少有200万点???相反,请尝试:
- 在s3服务器上保存图片
- 使用像hadoop这样的MapReduce解决方案(可能是最好的选择)
- 如果数字当前为浮点数,则将其减少为小整数
- 在客户端实时计算数据(如有可能,首选)
- 使用压缩算法,以便保存子集并对其余部分进行插值
这就是说,在这个用例中,基于文档的数据库的性能将优于SQL数据库,因为SQL数据库将完全按照Philipp的建议执行。无论哪种方式,您都无法将多个16MB文件发送到客户端,如果客户端没有因为用户体验不佳而离开您,那么您将因服务器成本而破产:-) “似乎足够好”,“我想”。。。绩效不是关于感觉或观点,而是关于基准和概况。您的位置在哪里?每个值至少需要两个标识符(用户标识和用户特征)。这种方法不会占用空间吗?我正在考虑将mongodb和postgres同时用于meteor的可能性,刚刚发现有一些库支持meteor的postgresmeteor@Michael这肯定不是最节省空间的解决方案。总有一个折衷办法。绘制图形是必需的功能之一,我需要存储所有值以用于其他目的,例如统计计算。听起来,如果需要完美的分辨率,您应该使用Philipp建议的。