Как создать многопользовательскую базу данных с общими структурами таблиц?

Наше программное обеспечение в настоящее время работает на MySQL. Данные всех арендаторов хранятся в той же схеме. Так как мы используем Ruby on Rails, мы можем легко определить, какие данные принадлежат который арендатор. Однако существуют некоторые компании, конечно, которые боятся, что их данные могли бы быть поставлены под угрозу, таким образом, мы оцениваем другие решения.

До сих пор я видел три опции:

  • Мультибаза данных (каждый арендатор получает его собственное - почти то же как 1 сервер на клиента),
  • Мультисхема (не доступный в MySQL, каждый арендатор получает его собственную схему в общей базе данных),
  • Общая Схема (наш текущий подход, возможно, с дополнительной идентификацией записывают на каждом столбце),

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

Q: Мультисхема, кажется, разработана, чтобы иметь немного отличающиеся таблицы для каждого арендатора - я не хочу это. Есть ли какой-либо RDBMS, который позволяет мне использовать мультисхему многопользовательское решение, где структура таблицы совместно используется всеми арендаторами?

P.S. Много я имею в виду что-то как ультрамного (10.000 + арендаторы).

122
задан Marcel Jackwerth 6 February 2010 в 15:32
поделиться

2 ответа

Из Wiktionary :

  1. (вычисления) В языках сборки цикл, который содержит мало инструкций и многократно итерирует.
  2. (вычислительная) Такая петля, которая интенсивно использует ресурсы ввода-вывода или обработки, не позволяя адекватно совместно использовать их с другими программами, работающими в операционной системе.

Для случая 1 это, вероятно, как

for (unsigned int i = 0; i < 0xffffffff; ++ i) {}
-121--937651-

Нет. Эти сведения не будут получены от ResultSet или ResultSetMetadata .

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

Конечно, чтобы использовать это, вам нужно знать название таблицы.

-121--3348335-

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

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

Существует интересная статья MSDN под названием Multi-tenant Data Architecture , которую можно проверить. Вот как авторы обращались к заблуждению в сторону общего подхода:

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

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

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

  • На какое количество будущих арендаторов вы рассчитываете ориентироваться? Вы можете быть нигде ближний быть, способный оценить предполагаемое использование с полномочиями, но мыслить по порядкам: вы создаете приложение для сотни арендаторов? Тысячи? Десятки тысяч? Еще? Чем больше вы ожидайте, что ваша база арендаторов будет, скорее всего, вы захотите рассмотреть более общий подход.

  • Сколько места для места хранения данных, как вы ожидаете, займет средний арендатор? Если вы ожидаете, что некоторые или все арендаторы хранить очень большие объемы данных, подход «отдельная база данных», вероятно, с наилучшими пожеланиями. (Действительно, место хранения данных требования могут заставить вас принять в любом случае отдельная модель базы данных. Если да, будет гораздо проще спроектировать приложение таким образом из начало, чем переход к отдельный подход к базе данных позднее.)

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

  • Планируете ли вы предложить какие-либо дополнительные услуги для каждого арендатора,такой по резервному копированию и восстановлению для каждого клиента способность? Такие услуги проще предложить через более изолированный подход.


ОБНОВЛЕНИЕ: Для получения дополнительной информации об ожидаемом количестве арендаторов.

Это ожидаемое число арендаторов (10 000) должно исключать подход, основанный на использовании нескольких баз данных, для большинства, если не для всех сценариев. Я не думаю, что вам понравится идея поддерживать 10 000 экземпляров базы данных и создавать сотни новых каждый день.

Из одного только этого параметра он выглядит так, как будто наиболее подходящим является подход с использованием общей базы данных и единой схемы. Тот факт, что вы будете хранить примерно 50Mb на одного арендатора, и что не будет никаких дополнений на одного арендатора, делает такой подход еще более уместным.

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

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

UPDATE 2: Судя по всему, парни из Microsoft переехали/сделали новую статью по этой теме, оригинальная ссылка исчезла, и это новая: Шаблоны аренды базы данных SaaS для нескольких арендаторов (kudos Shai Kerer)

86
ответ дан 24 November 2019 в 01:26
поделиться

Мой опыт (хотя и SQL Server) показывает, что использование нескольких баз данных - это способ go, где у каждого клиента своя база данных. Поэтому, хотя у меня нет опыта работы с mySQL или Ruby On Rails, я надеюсь, что мой вклад может принести пользу.

Причины включают:

  1. безопасность данных / аварийное восстановление. Данные каждой компании хранятся полностью отдельно от других, что снижает риск компрометации данных (например, если вы вводите ошибку в коде, которая означает, что что-то по ошибке смотрит на данные других клиентов, когда этого не следует делать), сводит к минимуму потенциальные потери для одного клиента, если он конкретная база данных повреждается и т. д. Предполагаемые преимущества безопасности для клиента даже больше (дополнительный бонусный побочный эффект!)
  2. масштабируемость. По сути, вы должны разбивать свои данные на части, чтобы обеспечить большую масштабируемость - например, базы данных можно размещать на разных дисках, вы можете подключить несколько серверов баз данных и перемещать базы данных, чтобы упростить распределение нагрузки.
  3. настройка производительности. Предположим, у вас есть один очень большой клиент и один очень маленький. Шаблоны использования, объемы данных и т. Д. Могут сильно различаться. При необходимости вы можете легко настроить / оптимизировать для каждого клиента.

Надеюсь, это принесет пользу! Есть еще причины, но мой разум потерял сознание.Если он вернется, я обновлюсь :)

РЕДАКТИРОВАТЬ:
С тех пор, как я опубликовал этот ответ, теперь ясно, что мы говорим о более чем 10 000 арендаторов. Мой опыт работы с сотнями крупномасштабных баз данных - я не думаю, что 10 000 отдельных баз данных будут слишком управляемыми для вашего сценария, поэтому сейчас я не одобряю подход с несколькими базами данных для вашего сценария. Тем более, что теперь ясно, что вы говорите о небольших объемах данных для каждого арендатора!

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

16
ответ дан 24 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: