2012-05-19 5 views
0

Я проектирую центр уведомлений для социальной сети, и я просто собираюсь хранить уведомления одного пользователя в одной коллекции с именем notification_ $ userid ($ userid is dynamic).Динамический дизайн коллекции mongodb

И для такого дизайна я считаю, что его можно читать и набирать быстрее, чем отправлять уведомления всех пользователей только в одной коллекции. Но есть ли у него недостатки? или существует ли ограничение на сумму сбора одного db?

ответ

1

Возможно, вы захотите переосмыслить это. Причина в том, что независимо от того, насколько гибкой является база данных noSQL, она может быть огромной. И осколки, и если вы позже вырастите, вы можете захотеть перейти на кластер и т. Д. Я бы рекомендовал вам решить эту задачу на уровне приложения.

Вот как я хотел бы сделать:

1) пользователь приходит, делает то, что оповещает другие пользователь 2) этот «жест» не хранится в базе данных в качестве уведомлений, а в соответствующем пользователе «notifiocations» клетка. 3) ячейка пользователя «noticifcations» похожа на массив - в MongoDB это массив, и вы просто храните там объекты

Таким образом, вы также «персонализируете» свои уведомления в своей БД и избегаете использования " уведомлений ". Единственное, что вам нужно сделать, это направить это уведомление в массив связанных уведомлений пользователей.

+0

Текущая версия центра уведомлений просто нравится то, что вы упомянули. Но я просто беспокоился о коэффициенте заполнения, который монго копировал документ и делал действие записи очень медленным. – Kevin

+0

Нет, на самом деле, вам не о чем беспокоиться. Я предполагаю, что у вас есть аутентификация, прежде чем пользователи могут что-либо сделать, и вы можете получить всю информацию о зарегистрированном пользователе сразу после ее проверки. =) Я написал болтовню, основанную на MongoDB таким образом. Я получаю информацию пользователя при аутентификации, и я использую 2 коллекции для фактического обмена сообщениями. Один временно, пока оба пользователя не прочитают это сообщение (doc) и одно для «архивов». Когда пользователь отправляет сообщение, он записывается в обе таблицы, и когда оба они его прочитали, он удаляется из временной коллекции. =) – benqus

+0

@benqus Что делать, если массив архивов будет расти очень быстро? Как долго вы сможете сохранить его читабельным? Или все архивы, хранящиеся в огромной коллекции? Извините, но этот момент для меня непонятен. –

Смежные вопросы