的背景:
我们有一个主要实体是客户的应用程序。此应用程序中的所有信息都从客户开始。我们认为如果我们可以将它用于某种分区,那就太好了。我们以 Azure SQL 数据库为后端设计了该服务。
我们的表格看起来像这样(为简洁起见,只留下相关部分):
TABLE dbo.Orders
(
CustomerId INT NOT NULL DEFAULT( FEDERATION_FILTERING_VALUE( 'FEDERATION_BY_CUSTOMER' ) ),
OrderId INT NOT NULL,
....,
CONSTRAINT PK_Orders PRIMARY KEY CLUSTERED ( CustomerId, OrderId )
) FEDERATED ON ( FEDERATION_BY_CUSTOMER = CustomerId );
现在这让我们可以做一些疯狂的事情。我们指向所有 SQL 相关内容的入口总是首先包含以下命令:
USE FEDERATION GroupFederation( FEDERATION_BY_CUSTOMER = 1 ) WITH RESET, FILTERING = ON
在这种情况下,此语句:
SELECT * FROM Orders
或者
INSERT INTO Orders ( OrderId ) VALUES ( 10 );
将毫无问题地工作,只处理给定客户的数据。CustomerId COLUMN 将始终从系统函数 FEDERATION_FILTERING_VALUE 中推断出来;
现在我们可以毫无问题地将所有客户都放在一个数据库中,并且他们将彼此隔离。如果在未来的某个时候,其中一个变得太大,我们可以在该特定客户 ID 处拆分联合,并且我们不必更改代码中的任何内容来支持它。
哎呀,我们可以让每个客户都在单独的联合数据库中,而使用它的服务对它一无所知。
我们对我们的解决方案非常满意,我认为我很聪明地想出了它。直到最近,微软才宣布他们将弃用 azure federations 功能以及即将推出的新 azure 数据库版本。在此处和此处阅读有关它的更多信息。
我希望你能看到我的问题。你认为我的替代方案是什么?您是否使用 Azure 联合以及您将如何过渡?
谢谢你。