目前我们有一个包含SQL DB的网站。两者都托管在Azure的一个区域
我有一个业务请求,要求我们的美国客户在美国数据中心存储所有数据,无需复制。因此,我们需要托管在不同地区(美国,欧盟,亚洲)的多个数据库(相同的架构,不同的数据)。
我们的API如何将所有数据库的数据整合在一起仍有待决定,但我愿意接受建议。
是否有描述此方案的特定应用程序架构? 有没有例子?
答案 0 :(得分:0)
您可以使用弹性查询来连接来自不同Azure SQL数据库的表,如here所述。您将必须创建外部数据源,如下所示:
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
);
详细了解弹性查询here。
答案 1 :(得分:0)
Elastic Database Client Library在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处理迁移。我在启动时实现了一个循环,它将在每个数据库上显式调用“apply migration”。挑战在于EF Code First不希望您拥有多个数据库,因此您必须实现迁移代码可以使用的自定义连接工厂。我不记得我头顶的确切细节,但是如果你想先处理这个并使用EF代码,请告诉我,我会尝试挖出代码。