【问题标题】:Efficient document format to store "Votes" in Mongo DB?在 Mongodb 中存储“投票”的有效文档格式?
【发布时间】:2012-02-16 00:16:24
【问题描述】:

我正在尝试将“投票”存储在 MongoDB 中,但我不知道如何以有效的方式进行。 基本上,我有几个选项的问题,例如 A B C D ...(共 6 个)。 我让选民可以选择一个选项,并希望使用以下字段保存“投票”: MongoDate、选项、选民姓名,可能还有更多字段。

我计划在给定问题上获得数千甚至数百万的无限“投票”。

在检索数据方面:我希望能够主要按日期查询并显示在图表中,例如每小时、每天、每月...间隔的股票价格 换句话说,它就像时间序列。 我不确定 MongoDB 中文档的“格式”;

【问题讨论】:

    标签: mongodb time-series


    【解决方案1】:

    一种合理的方法是建立一个投票集合,其中每个文档看起来像:

    { v: 'a', //voted for the first option
    d: Date(), //the date
    n: 'Bob',
    ...
    }

    然后,索引日期字段。但是,如果您最终必须对此进行分片,请注意不要仅在日期字段上进行分片。我将字段名称列为单个字符,因为每个字段的名称都存储在 mongoDB 中,因此为了更好的空间效率,您应该使用较短的名称。如果你不关心空间,一个更长、信息更丰富的名称可能就可以了。

    【讨论】:

    • 我是 MongoDB 新手,所以让我看看我是否和你一样看待这个问题。如果我有 20 000 个问题,假设有 100 000 个选民可以对任何问题进行投票……我将“只有”一个用于投票数据的集合,并且该集合中的每个文档都将是一个“单一”投票......这是否意味着我可以用几乎数百万个“单一投票”文件加载“投票”集合......并为不同的问题投票...并索引所有数据 b 日期和问题参考 ....并且仍然保持良好的性能和速度 ....
    • 如果你在日期字段上建立索引,mongodb 会在内存中保留一个日期的 btree。这是几个字节和一个内存位置的问题。每个对象大概大约 16 个字节。如果你有 100000 个选民,实际上,有多少个问题会有很多票?这里真正重要的是你有多少票。如果每个选民投票 100 次,就有 1000 万张选票。那是 1.6 亿字节,或大约 1.2 GB 的内存。如果您有 2 gigs 的内存,您可以将整个索引保存在内存中,它会保持快速,因为它将是 Btree 查找。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多