我正在考慮編寫一個Cascading應用程序,它向每個查詢可以返回數百萬行的MYSQL數據庫發出SELECT語句。MySQL的負載均衡級聯JDBCTap
每個數據庫中存在N個奴隸和一個主,如下所示:http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html#figure_replication-scaleout
在JDBCTap,我看,我們只能通過一個主機名:這意味着,我所有的映射器會嘗試連接到一個單一的奴隸(而其他(N-1)個從站空閒)。
假設從站前沒有負載均衡器,是否有一個JAVA包/模塊/代理(或更好的,自定義的JDBCTap實現),我可以使用它可以分散映射器跨N個從站的連接?
使用,似乎要做到這一點在這裏詳細描述硬件代理的腳本樣例:http://blog.netoearth.com/html/201006/building-a-mysql-load-balancing-proxy-with-trafficscript.htm
如果這樣的事情不存在,我會創造我自己的JDBCTap(即展開從映射器的連接跨越N個slave),使用下面的算法:
- 保持外部數據庫上的N個slave的列表(任何支持併發寫入/更新以及)
- 有已連接對每個映射器的反奴隸
- 映射器每次需要連接到一個從站時,它都會查詢該數據庫以找出負載最少的從站(連接映射器的最小計數)。碰撞中的隨機搶七。
這聽起來像個好主意嗎?外部數據庫「支持並行寫入/更新」可能是什麼?我上面提到的是什麼? (Cassandra,VoltDB等)