我有一个数据库表,其中主键被定义为时间戳。应用程序根据触发的特定事件向数据库插入记录,所使用的时间戳将是创建此实例的时间戳。由于该应用程序在多个服务器上运行,并且该事件同时在多个服务器上触发,因此在某些情况下,由于主键冲突,数据不会插入到数据库中。
为了避免这种情况,我可以做什么改变呢?我现在的想法是,
在执行数据库插入之前等待一个随机时间。
随机r=新随机();长时间= r.nextLong() % 1000;时间=时间<0?-time : time;//确保等待时间为正尝试{Thread.sleep(时间);} catch (InterruptedException e) {抛出新的CustomeException(e);}Table1DataAccess.getInstance().insert(新日期(),“一些描述”);//将数据插入有两个字段的表中。使主键成为复合键。这两种方法对我来说都不是很好的解决方案,有人能给我指明正确的方向吗?
我尝试插入数据的表有Date类型的时间戳列,我猜它的精度只有几秒。当我使用timestamp类型时,它提供了微秒的默认精度,并且它可以提供最大的纳秒。