gpt4 book ai didi

mongodb - 在 MongoDB 中存储面向列的表以实现最佳数据查询的最佳方式是什么

转载 作者:行者123 更新时间:2023-12-03 03:18:09 25 4
gpt4 key购买 nike

我有一个大表,其中列为 user_id、user_feature_1、user_feature_2、...、user_feature_n

因此每一行对应一个用户及其特征。

我通过将每列的值存储为数组来将该表存储在 MongoDB 中,例如

{
'name': 'user_feature_1',
'values': [
15,
10,
...
]
}

我正在使用 Meteor 从 MongoDB 中提取数据,这种存储方式有助于快速轻松地检索整个列的值以进行图形绘制。

但是,这种存储方式有一个很大的缺点;我无法存储大于 16mb 的数组。

有几种可能的解决方案,但似乎没有一个足够好:

  1. 使用 gridFS 存储每列的值。我不确定meteor是否支持gridFS,并且它缺乏对数据切片的支持,也就是说,我可能只需要获取一列的前1000个值。

  2. 以面向行的格式存储表。例如

    { '用户id': 1, “用户特征_1”:10, “user_feature_2”:0.9,
    .... “用户特征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

数组 - 数组的文档是一个普通的 BSON 文档,其键为整数值,从 0 开始并按顺序继续。例如,数组 ['red', 'blue'] 将被编码为文档 {'0': 'red', '1': 'blue'}。键必须按升序排列。

这意味着如果值和键都是浮点类型(16mb/128bits),我们最多可以在文档中存储 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 的所有值”,而无需访问任何不相关的数据。

关于mongodb - 在 MongoDB 中存储面向列的表以实现最佳数据查询的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32585143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com