我们有一个表记录数据。它以每秒 15K 行的速度记录。
问题:我们如何将表大小限制为 10 亿个最新行?
即一旦达到 10 亿行,它就会成为一个环形缓冲区,在添加最新行时删除最旧的行。
触发器可能会给系统带来太多负载。 Here's SO 上的触发器示例。
我们已经在使用一系列调整来保持速度(例如存储过程、表参数等)。
最佳答案
除非有关于 10 亿的魔法,否则我认为你应该考虑其他方法。
首先想到的是对数据进行分区。比如说,将一小时的数据放入每个分区。这将导致分区中大约有 15,000*60*60 = 5400 万条记录。大约每 20 小时,您可以删除一个分区。
分区的一大优点是插入性能应该很好,您不必删除单个记录。根据查询负载、索引和其他因素,可能会有额外的开销。但是,由于没有额外的索引和主要是插入的查询负载,它应该比尝试在插入时每秒删除 15,000 条记录更好地解决您的问题。
关于sql - 实现环形缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22711652/