插入一个增加1的字段的新记录

时间:2014-06-04 22:42:05

标签: sql database db2

我有一张表,基本上可以视为三元组的集合(id,key,sequence_number)。 我需要使用相同的键顺序编号记录。一段时间后的表格内容可能是(忽略id字段,无关紧要):

("aaa", 5)
("bbb", 12)
("aaa", 6)
("ccc", 1)
("aaa", 7)
("bbb", 13)

值必须是连续的,序列中没有间隙。我如何以便宜的方式在多进程环境中实现这一点(没有锁定所有内容,最好没有悲观锁定)? 插入相同密钥的值很少(使用给定密钥的几个条目,数十万个密钥)

另一种方法是使用一个表(key,last_sequence_number)来存储给定密钥的最新序列号。这很容易更新(悲观或乐观锁定)。但是,有没有办法有效地使用以前的方法?

编辑: 我想实施https://www.youtube.com/watch?v=Ef9W2whkCeE(大约第6分钟)。不,我可能不需要我上面要求的内容,但我想知道如何实现它。

1 个答案:

答案 0 :(得分:1)

根据您的要求:

  

值必须是连续的,序列中没有间隙

我不明白为什么你仍然存储不符合的值:例如对于aaa,存在间隙和重复值。根据您为什么需要该序列号,您可能最好存储带有间隙保证唯一增加数字,例如时间戳或常规SQL序列值,这两者都不会需要锁定,并使用其中一个OLAP函数生成无间隙编号:row_number()dense_rank()