2012-02-15 54 views
0

我试图在MongoDB中存储“投票”,并且我被困在如何以有效的方式进行。 基本上,我有几个选项的问题,如A B C D ...(共6个)。 我给予选民选择一个选项,并希望保存“投票”的领域,如: MongoDate,选项,选民名称,也许更多的领域。在Mongo DB中存储“投票”的高效文档格式?

我打算在给定的问题上拥有数千甚至数百万的无限“投票”。

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

回答

1

一种合理的方式做这将是有票集合,其中每个文档的样子:

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

然后,在日期字段索引。不过,要小心不要单独在日期字段上分片,如果你不得不分片。我将字段名称列为单个字符,因为每个字段的名称都存储在mongoDB中,所以为了更好的空间效率,应该使用较短的名称。如果你不关心空间,一个更长,更多信息的名字可能没问题。

+0

我是MongoDB的新手,所以让我看看我是否以同样的方式看待这个问题..如果我有20000个问题,并且可以说100000个选民可以对任何问题进行投票......我将只有“一个投票数据集合,并且该集合中的每个文档都将是一个“单一”投票...这是否意味着我可以用几乎几百万的“单票”文档加载“投票”集合......并针对不同的问题投票...并索引所有数据b日期和问题参考....并仍然保持良好的性能和速度.... – 2012-02-15 20:00:45

+0

如果您在日期字段上编制索引,mongodb将在内存中保留一个btree日期。这是几个字节和一个内存位置的问题。可能每个对象大概有16个字节。如果你有10万选民,实际上,有多少问题会有很多票?这里真正重要的是你有多少票。如果每个选民投票100次,就有一千万票。这是1.6亿字节,或者大约1.2G内存。如果你有2个内存,你可以将整个索引保存在内存中,并且保持快速,因为它将是Btree查找。 – nnythm 2012-02-16 01:07:31

+0

谢谢,现在可以朝着正确的方向前进...... – 2012-02-16 04:07:05

相关问题