我想要一个持久的分布式计数器。我的想法是使用数据库序列。仅有顺序。我不想有一个表,因为我不会填充该表。我只需要一系列唯一的数字。
我不想使用天真的select mys-seq.nextval from Dual
(或org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer
),因为我会喜欢使用序列缓存能力 - 我不想每次需要新号码时都访问数据库。
我想我应该使用org.hibernate.id.enhanced.SequenceStyleGenerator
,但我找不到任何如何在没有实体的情况下“独立”使用它的示例。
不幸的是,我发现的所有示例都描述了如何使用序列配置实体 ID 生成。
PS。我有 Spring Boot 应用程序。最佳答案
我找到了解决问题的简单解决方案:我可以将数据库序列中的每个数字视为要使用的数字范围。例如,如果序列返回 5,则意味着我的计数器的保留范围是 5000 - 5999。
在该解决方案中,我将针对数千个数字访问数据库一次。
最初我认为我必须利用内部数据库级序列号缓存,但我可以通过简单的应用程序级缓存实现相同的结果
关于java - 如何使用 Hibernate 对 Oracle 序列实现持久计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152600/