8

的背景:

我们有一个主要实体是客户的应用程序。此应用程序中的所有信息都从客户开始。我们认为如果我们可以将它用于某种分区,那就太好了。我们以 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 联合以及您将如何过渡?

谢谢你。

4

3 回答 3

3

我们已经看到,与联邦相比,自定义分片解决方案通常会在可扩展性、灵活性和性能方面产生更好的结果。您可以在此处找到有关联合和自定义分片的更多信息:http: //msdn.microsoft.com/en-us/library/dn495641.aspx。这是宣布在 Windows Azure SQL 数据库中与 Web 和商业版一起退出联邦的部分原因。

我鼓励您考虑将自分片作为替代方案。去年 CAT 团队在 http://social.technet.microsoft.com/wiki/contents/articles/17987.cloud-service-fundamentals.aspx上发布了关于自分片模式的良好指导,以及更多类似的材料很快就会到来。

请随时与我联系,讨论迁移现有联邦应用程序的替代方案。我是 Azure DB 产品团队的一员,您可以通过 torsteng(at)microsoft.com 与我联系

谢谢,

托尔斯滕

于 2014-05-08T20:40:44.700 回答
2

您唯一的选择是重写您的软件。当他们说自定义分片解决方案更好时,微软在撒谎。实际上,他们多年来一直在说,为什么你应该更喜欢联邦而不是自定义分片,他们为此提供了非常可靠的观点:连接池、扩展时没有停机时间、没有自定义代码来管理你的分片等。然而,现在微软想要获得更多的钱来自 Azure,因此他们决定只向客户提供非常昂贵的计划,并且不再有联合的地方,因为它们非常便宜且非常可扩展。

如果您没有超高的交易率,您可以尝试 Amazon RDS。没有分片,但它们每秒可以为您提供高达 30000 次交易,即使对于非常大的网站来说也是如此。我们为 PostgreSQL RDS 重写了我们的软件,我们对此非常满意。它具有比 SQL Server 更多的功能,例如原生 JSON 支持、数组、多个 CASCADE 路径等。

如果每秒 30000 个事务对您来说还不够,只需增加服务器数量并根据用户名或任何其他属性拆分您的数据,例如:

Username starts with letter
a-d                         | connect to Server 1
e-g                         | connect to Server 2
h-s                         | connect to Server 3
t-z                         | connect to Server 4

在上面的示例中,您将能够每秒执行 120000 个事务,并且连接池应该没有问题,因为只有 4 个服务器。

于 2014-08-03T13:05:28.580 回答
1

MS 刚刚发布了一个从联邦迁移出来的实用程序

http://code.msdn.microsoft.com/vstudio/Federations-Migration-ce61e9c1
http://channel9.msdn.com/Blogs/Windows-Azure/Azure-SQL-Database-Federations-Migration

于 2014-10-02T15:09:17.927 回答