Mongodb одна база данных против коллекции на клиента против базы данных на клиента - PullRequest
3 голосов
/ 29 ноября 2011

Я хочу построить веб-сервис, используя mongodb и литий.Что лучше:

  • Хранить данные всех клиентов в одной коллекции (например, все документы транзакций нескольких клиентов в одной транзакции коллекции)

  • Создание нескольких коллекций, например, Transactions_client1, Transactions_client2 и т. Д.

  • Один дБ на клиента

система должна быть масштабируемой и должна быть простой в развертывании

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Чтобы определить направление, нужно знать гораздо больше о том, чего вы хотите достичь, в точности.

Однако я бы исключил вариант 2 (несколько коллекций), потому что я не вижу каких-либо преимуществ этого подхода: вам придется определять имя коллекции во время выполнения, написать немного сложнее ваши запросы и существует жесткое ограничение на количество коллекций, которые вы можете иметь (примерно 1,5 млн. коллекций с файлом пространства имен 2 ГБ )

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

Обе эти опции имеют недостаток, который нельзя запрашивать во всех коллекциях. Однако вы всегда захотите иметь доступ к некоторым коллекциям, которые по существу являются общими для всех клиентов (например, журналы, статистика и т. Д.), Поэтому у вас есть дополнительное бремя их разделения.

Вот почему я обычно выбираю вариант 1.

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

Предлагаю начать с одной БД и одной коллекции.Обычно проще управлять одной базой данных.В будущем, если вам потребуется создать отдельную базу данных (для ускорения работы какого-либо клиента), вы можете сбросить данных этого клиента и поместить их на отдельный сервер базы данных (или просто в отдельную коллекцию).Просто запомните эту функцию, когда будете проектировать архитектуру своего приложения.Итак, мое мнение Вариант 1 .С другой точки зрения вы можете масштабировать с одной коллекцией с помощью шардинга и репликации.

система должна быть масштабируемой и легко развертываемой

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

...