【发布时间】:2012-11-25 13:18:21
【问题描述】:
与许多开发人员一样,我正在寻找一种将现有应用程序集成到 SQL Azure 联合的方法,而替换身份列(我的表的主键)是一个大问题。
出于多种原因,我不想将 GUID 用作我的主键(请不要打开关于 GUID 的辩论,这不是我的问题:我只是不想要 GUID,句号)。
所以我需要构建一个密钥提供程序来替换标准 SQL 数据库的“身份”功能。我正在使用实体框架,所以我可以很容易地找到一个在插入之前设置Id 值的地方(通过覆盖我的ObjectContext 类的SaveChanges 方法)。我只需要找到一个“不太复杂”的实现来获取当前的 ID,即“农场就绪”。
我读过这篇 SO 帖子:“ID Generation for Sharded Database (Azure Federated Database)”和“来自 MSDN 杂志的Synchronizing Multiple Nodes in Windows Azure”,但这个解决方案对我来说听起来有点复杂。
我正在考虑为每个 SQL 表创建(自动)一个 azure 队列,其中包含一个预加载的连续整数列表。当我想要一个 Id 值时,我只需要从队列中获取一条消息(它变得不可见并在途中被删除),这给了我当前可用的 Id。
关于“Windows Azure 队列”和“Windows Azure 服务总线队列”之间的选择,我更喜欢“Windows Azure 队列”,因为"high" latency of Service Bus Queues。 我不认为 Azure Queues 缺少“订购保证”是个问题。
您如何看待使用 Azure 队列提供 Id 值的想法?您认为有什么理由可以放弃这个想法吗?在 SQL Azure 联合数据库中提供整数 id 是否有更好的想法,甚至是好的做法? 谢谢。
编辑:
Astaykov 建议 SnowMaker。我终于完成了fork of SnowMaker 以完全兼容 Azure 存储库的 v2。
编辑 2
请注意,如here 所述,Azure SQL 联合将于 2015 年 9 月停用,包括 Web 和业务层。但是这个问题对于自定义分片解决方案仍然有效。
【问题讨论】:
标签: azure azure-sql-database federation azure-queues