2012-02-15 1 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, поэтому давайте посмотрим, вижу ли я это так же, как и вы. Если у меня есть 20 000 вопросов и позволяет сказать 100 000 избирателей, которые могут голосовать по любому вопросу ... У меня будет "только" один сборник для данных голосования, и каждый документ в этом сборнике будет «единым» голосованием ... это означает, что я могу загрузить коллекцию «голосов» с практически миллионами документов «единого голоса» ... и голосовать за разные вопросы ... и индексировать все эти данные b дату и вопрос справки .... и по-прежнему сохранять хорошую производительность и скорость .... –

+0

Если вы указали в поле даты, mongodb будет хранить btree дат в памяти. Это вопрос нескольких байтов и расположения памяти. Вероятно, примерно 16 байтов для каждого объекта. Если у вас есть 100000 избирателей, реалистично, на сколько вопросов будет много голосов? Что действительно важно, так это то, сколько голосов у вас есть. Если каждый избиратель голосует 100 раз, то десять миллионов голосов. Это 160 миллионов байт или около 1,2 гигабайта памяти. Если у вас 2 гигабайта памяти, вы можете сохранить весь индекс в памяти, и он будет оставаться быстрым, так как это будет поиск Btree. – nnythm

+0

Спасибо, теперь можете двигаться в правильном направлении ... –