【发布时间】:2018-02-19 07:26:30
【问题描述】:
我在税务处理公司工作,使用 SQL Server 2016。我们处理数百万个税务信息申报表,并设置并发、多线程、并行处理系统。
对于并行处理写入事件存储,聚集索引应该在什么位置?在 UniqueIdentifier Guid 上,还是(在 Identity(1,1) 上使用 Ncx 在 Uniqueidentifier guid 上的聚集索引)?,或者没有聚集索引(利用堆)?
您一般建议对写事件存储表进行分区吗?
当我们更新读取模型以进行查询时,是否仍应使用并行处理来更新读取模型?还是我们应该进行单流更新?
另外,在读取事件模型、UniqueIdentifierGuid 或(Identity(1,1) 上的聚集索引和 Uniqueidentifier guid 上的 Ncx)上的聚集索引应该是什么?
我们应该分区读取模型表还是其他方法?
uniqueidentifierguids 上的索引通常是错误的聚集索引,会导致大量页面碎片、较慢的 io 写入和较大的磁盘空间。 https://blogs.msdn.microsoft.com/sqlserverfaq/2010/05/27/guid-vs-int-debate/
但是,identity(1,1) 整数列上的索引会导致锁存器争用,最后一页会在并行处理中插入“热点”。 http://www.sqlpassion.at/archive/2014/04/15/an-ever-increasing-clustered-key-value-doesnt-scale/
【问题讨论】:
标签: sql-server indexing database-design cqrs event-sourcing