我如何使用 Azure SQL 实现跨多个区域(不是复制)的数据跨度

How do I acheive data span across multiple regions (not replication) with Azure SQL

我有一个 Azure SQL 服务器和一个数据库。我想要一个解决方案来在不同区域的数据库中存储所选 tables 的特定记录。 例如,我有一个用户 table,其中包含所有 PII 数据。这些用户可以来自世界任何地方。但我想存储来自欧盟地区的用户记录,只存储在欧盟地区。 要添加它 - 我希望与特定用户相关的所有其他 table 记录也存储在该用户的区域中。

从应用程序的角度来看,我将能够查询所有用户和所有相关的 tables 以获得全球用户的仪表板数据。

解决这种情况的任何指示都会对我有所帮助。

这是一种方法...当您的 user/tenant 注册您的服务时,他们将需要选择他们的数据应该存放在哪里。这称为数据驻留。然后在后续读取或写入数据的请求中,您的应用程序的存储库层需要知道请求正在执行的人,以便它可以查找适当的连接字符串并连接到该数据库以 retrieve/write 数据。

路由数据可以复制到位于单个位置的多个区域 and/or,因为它不包含 PII。 Azure Web 应用程序可以在单个区域托管(如下图所示),也可以将其复制到多个区域并通过全局流量管理器将流量路由到它。

此方法支持欧洲用户选择将其数据驻留在法国但恰好访问美国的情况。

这张照片显示了它的外观。一个叫 Barry Luijbregts 的人有一个很好的 pluralsight 视频,深入研究了这种方法。 https://www.pluralsight.com/courses/azure-paas-building-global-app

祝你好运!

另一种方法可能是对数据库进行分片。使用水平分片将每个 country/region 的行存储在 country/region 的单独数据库中。弹性数据库客户端库将使用分片图为您完成大部分分片工作(假设您使用的是 .NET)。您可以使用分片图中的国家代码来拆分区域数据。

参考架构:https://docs.microsoft.com/en-us/azure/architecture/patterns/sharding

弹性数据库客户端:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-database-client-library