oracle 并行处理问题
业务是这样的,在一个方法中先取出前100条记录且status字段为0,接着就把这100条记录的status字段设置为1,然后进行下一步操作。上线的时候把这个工程部署到两台...
业务是这样的,在一个方法中先取出前100条记录且status字段为0,接着就把这100条记录的status字段设置为1,然后进行下一步操作。
上线的时候把这个工程部署到两台机器上,当两台机器启动后,必然在某一时间点会取出一样的数据,怎么样避免这样的情况?不让取同样的数据。 展开
上线的时候把这个工程部署到两台机器上,当两台机器启动后,必然在某一时间点会取出一样的数据,怎么样避免这样的情况?不让取同样的数据。 展开
3个回答
展开全部
使用分页SQL啊,先建立一个flag字段,作为标志位
步骤一:
机器A:
以主键asc排序,取前100,修改,将flag置一
机器B:
已主键asc排序,取100-200,修改,将flag置一
步骤二:
机器A:
待所有的机器的SQL都运行完之后,取flag为0的前100数据,修改,置一
机器B:
取flag为0的100-200数据,修改,置一
步骤三:
循环
你的这个问题有点偏向于理论,生产环境下不会那么巧合,碰到这种情况
PS:又看了一下你的问题,你的意思是不是并发环境下的一致性控制的问题啊,如果是的话,建议你去搜一下"oracle 当前读"关键字,可能会对oracle并发控制的原理有一定的了解
希望对你有帮助
步骤一:
机器A:
以主键asc排序,取前100,修改,将flag置一
机器B:
已主键asc排序,取100-200,修改,将flag置一
步骤二:
机器A:
待所有的机器的SQL都运行完之后,取flag为0的前100数据,修改,置一
机器B:
取flag为0的100-200数据,修改,置一
步骤三:
循环
你的这个问题有点偏向于理论,生产环境下不会那么巧合,碰到这种情况
PS:又看了一下你的问题,你的意思是不是并发环境下的一致性控制的问题啊,如果是的话,建议你去搜一下"oracle 当前读"关键字,可能会对oracle并发控制的原理有一定的了解
希望对你有帮助
展开全部
你这个问题很奇怪。。。 想不出是什么样的业务会有这种需求?能描述一下么?
从技术上来说,有2个办法
1. 前一个机器取完之后,就删掉取出的数据
OR
2. 在表里设置一个标志段,前一个取完之后,把标志段设置为已经取过。后边的就取没取过的好了
从技术上来说,有2个办法
1. 前一个机器取完之后,就删掉取出的数据
OR
2. 在表里设置一个标志段,前一个取完之后,把标志段设置为已经取过。后边的就取没取过的好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.....oracle并行处理问题解决.....(有意思的问题么?)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询