数据库的一个表中在1万条记录每次返回5条,分2000次返回,怎么分发数据,SQL相关
数据库一个表中有5万条记录,4万条已处理,其中有1万条要处理。处理完是5万条已处理。每次访问处理其中的5条。但允许并行访问,比如允许10个人(或线程)每个人处理5条。一次...
数据库一个表中有5万条记录,4万条已处理,其中有1万条要处理。处理完是5万条已处理。
每次访问处理其中的5条。但允许并行访问,
比如允许10个人(或线程)每个人处理5条。一次就处理50条。
1、怎么查询数据库并分发数据给每个人才能保证不会重复。比如避免2个人拿到同一条记录。
2、要较少地查询数据库。查太多影响效率,
即保证数据不重复分发、和高效处理。
请简单说说方法,任意语言,伪代码,SQL....
(我的环境是Java JPA/Criteria+Derby数据库)
3、一次也不能全查出来,内存有限。。假设最多查出1000条。 展开
每次访问处理其中的5条。但允许并行访问,
比如允许10个人(或线程)每个人处理5条。一次就处理50条。
1、怎么查询数据库并分发数据给每个人才能保证不会重复。比如避免2个人拿到同一条记录。
2、要较少地查询数据库。查太多影响效率,
即保证数据不重复分发、和高效处理。
请简单说说方法,任意语言,伪代码,SQL....
(我的环境是Java JPA/Criteria+Derby数据库)
3、一次也不能全查出来,内存有限。。假设最多查出1000条。 展开
4个回答
展开全部
相当于分页,hibernate 的Criteria 有setFirstResult 和setMaxResult ,用页大小动态设置起始记录和记录数,循环查询几次就ok了
更多追问追答
追问
但按这种分页情况,试想,
我从50000条中查出50条,分给10个人每个处理5条。我可能需要【等齐10个人都处理完成】才能再读下一个50条。
如果不等齐,就会出现新读的50条中某条可能是其中某个人正在处理的,就会重复处理,怎么避免不新读到已经分配但没处理完的??
如果等待,这种等待会导致性能闲置哇。。
追答
1.用一定的排序方法,维护好你的分页查询参数,确保你每次从数据库拿出来的记录不会有重复。
2,多线程处理这里,你不一定要每次都拿50条,分好任务,你可以拿更多放一个队列缓存区(要做到第1点不重复),而分配机制也改一下,空闲的线程就接一定数量任务。
2015-02-04
展开全部
mysql有一个函数可以返回影响的结果集在Mysql中ROW_COUNT()返回前一个SQL进行UPDATE,DELETE,INSERT操作所影响的行数。SELECT 影响的就用FOUND_ROWS()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-02-04
展开全部
弄个线程队列。。每五条数据加入一次队列,然后另外的代码依次处理队列里的每一个记录
追问
关键在怎么查询db,怎么从5万条中每次查出50条未处理的,而又不是正在处理但没处理完的数据。最好不需要等处理完再查。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-02-04
展开全部
顶顶更健康
追问
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询