问题 哪个更好:单个全局序列与每个表的序列?


在使用本机Oracle序列的JPA / Hibernate应用程序中,使用单个全局序列更好 hibernate_sequence,或者为每个表定义一个单独的序列?

看起来单个序列更容易维护,但通过制作更长的ID可能会使故障排除或即席查询变得更难。


4514
2017-10-14 23:35


起源

你了解Java的长度有多大吗?很多应用程序不得不担心使用很长时间的ID会耗尽,即使他们对所有对象使用单个序列并运行了100年。 - Ryan Stewart
这里有关于这个问题的更多讨论(stackoverflow.com/questions/1536479/...) - jeff
是的,我只是做了数学计算并意识到溢出64位长的问题是不现实的。我确实想到了使用单个序列的另一个好理由:如果表格内容以某种方式与它们的序列分开,您可以从单个表格中更容易地重新生成最大值。 - wrschneider


答案:


虽然缓存可以缓解它,但是当多个会话需要下一个会话时,序列可能会导致争用。 如果有一个序列服务于所有表,那么所有表上的所有插入都将争用相同的序列。如果您在执行之后,每个表的一个序列将减少争用。


13
2017-10-15 13:15



好点 - 接受这个答案,因为争论是我没有想到的一件事,虽然并发插入不太可能是我个人的因素。其他问题 - 用于故障排除的低#的清晰度和便利性,与要维护的更多Oracle对象相比,似乎主要是偏好问题。 - wrschneider
您可能对此主题感兴趣: asktom.oracle.com/pls/asktom/... - Vadim Kirilchuk


单个序列表示两个表中没有匹配的ID。在实践中我喜欢这样,因为当你不小心查询错误的表时,你永远无法获得某些东西。删除特别有用。这是一件小事,但我发现它很有用。


2
2018-01-23 20:33





我建议你每桌使用一个序列。在我的书中它只是一点清洁。我目前就业的标准是每桌的顺序。


1
2017-10-15 02:40