Схема базы данных mongodb для многопользовательского приложения - PullRequest
0 голосов
/ 10 ноября 2011

Вопрос. В приложении присутствуют десятки тысяч пользователей (но не более 500 КБ).

Решение: хранить коллекцию каждого пользователя (10-20) в отдельном пространстве имен пользователей (только по одному для каждого).клиент) для экономии места на диске путем выхода из id «столбца» каждого пользователя;ускорить время запроса благодаря небольшому индексу пространства имен;уменьшить заблокированное соотношение (https://jira.mongodb.org/browse/SERVER-1240); упростить разбиение (https://jira.mongodb.org/browse/SERVER-939).

Это нормально? Или, может быть, мне следует использовать одну общую коллекцию с пространствами имен?

Спасибо за ваши ответы.

1 Ответ

1 голос
/ 10 ноября 2011

Мне кажется, я понимаю ваш вопрос, но поправьте меня, если я ошибаюсь. Похоже, вы хотите сохранить пользователей каждого Приложения в их собственной коллекции. Это имеет ряд преимуществ и недостатков, которые вам необходимо оценить на основе сложных решений DBA, таких как соотношение R / W, нагрузка и т. Д.

Преимущества

  • Как вы упомянули, обновление индексов займет меньше времени, поскольку у них есть только сегмент пользователей.
  • Запросы по неиндексированным полям (если они есть) будут выполняться быстрее из-за меньшего числа элементов.
  • Глобальная блокировка записи не будет играть такой важной роли, поскольку вы блокируете только приложение.

Недостатки

  • Поскольку индексы ограничены коллекцией, у вас будет (число приложений) в несколько раз больше индексов, которые нужно хранить в памяти (индексы мало что дадут, если вы их разметите).
  • Поскольку индексы и коллекции занимают свои собственные пространства имен, а каждое пространство имен занимает около 628 байт, вам нужно беспокоиться о стандартном 16 МБ ограничении пространства имен . Это ограничит количество приложений, которые вы можете иметь. например с двумя индексами вы ограничены примерно 8 000 коллекций.
  • Наконец, поскольку ваши пользователи будут находиться в разных коллекциях, вы не сможете выполнять запросы в разных приложениях. Это может быть сорвано MapReduce, но добавляет больше сложности.

В конце дня вы можете достичь большинства из этих преимуществ, обойдя недостатки, просто разделив ключ приложения. Сценарий для многих коллекционеров заманчив, но я думаю, что в конечном счете не то, для чего оптимизирован монго.

...