MySQL子表中数以百万计记录分布式存储的批查询设计模式的详细解决方案

我们知道,根据主键、时间字段和条件字段,我们可以将一个大型MySQL表分成若干表,甚至将其保存在多个服务器中。
唯一的问题是查询服务器,在服务器上,只能通过应用解决。谈论java解决方案。其他语言的原则是相似的。
这里描述的子表不是MySQL 5.1的分区,而是一个从多个表或不同服务器分离表的人。
1。应用层的实现
看原理图



electthreadmanager子表数据的查询管理器
它为子表的每个数据库或服务器建立一个线程池。
AddTask()-添加一个任务
StopTask()-停止任务
GetResult()获取执行结果
最快执行时间=最慢的MySQL节点查询消耗时间
最慢执行时间=超时时间
一个繁忙的线程池处理过程
1。如果ThreadPoolN很忙(这也意味着,分贝N很忙);
2。新的查询任务到达,addtask(),一个线程的新任务添加到任务队列的threadpooln
三.外部应用程序获得其他线程返回,并继续等待
4。外层是等待超时打stoptask()在所有线程的任务设置停车标志,与外部应用程序返回。
后5。次,ThreadPoolN需要排队的线程因为停止位设置和线程是直接运行。
2。JDBC层实现
做一个JDBC驱动程序包,拦截PreparedStatement,声明的executeQuery()
然后打电话给selectthreadmanager完成
三.MySQL分区
MySQL 5.1的分区函数也存在于单页数据跨文件的批处理查询中。但是,它是在MySQL内部实现的,不需要外部调用方来关心。
但分区只解决了IO的瓶颈,并没有解决CPU计算的瓶颈,不能代替传统的手工子表方法。