快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

缅甸云鼎和记娱乐官网_机器人论坛



我们知道可以将一个海量记录的 MySQL 大年夜表根据主键、光阴字段,前提字段中分成多少个表以致保存在缅甸云鼎和记娱乐官网多少办事器中。

独一的问题便是跨办事器批量查询麻烦,只能经由过程利用法度榜样来办理。谈谈在Java中的办理思路。其他说话道理类缅甸云鼎和记娱乐官网似。

这里说的分表不是 MySQL 5.1 的 partition,而是工资把一个表分开存在多少表或不合的办事器。

1. 利用法度榜样级别实现

见教意图

SelectThreadManager 分表数据查询治理器

它为分表的每个d缅甸云鼎和记娱乐官网atabase or server 建立一个 thread pool

addTask() - 添加义务

stopTask() - 竣事义务

getResult() - 获取履行结果

最快的履行光阴 = 最慢的 MySQL 节点查询耗损光阴

最慢的履行光阴 = 超韶光阴

某个 ThreadPool 忙时刻处置惩罚流程

1. 要是 ThreadPoolN 异常忙,(也意味 DB N 异常忙);

2. 新的查询义务到来,addTask(), 新的义务的一个thread加到ThreadPoolN义务排队中

3. 外层利用已经得到其他 thread 返回结果,继承等待

4. 外层利用等待超时的光阴到,调用 stopTask() 设置该义务整个 thread 中的竣事标志, 外层利用返回。

5. 多少光阴后,ThreadPoolN取到该排队 Thread, 由于设置了竣事位,线程直接运行完成。

2. JDBC 层实现

做一个 JDBC Driver 的包装,拦截 PreparedStatement, S缅甸云鼎和记娱乐官网tatement 的 executeQuery()

然后调用 SelectThreadManager 完成

3. MySQL partition

MySQL 5.1 的 partition 功能因为单张表的数据跨文件,批量查询时刻缅甸云鼎和记娱乐官网同样存在上述问题,不过它是在 MySQL 内部实现的,不必要外部调用者关心。其查询实现的道理应该大年夜致类似。

但 partition 只办理了 IO 的瓶颈,并不能办理 CPU 谋略的瓶颈,是以无法代替传统的手工分表要领。

您可能还会对下面的文章感兴趣: