• 从零开发分布式数据库中间件 一、读写分离的数据库中间件(转)


    <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 + "&nbsp;&nbsp;";
                        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作为一主两从的数据库源即可,下面是我本机的数据库连接配置文件,其中有一主两从:

    1. master.driver=com.mysql.jdbc.Driver  
    2. master.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db  
    3. master.user=root  
    4. master.password=mytestcon  
    5.   
    6. slave1.driver=com.mysql.jdbc.Driver  
    7. slave1.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db  
    8. slave1.user=root  
    9. slave1.password=mytestcon  
    10.   
    11. slave2.driver=com.mysql.jdbc.Driver  
    12. slave2.dburl=jdbc:mysql://127.0.0.1:3306/master_slave_db  
    13. slave2.user=root  
    14. slave2.password=mytestcon  
    有了主从数据库的连接配置后,就可以将配置进行封装。

    封装的DataSource类:

    1. public class DataSource {  
    2.   
    3.     private String driver;  
    4.   
    5.     private String url;  
    6.   
    7.     private String user;  
    8.   
    9.     private String password;  
    10.   
    11.   
    12.     public String getDriver() {  
    13.         return driver;  
    14.     }  
    15.   
    16.     public void setDriver(String driver) {  
    17.         this.driver = driver;  
    18.     }  
    19.   
    20.     public String getUrl() {  
    21.         return url;  
    22.     }  
    23.   
    24.     public void setUrl(String url) {  
    25.         this.url = url;  
    26.     }  
    27.   
    28.     public String getUser() {  
    29.         return user;  
    30.     }  
    31.   
    32.     public void setUser(String user) {  
    33.         this.user = user;  
    34.     }  
    35.   
    36.     public String getPassword() {  
    37.         return password;  
    38.     }  
    39.   
    40.     public void setPassword(String password) {  
    41.         this.password = password;  
    42.     }  
    43. }  
    在Spring配置文件中,从配置文件中读取配置并将配置转换为封装的DataSource类:
    1. <bean id="masterDataSource" class="com.happyheng.connection.DataSource">  
    2.     <property name="driver" value="${master.driver}"/>  
    3.     <property name="url" value="${master.dburl}"/>  
    4.     <property name="user" value="${master.user}"/>  
    5.     <property name="password" value="${master.password}"/>  
    6. </bean>  
    7.   
    8. <bean id="slaveDataSource1" class="com.happyheng.connection.DataSource">  
    9.     <property name="driver" value="${slave1.driver}"/>  
    10.     <property name="url" value="${slave1.dburl}"/>  
    11.     <property name="user" value="${slave1.user}"/>  
    12.     <property name="password" value="${slave1.password}"/>  
    13. </bean>  
    14.   
    15. <bean id="slaveDataSource2" class="com.happyheng.connection.DataSource">  
    16.     <property name="driver" value="${slave2.driver}"/>  
    17.     <property name="url" value="${slave2.dburl}"/>  
    18.     <property name="user" value="${slave2.user}"/>  
    19.     <property name="password" value="${slave2.password}"/>  
    20. </bean>  
    21.   
    22. <bean id="propertyConfigurer"  
    23.       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    24.     <property name="locations">  
    25.         <list>  
    26.             <value>classpath:dataSource.properties</value>  
    27.         </list>  
    28.     </property>  
    29. </bean>  
        </div>
     <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
    <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</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>
    
  • 相关阅读:
    DP_knapsack
    也谈交换两个变量
    SidebySide Assembly
    Generate permutation for N elements
    Pixel Shader 像素着色
    Drill into View Matrix
    使用D3DXCreateSphere绘图的步骤
    原来VisualStudio本身也可以查看调试信息
    DirectX Effects初探
    Shortcuts
  • 原文地址:https://www.cnblogs.com/jpfss/p/8136349.html
Copyright © 2020-2023  润新知