<h1>
<span class="link_title"><a href="/happyheng/article/details/54176951">
从零开发分布式数据库中间件 一、读写分离的数据库中间件
</a>
</span>
</h1>
<div class="article_manage clearfix">
<div class="article_l">
</div>
</div> <style type="text/css">
.embody{
padding:10px 10px 10px;
margin:0 -20px;
border-bottom:solid 1px #ededed;
}
.embody_b{
margin:0 ;
padding:10px 0;
}
.embody .embody_t,.embody .embody_c{
display: inline-block;
margin-right:10px;
}
.embody_t{
font-size: 12px;
color:#999;
}
.embody_c{
font-size: 12px;
}
.embody_c img,.embody_c em{
display: inline-block;
vertical-align: middle;
}
.embody_c img{
30px;
height:30px;
}
.embody_c em{
margin: 0 20px 0 10px;
color:#333;
font-style: normal;
}
</style>
<script type="text/javascript">
$(function () {
try
{
var lib = eval("("+$("#lib").attr("value")+")");
var html = "";
if (lib.err == 0) {
$.each(lib.data, function (i) {
var obj = lib.data[i];
//html += '<img src="' + obj.logo + '"/>' + obj.name + " ";
html += ' <a href="' + obj.url + '" target="_blank">';
html += ' <img src="' + obj.logo + '">';
html += ' <em><b>' + obj.name + '</b></em>';
html += ' </a>';
});
if (html != "") {
setTimeout(function () {
$("#lib").html(html);
$("#embody").show();
}, 100);
}
}
} catch (err)
{ }
});
</script>
<div class="category clearfix">
在传统的单机体系中,我们在操作数据库时,只需要直接得到数据库的连接,然后操作数据库即可,可是在现在的数据爆炸时代,只靠单机是无法承载如此大的用户量的,即我们不能纵向扩展,那么我们就只能水平进行扩展,即使用读写分离的主从数据库来缓解数据库的压力,而在读写分离之后,如何使程序能正确的得到主数据库的连接或者是从数据库的连接,就是我们今天读写分离的数据库中间件需要实现的。
一、主从数据库介绍:
主从数据库即为一个主数据库会有对应n个从数据库,而从数据库只能有一个对应的从数据库。主从数据库中写的操作需要使用主数据库,而读操作使用从数据库。主数据库与从数据库始终保持数据一致性。其中保持数据库一致的原理即为当主数据库数据发生变化时,会将操作写入到主数据库日志中,而从数据库会不停的读取主数据库的日志保存到自己的日志系统中,然后进行执行,从而保持了主从数据库一致。
二、开发前准备及ConnectionFactory类的开发:
在了解了主从数据库后,我们可以进行分布式数据库中间件的开发,由于mysql本身支持主从数据库,但限于篇幅,就不讲mysql的主从配置了,我们先使用本机的mysql作为一主两从的数据库源即可,下面是我本机的数据库连接配置文件,其中有一主两从:
- master.driver=com.mysql.jdbc.Driver
- master.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db
- master.user=root
- master.password=mytestcon
- slave1.driver=com.mysql.jdbc.Driver
- slave1.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db
- slave1.user=root
- slave1.password=mytestcon
- slave2.driver=com.mysql.jdbc.Driver
- slave2.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db
- slave2.user=root
- slave2.password=mytestcon
封装的DataSource类:
- public class DataSource {
- private String driver;
- private String url;
- private String user;
- private String password;
- public String getDriver() {
- return driver;
- }
- public void setDriver(String driver) {
- this.driver = driver;
- }
- public String getUrl() {
- return url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- public String getUser() {
- return user;
- }
- public void setUser(String user) {
- this.user = user;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
- <bean id="masterDataSource" class="com.happyheng.connection.DataSource">
- <property name="driver" value="${master.driver}"/>
- <property name="url" value="${master.dburl}"/>
- <property name="user" value="${master.user}"/>
- <property name="password" value="${master.password}"/>
- </bean>
- <bean id="slaveDataSource1" class="com.happyheng.connection.DataSource">
- <property name="driver" value="${slave1.driver}"/>
- <property name="url" value="${slave1.dburl}"/>
- <property name="user" value="${slave1.user}"/>
- <property name="password" value="${slave1.password}"/>
- </bean>
- <bean id="slaveDataSource2" class="com.happyheng.connection.DataSource">
- <property name="driver" value="${slave2.driver}"/>
- <property name="url" value="${slave2.dburl}"/>
- <property name="user" value="${slave2.user}"/>
- <property name="password" value="${slave2.password}"/>
- </bean>
- <bean id="propertyConfigurer"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:dataSource.properties</value>
- </list>
- </property>
- </bean>
</div>
<div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank"> </a> </div>
<div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank"> </a></div>
<script type="text/javascript">
function btndigga() {
$(".tracking-ad[data-mod='popu_222'] a").click();
}
function btnburya() {
$(".tracking-ad[data-mod='popu_223'] a").click();
}
</script>