处理频繁更改的数据的解决方案

时间:2016-05-16 17:22:08

标签: sql-server database asp.net-web-api

我目前正在尝试找出一种解决方案,以便对经常变化的数据进行最佳优化。服务器正在运行IIS / SQL Server,它是一个ASP.NET Web API应用程序。我的表结构类似于以下内容:

用户表: UserID PK

状态表: StatusID PK, 标题varchar

UserStatus表: UserID PK(CLUSTERED), StatusID FK(非聚集), Date DateTimeOffset(可能的索引) - 这将用作到期日期。旧记录变得无关紧要。

用户表中将有大约5000多条记录。状态表将有大约500条记录。在任何给定时间,UserStatus表都会经常更改(每5-30秒更改一次)到StatusID和Date Fields,范围为0到1000个用户。此UserStatus表还将对其执行频繁的SELECT查询,并过滤掉具有旧/不相关日期的记录。

  • 我已经考虑用一个记录填充UserStatus表 每个用户,只执行更新。这意味着会有 永远是预期的记录,它将限制检查 为了存在。我担心的是表现和所有碎片 的索引。然后我会查询表中的记录 日期在当前时间的几分钟内。
  • 我考虑过只插入相关记录 UserStatus表,在用户存在时进行更新并运行 清除旧/无关数据的任务。这种方法会保留 记录的数量下降但我必须检查 在执行任务和索引之前存在记录可能会抑制 性能
  • 最后我考虑过一个MemoryCache或类似的东西。一世 我不太了解Web API中的缓存,而是根据我的内容 读到它,我很快就决定反对这个因为潜力 迭代缓存时的并发问题。

是否有人建议这样的场景?还有其他方法我不考虑吗?

1 个答案:

答案 0 :(得分:1)

鉴于您所谈论的记录数量,我将使用tsql Merge来更新现有记录,并使用一个有效的语句添加新记录。

根据您提到的设计,您应该能够运行定期的maint脚本来修复任何碎片问题。

可以缩放解决方案。如果记录得到了发生一些减速的点,我会考虑SSD,其中碎片不是问题。

如果SSD的缺点使其不受欢迎,您可以查看内存中的OLTP。