我一直在寻找一些有关 Azure 联合数据库 id 生成(联合/主键)最佳实践的文章或指南,但没有发现任何引人注目的内容。联合表不支持标识列,因此在我看来唯一实用的 id 类型是 GUID,因为尝试集中创建和使用 BigInt 会在应用程序中产生单点故障。我主要关心的是使用 GUID 而不是 BigInt 的性能影响(特别是对于表索引)。
是否有任何推荐/最佳实践(或现有库)来为分布式系统创建独特的 BigInt(或者我不应该担心使用 GUID 的性能影响?)。
[Update]
自从发布问题以来,我阅读了更多相关内容,在我看来,密钥生成将成为 Azure 中的一个问题。按照这个blog http://blogs.msdn.com/b/cbiyikoglu/archive/2011/06/20/id-generation-in-federations-identity-sequences-and-guids-uniqueidentifier.aspx来自 Microsoft 的帖子,建议使用 GUID 作为联合密钥。但是他们没有提到联合表上的所有索引(包括聚集索引)都必须包含联合键。这意味着所有这些索引都将包含 GUID,这会降低插入性能。
另一种选择似乎是使用集中式密钥生成服务(正如西蒙在下面提到的),该服务有其自身的缺点,即成为潜在的瓶颈和中心故障点。
我本以为微软会对此提供更多指导,因为这肯定是每个创建联合表的人都会面临的问题!
总的来说,我决定使用集中式密钥生成服务,但这确实让我有点担心。如果有人有一些魔法技巧,我很想听听(或者如果我遗漏了一些明显的东西,请告诉我)!
您可以使用各种技术在应用程序中创建序列,但由于分布式特性,它们并不简单。一个非常好的是使用Blob 存储和先决条件 http://msdn.microsoft.com/en-us/magazine/gg309174.aspx.
根据您的项目进度,您可能需要使用SQL 2012 序列 http://msdn.microsoft.com/en-us/library/ff878091%28v=sql.110%29.aspx并将所有序列放入一个小型非联合数据库中。序列不可用yet在 SQL Azure 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)