的背景:
我们有一个应用程序,其中主要实体是客户。该应用程序中的所有信息均从客户开始。我们认为如果我们可以将其用于某种分区,那就太好了。我们设计的服务以 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
or
INSERT INTO Orders ( OrderId ) VALUES ( 10 );
将毫无问题地工作,仅处理给定客户的数据。 CustomerId COLUMN 将始终从系统函数 FEDERATION_FILTERING_VALUE 推断出来;
现在,我们可以毫无问题地将所有客户放在一个数据库中,并且他们将彼此隔离。如果将来的某个时候,其中一个变得太大,我们可以在该特定客户 ID 上拆分联合,并且我们不必更改代码中的任何内容来支持它。
哎呀,我们可以将每个客户放在单独的联合数据库中,并且使用它的服务对此一无所知。
我们对我们的解决方案非常满意,我认为我的想法非常聪明。直到最近,微软宣布他们将在即将推出的新 Azure 数据库版本中弃用 Azure 联邦功能。了解更多相关信息here http://msdn.microsoft.com/library/azure/dn741330.aspx and here http://blogs.msdn.com/b/windowsazure/archive/2014/04/24/azure-sql-database-introduces-new-service-tiers.aspx?CommentPosted=true#commentmessage.
我希望你能看到我的问题。你认为我的选择是什么?您是否使用 Azure 联合?您将如何过渡?
谢谢。