我可以通过 JPA 或在数据库级别为数据库表主键设置一个 MAX 值吗?如果不可能,那么我在考虑
key
在 0-9999999999 之间创建一个随机数(9999999999 是我的 MAX)- 使用新创建的数据库对数据库执行 SELECT
key
,如果返回对象是null
,则 INSERT,如果不重复,则返回步骤 1
因此,如果我执行上述操作,有两个问题。请记住,环境是高并发的:
Q1:用 SELECT 检查的开销,如果不存在,INSERT 是否显着?我真正的意思是:这个过程是否正常,因为通常我让数据库为我创建一个独特的 PK?
Q2:如果 Q1 没有造成显着的性能下降,我会遇到并发问题吗?例如,如果 P1 用 Id1 查表,Id1 不存在,它准备插入,P2 在 P1 可以之前偷偷插入 Id1。所以当 P1 插入 Id1 时,它会失败。我不希望这个过程在这里失败,我希望它回到循环,找到一个新的 id,重复这个过程。我怎么做?
我的环境是 SQL 和 MYSQL db。我将 JPA 与 Eclipselink 实现一起使用
注意:有些人质疑我以这种方式实现它的决定,答案正是TravisJ
下面的建议。我有一个非常高的并发环境。当一个进程启动时,我需要向另一个进程创建一个请求,向该进程传递一个唯一的 10 个字符长的 ID。由于环境是大电流,我想利用 PK 的独特而非空特性。请求中包含大量信息,因此我创建了一个Request
表,请求 Id 作为我的 PK。我知道,由于所有数据库都索引他们的 PK,因此查询出 PK 的速度很快。如果有更好的方法,请告诉我。