我需要一种解决方案,以便在并发时间内在sql DB中插入很多行。
我有一条规则,每次插入交易表时,我都需要一个由currentTime + transactionSource + sequenceNumber组成的唯一ID。我的问题是,当我使用Jmeter测试服务时,当并发插入过程最多达到3000行时,该服务将关闭。问题取决于我生成的唯一ID的重复。因此,有一些重复项。在我的假设中,重复发生是因为先前的插入过程尚未完成,但是还有另一个插入过程。因此,它会生成唯一的ID重复。 谁能以最好的方式给我建议?谢谢。
答案 0 :(得分:0)
为什么不让数据库处理插入ID,然后使用包含所需格式的辅助字段更新行?如果您有重复项,则始终可以将行ID附加到此标识符上,这样它将始终是唯一的。
答案 1 :(得分:0)
MySQL有三种很棒的方法来确保id是唯一的:
auto_increment
列uuid()
uuid_short()
使用它们!实现唯一ID的最常见方法是第一个:
create table t (
t_id int auto_increment primar key,
. . .
)
我强烈建议您不要保留自己的ID。您将获得比赛条件(如您所见)。您的代码将比数据库中的代码效率低。如果需要单独的组件,则可以在表中将其作为列来实现。
换句话说,您的基本问题是您的“规则”。没有这样的规则,世界上有成千上万的数据库可以很好地运行。