sql - 实现环形缓冲区

标签 sql sql-server tsql ssms

我们有一个表记录数据。它以每秒 15K 行的速度记录。

问题:我们如何将表大小限制为 10 亿个最新行?

即一旦达到 10 亿行,它就会成为一个环形缓冲区,在添加最新行时删除最旧的行。

触发器可能会给系统带来太多负载。 Here's SO 上的触发器示例。
我们已经在使用一系列调整来保持速度(例如存储过程、表参数等)。

最佳答案

除非有关于 10 亿的魔法,否则我认为你应该考虑其他方法。

首先想到的是对数据进行分区。比如说,将一小时的数据放入每个分区。这将导致分区中大约有 15,000*60*60 = 5400 万条记录。大约每 20 小时,您可以删除一个分区。

分区的一大优点是插入性能应该很好,您不必删除单个记录。根据查询负载、索引和其他因素,可能会有额外的开销。但是,由于没有额外的索引和主要是插入的查询负载,它应该比尝试在插入时每秒删除 15,000 条记录更好地解决您的问题。

关于sql - 实现环形缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22711652/

相关文章:

sql - 如何添加WHERE条件以使用INNER JOINs进行编码?

sql-server - SQL Server 2016 始终加密 - 使用 View 中始终加密的列进行比较和计算表达式

sql - 每个月的顶部和底部销售

sql - 计算 SQL Server 查询中的唯一行

sql - BigQuery Google Analytics sessionWithEvent 指标

c# - ServiceStack.OrmLite : using aliases in SqlExpression for anonymous types

mysql - SQL查询使用子查询选择每个学生的出勤率不能使用父查询中的行

sql - 如何通过动态传递表名来获取行数

SQL:使用案例何时更改列值

Mysql - 查询优化