【发布时间】:2012-02-16 22:35:47
【问题描述】:
我一直在寻找一些关于 Azure 联合数据库的 id 生成(联合/主键)最佳实践的文章或指南,但没有发现任何令人信服的内容。联合表不支持标识列,因此在我看来,唯一实用的 id 类型是 GUID,因为尝试集中创建和使用 BigInt 会在应用程序中创建单点故障。我主要关心的是在 BigInts 上使用 GUID 对性能的影响(尤其是对表进行索引)。
是否有任何推荐/最佳实践(或现有库)来为分布式系统创建独特的 BigInts(或者我不应该担心使用 GUID 对性能的影响?)。
[更新]
自从发布问题以来,已经阅读了更多关于此的内容,在我看来,密钥生成将成为 Azure 中的一个问题。根据 Microsoft 的此 blog 帖子,建议使用 GUID 作为联合密钥。但是他们没有提到联合表上的所有索引(包括聚集索引)都必须包含联合键。这意味着所有这些索引都将包含一个 GUID,这会降低插入性能。
替代方案似乎是使用集中式密钥生成服务(如下文 Simon 所述),它在成为潜在瓶颈和中心故障点方面有其自身的缺点。
我原以为微软会对此提供更多指导,因为这肯定是每个创建联合表的人都会面临的问题!
总的来说,我决定使用集中式密钥生成服务,但这确实让我有点担心。如果有人有一些魔术技巧,我很想听听(或者如果我遗漏了一些明显的东西,请告诉我)!
【问题讨论】:
标签: .net azure azure-sql-database sharding