Thread_跨节点集合查询
项目中数据库进行了水平切分,为了处理跨节点集合查询,采用了多线程并发操作的方式来处理,并且对各线程执行的结果进行操作,如果是返回结果集,则合并排序;如果是聚合操作,则求和。个人觉得该实现方式很有代表性,所以抽取了原型实现备忘。
?
集合处理:
?
import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class FixedConnectionPool {private int cpuCoreNumber = 2;private ExecutorService exec;private CompletionService<Object> completionService;public FixedConnectionPool(){this.cpuCoreNumber = Runtime.getRuntime().availableProcessors();//this.exec = Executors.newCachedThreadPool();this.exec = Executors.newFixedThreadPool(cpuCoreNumber);this.completionService = new ExecutorCompletionService<Object>(exec);}public int getCpuCoreNumber() {return cpuCoreNumber;}public void setCpuCoreNumber(int cpuCoreNumber) {this.cpuCoreNumber = cpuCoreNumber;}public ExecutorService getExec() {return exec;}public void setExec(ExecutorService exec) {this.exec = exec;}public CompletionService<Object> getCompletionService() {return completionService;}public void setCompletionService(CompletionService<Object> completionService) {this.completionService = completionService;}}
?
1 楼 zean 2012-09-19 这个问题很久以前就想过,如果多个节点返回的结果集都很大,怎么排序? 2 楼 charles751 2012-09-19 zean 写道这个问题很久以前就想过,如果多个节点返回的结果集都很大,怎么排序?结果集大也没办法,汇总后排序才能保证排序的正确性。 3 楼 charles751 2012-09-19 一般都是分页显示,每页显示的记录数不会很大,所以一般情况下结果集不会很大。 4 楼 dacoolbaby 2012-09-20 觉得用Java进行排序效率很低。
一般是不是应该在数据库前面再建一个像memcache这样的东西? 5 楼 charles751 2012-09-20 dacoolbaby 写道觉得用Java进行排序效率很低。
一般是不是应该在数据库前面再建一个像memcache这样的东西?
怎么得到的java排序效率低?
你打算用memcached做数据缓存还是什么?