L-F*_*our 5 domain-driven-design primary-key azure cqrs azure-sql-database
我正在研究使用CQRS和DDD原则的分布式系统.基于此,我决定我的实体的主键应该是guids,它是由我的域(而不是数据库)生成的.
我一直在阅读guids作为主键.但是,如果应用于Azure SQL数据库,似乎某些最佳实践不再有效.
如果使用内部SQL服务器机器,顺序guid很好 - 生成的顺序guid将始终是唯一的.但是,在Azure上,情况不再如此.正如在这个帖子中讨论的那样,它甚至不再受支持了; 并且生成它们也是一个坏主意,因为它成为单点故障,并且不再保证服务器之间的唯一性.我猜连续的guid在Azure上没有意义,所以我应该坚持使用常规guid.它是否正确?
Guid类型的列是群集的不良候选者.但是这篇文章指出Azure上不是这种情况,而这一点恰恰相反!我应该相信哪一个?我应该只使我的主键成为一个guid并将其保持群集(因为它是主键的默认值); 或者我不应该将其聚类并选择另一列进行聚类?
感谢您的任何见解!
生成的顺序指南将始终是唯一的。然而,在 Azure 上,情况不再如此。
在这里查看这篇文章的底部 - http://blogs.msdn.com/b/sqlazure/archive/2010/05/05/10007304.aspx
Guid(依赖于NEWID()
)的问题在于它们将是随机分布的,这在对其应用聚集索引时存在性能问题。
我建议您使用 GUID 作为主键。然后从该列中删除默认的聚集索引。将聚集索引应用于表上的其他字段(即创建日期),以便记录在创建时按顺序/连续索引。然后将非聚集索引应用于您的 PK Guid 列。
有可能,从 *SELECT * FROM TABLE WHERE Id = " 的角度来看,返回单个实例是没问题的。
同样,如果您要返回列表或记录范围以在列表中显示,如果您按 CreatedDate 指定默认顺序,则聚集索引将适用于该顺序
归档时间: |
|
查看次数: |
1834 次 |
最近记录: |