【发布时间】:2009-08-20 07:19:17
【问题描述】:
我想做的小演示:
考虑这样一种情况,公司的不同人员每年一次去某个地方进行一次所有费用支付的旅行。可能有 1000 人有资格参加这次旅行,但只有 16 个名额可用。
这 16 个地点中的每一个都有一个关联的索引,该索引必须从 1 到 16。预订中的索引从 17 开始。
前 16 名申请的人将在行程中获得一个确定的位置。其余的最终在预订名单上。如果前 16 人中的一个人取消了,第一个有预订的人将获得他的位置,所有索引都会重新编号以补偿取消的人。
所有这些都在带有 Oracle DB 的 Java Web 应用程序中进行管理。
现在,我的问题:
我必须以正确的方式管理索引(所有顺序,没有重复的索引),可能有数百人同时申请旅行。
在表中插入记录为行程时,获取索引的方式是通过
SELECT MAX(INDEX_NR) + 1 AS NEXT_INDEX_NR FROM TABLE
并将其用作新索引(这是在 Java 端完成的,然后是新查询以插入记录)。很明显为什么我们有多个具有相同索引的景点或预订。因此,假设有 19 人在旅途中,因为其中 4 人的索引为 10。
我该如何管理?到目前为止,我一直在考虑 3 种方法:
- 对 DB 事务使用隔离级别
Serializable(不喜欢这个); - 插入没有
INDEX_NR的记录,然后让触发器管理这些事情……以某种方式(以前从未使用过触发器); - 每条记录还有一个
UPDATED列。我可以以某种方式使用它吗? (请注意,我不能丢失INDEX_NR,因为应用程序的其他部分会使用它)。
有没有最好的方法来做到这一点?
【问题讨论】:
标签: java database oracle concurrency