База данных для каждой страны / региона архитектуры - PullRequest
0 голосов
/ 13 июня 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Клиентская библиотека Elastic Database предоставляет поддержку в 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, дайте мне знать, и я постараюсь выкопать код.

0 голосов
/ 13 июня 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
);

Подробнее об эластичных запросах здесь .

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