Одна база данных Mongodb, коллекция для каждого клиента и база данных для каждого клиента

StackOverflow https://stackoverflow.com/questions/8307676

  •  25-10-2019
  •  | 
  •  

Вопрос

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

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

  • Создайте несколько коллекций, например.транзакции_клиент1, транзакции_клиент2 и т. д.

  • Одна БД на каждого клиента

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top