2012-02-15 58 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

相關問題