База данных по архитектуре страны/региона

В настоящее время у нас есть веб-сайт, который включает в себя базу данных SQL. Оба размещены в одном регионе в Azure.

У меня есть бизнес-запрос на хранение всех данных наших клиентов из США в центре обработки данных в США, без репликации. Поэтому нам нужно несколько баз данных (идентичная схема, разные данные), размещенных в разных регионах (США, ЕС, АЗИЯ).

Как наш API объединяет данные из всех баз данных, еще предстоит решить, но я открыт для предложений.

Существует ли конкретная архитектура приложения, описывающая этот сценарий? Есть примеры?


person Jamie    schedule 13.06.2018    source источник
comment
Вы используете Entity Framework? Я прокручивал этот сценарий несколько раз, и это относительно легко. Основная работа заключается в создании баз данных и обновлении схем, так как вам приходится немного бороться с EF. После этого в основном вам нужна фабрика, чтобы дать вам правильное значение дБ для каждого клиента. В настоящее время EF имеет некоторую встроенную поддержку для этого, хотя я сам не пробовал.   -  person Frans    schedule 13.06.2018
comment
Я думаю, docs.microsoft.com/ en-us/azure/sql-database/ может вас заинтересовать тем, что вы можете выполнить запрос Transact-SQL, который охватывает несколько баз данных в базе данных SQL Azure.   -  person hujtomi    schedule 13.06.2018
comment
@Франц, да, мы используем EF.   -  person Jamie    schedule 14.06.2018


Ответы (2)


Клиентская библиотека эластичной базы данных предоставляет для этого поддержку в EF, см. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-use-entity.-framework-applications-visual-studio.

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

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

Если сначала использовать код EF, база данных будет создана автоматически. Сложная часть — обработка миграции с помощью Code First. Я реализовал цикл при запуске, который явно вызывал бы «применить миграции» для каждой базы данных. Проблема заключается в том, что EF Code First не предполагает наличие нескольких баз данных, поэтому вам необходимо реализовать собственную фабрику соединений, которую может использовать код миграции. Я не могу вспомнить точные детали навскидку, но если вы хотите сначала выполнить это и использовать код EF, дайте мне знать, и я попытаюсь раскопать код.

person Frans    schedule 14.06.2018

Вы можете использовать эластичные запросы для соединения таблиц из разных баз данных SQL Azure, как описано здесь. Вам нужно будет создать внешние источники данных, как показано ниже:

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION='myserver.database.windows.net',
    DATABASE_NAME='ReferenceData',
    CREDENTIAL= SqlUser
);

CREATE EXTERNAL TABLE [dbo].[zipcode](
    [zc_id] int NOT NULL,
    [zc_cityname] nvarchar(256) NULL,
    [zc_zipcode] nvarchar(20) NOT NULL,
    [zc_country] nvarchar(5) NOT NULL
)
WITH
(
    DATA_SOURCE = RemoteReferenceData
);

Узнайте больше об эластичных запросах здесь< /а>.

person Alberto Morillo    schedule 13.06.2018