重复,因为Oracle太快或多线程?

iai*_*nie 0 java performance web-services duplicates oracle11g

我有一个问题,重复记录通过Java Web服务到达我们的数据库,我认为这与Oracle处理线程有关.

使用我们构建的iPhone应用程序,用户将鸟类观察添加到他们度假时访问的新站点.他们在"新站点A"创建了三个记录(例如).iPhone将这三个记录中的每一个打包成包含相同日期和位置详细信息的单独JSON字符串.

在上载时,Web服务遍历每个JSON字符串.
迭代/观察1.它检查数据库以查看该站点是否存在,如果不存在,则创建一个新站点并将观察结果添加到挂起表中.
迭代/ Obs 2.该站点现在应该存在于数据库中,但是在迭代1中数据库站点检查找不到该站点,并且创建了第二个新站点.
迭代/ Obs 3.检查现有站点NOW WORKS,第三个观察结果附加到其中一个现有站点.因此,Web服务和数据库代码确实有效.

Web服务在每次迭代结束时提交.

第二次迭代的原因是由于Java调用后的Oracle提交延迟而未在数据库中找到新站点,因此在迭代1真正完成时它已经开始处理迭代2,或者是否可能Oracle是否在单独的线程上运行每次迭代?

我们想到的一个解决方案是在Web服务中使用Thread.sleep(1000),但我宁愿不惩罚iPhone用户.

感谢您的任何帮助,您可以提供.伊恩

Joe*_*ckx 6

对我来说听起来像是一场竞争.可能你的观察1和2彼此非常接近,所以当2到达时1仍在处理.Oracle符合ACID标准,这意味着您的观察事务2无法查看事务一中所做的更改,除非事务二开始之前完成此更改.

如果您需要检查然后创建功能,则最好在后端的单个点同步此功能.

此外,在数据库中添加约束以避免不惜一切代价重复.