2013-02-21 2 views
0

Я проектирую службу, которая будет обслуживать некоторые бизнес-направления. Логически он будет разделен на две части:База данных приложения/разложение экземпляра

  1. Frontend - колокольчики и whistels как Wiki, цены, целевой страницы, возможно, информацию о счете (выставление счетов, состояние счета, и так далее).
  2. Служба сама, где эмпиристы бизнес-структур будут выполнять свою работу.

Это игровая платформа 2.x, планирующая принять участие в героике. Пока неясно, как разложить вещи и вещи БД.

Должен ли я разложить БД для клиентов: бизнес-единица - одна база данных? Или я должен хранить все данные в одной базе данных, но добавлять для всех таблиц идентификатор бизнес-объекта, который владеет некоторой строкой? Какие проблемы (производительность, администрирование, масштабирование) могут возникнуть с этим решением?

Если я захочу разделить базы данных, как я могу это сделать? Для этого мне нужно запустить экземпляр приложения с БД для клиента, к которому принадлежит этот экземпляр. Таким образом, мы имеем неоднородные экземпляры, которые могут быть препятствием для масштабирования. И, как я знаю, героку не поддерживает неоднородные (веб-экземпляры).

Пожалуйста, помогите, я полностью застрял здесь.

Ожидаемый стек:

  • Scala
  • Play 2.0
  • Anorm
  • JDBC
  • PostgresSQL
  • Heroku

Все (кроме Scala, и может быть Play 2 .0), являются взаимозаменяемыми.

+0

Я не знаю о проблеме. Вы пишете приложение, планируете иметь много клиентов и хотите знать, нужно ли им делиться одной базой данных или каждый клиент имеет свою собственную базу данных? – ryan1234

+0

@ ryan1234 Да, это. – pepyakin

ответ

1

Это довольно классическая проблема. У вас много клиентов, и вам интересно, нужно ли создавать отдельные базы данных для каждого клиента - или если они должны совместно использовать базу данных.

Я бы рекомендовал начать с одной общей базы данных, а затем использовать ее до тех пор, пока вы ее не вырасти. Подумайте о некоторых недостатках, связанных с тем, что каждый клиент имеет свой собственный экземпляр базы данных:

  1. Как вы упомянули, управление схемой может быть жестким. Вам нужно будет написать инструменты для поддержки всех баз данных на всех серверах.

  2. Если вы сообщите клиентам, что вы структурировали свою систему таким образом, некоторые из них могут заставить вас разблокировать базу данных. Другими словами, они могут утверждать: «У меня есть собственная база данных, я хочу, чтобы для меня была новая таблица».

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

Но если вы хотите, чтобы начать сегментирование на основе клиента (http://en.wikipedia.org/wiki/Shard_(database_architecture)), вы можете рассмотреть следующие вопросы:

  1. Как уже упоминалось ранее, вам потребуются некоторые инструменты/скрипты для запуска новой базы данных экземпляр для клиента. Часто этим инструментам необходимо «засеять» базу данных информацией о конфигурации - например, заполнять таблицу состояний для адресов.

  2. Вам понадобится инструмент для мониторинга/поддержки баз данных. Запустите один, остановите другой, посмотрите, есть ли у вас высокая загрузка центрального процессора и т. Д.

  3. Вам понадобится какая-то система для агрегирования статистики по всем клиентам.

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

В целом я бы посоветовал начать с малого и просто и только начинать беспокоиться о масштабе, когда вы туда доберетесь.

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