`

基于amoeba的mysql分布式数据库学习(一)

 
阅读更多

一、 下载 amoeba 代码

 

首先先到网站( http://sourceforge.net/projects/amoeba )上下载 amoeba for Mysql  代码。然后解压到

C:/amoeba  目录。增加系统环境变量: amoeba.home = C:/amoeba

 

二、 准备 mysql 数据库

 

Server1   localhost schema: test table: test_table2

Server2   10.2.224.241 schema: test table: test_table2

        

          表名称 test_table1 结构为:

                      `ID` INTEGER(11) NOT NULL,

                    `NAME` VARCHAR(250) COLLATE gbk_chinese_ci DEFAULT NULL,

        

          先插入一些模拟数据。

 

三、 修改配置文件

 

    找到amoeba.xml配置,修改mysql代理服务器配置信息:

 

Java代码   收藏代码
  1. <server>  
  2.     <!-- proxy server绑定的端口 -->  
  3.     <property name="port" > 8066 </property>  
  4.       
  5.     <!-- proxy server绑定的IP -->  
  6.     <property name="ipAddress" > 127.0 . 0.1 </property>  
  7.       
  8.     <!-- proxy server net IO Read thread size -->  
  9.     <property name="readThreadPoolSize" > 20 </property>  
  10.       
  11.     <!-- proxy server client process thread size -->  
  12.     <property name="clientSideThreadPoolSize" > 30 </property>  
  13.       
  14.     <!-- mysql server data packet process thread size -->  
  15.     <property name="serverSideThreadPoolSize" > 30 </property>  
  16.       
  17.     <!-- socket Send and receive BufferSize(unit:K)  -->  
  18.     <property name="netBufferSize" > 100 </property>  
  19.       
  20.     <!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->  
  21.     <property name="tcpNoDelay" > true </property>  
  22.       
  23.     <!-- 对外验证的用户名 -->  
  24.     <property name="user" >root</property>  
  25.       
  26.     <!-- 对外验证的密码 -->  
  27.     <property name="password" >admin</property>  
  28.       
  29. </server>  

 

 

 

     我设置的监控端口为:8066。

 

    配置两个数据库服务器地址,分别对应Server1和Server2。

  

    修改查询规则文件:

 

 

Java代码   收藏代码
  1. <tableRule name= "test_table2"  schema= "test"  defaultPools= "server2,server1" >  
  2.       
  3.   
  4.     <rule name="rule1" >  
  5.         <parameters>ID</parameters>  
  6.         <expression><![CDATA[  ID <= 20  ]]></expression>  
  7.         <defaultPools>server1</defaultPools>  
  8.         <readPools>server1</readPools>  
  9.         <writePools>server1</writePools>  
  10.     </rule>  
  11.   
  12.     <rule name="rule2" >  
  13.         <parameters>ID</parameters>  
  14.         <expression><![CDATA[ ID > 20  ]]></expression>  
  15.         <defaultPools>server2</defaultPools>  
  16.         <writePools>server2</writePools>  
  17.         <readPools>server2</readPools>  
  18.     </rule>  
  19.                </tableRule>   

 

 

 

    规则:以ID=20为界。

 

 

 

     OK,配置文件配置好了以后,我们可以执行:${amoeba.home}/bin/amoeba.bat ,启动代理服务器。

 

四、 编写查询代码

 

  

Java代码   收藏代码
  1. import  java.sql.Connection;  
  2. import  java.sql.DriverManager;  
  3. import  java.sql.PreparedStatement;  
  4. import  java.sql.ResultSet;  
  5. import  java.sql.SQLException;  
  6. import  java.sql.Statement;  
  7.   
  8. public   class  DataAccess {  
  9.   
  10.     private  String CONNECTION_STRING =  "jdbc:mysql://localhost:8066/test" ;  
  11. //  jdbc:mysql://localhost:8066   
  12.     private  String connErrInfo;  
  13.       
  14.     private  Connection conn;  
  15.       
  16.     public  DataAccess(){  
  17.         if (conn ==  null ){  
  18.             conn = GetConnObj();  
  19.         }  
  20.     }  
  21.   
  22.     public  Connection GetConnObj() {  
  23.         try  {  
  24.             Class.forName("com.mysql.jdbc.Driver" );  
  25.             conn = DriverManager.getConnection(CONNECTION_STRING,"root" , "admin" );  
  26.             return  conn;  
  27.         } catch  (ClassNotFoundException ex) {  
  28.             this .connErrInfo +=  ";dbConn ex:"  + ex.toString();  
  29.             ex.printStackTrace();  
  30.         } catch  (SQLException es) {  
  31.             this .connErrInfo +=  ";dbConn es:"  + es.getMessage();  
  32.             es.printStackTrace();  
  33.         } catch  (Exception e) {  
  34.             this .connErrInfo +=  ";dbConn e:"  + e.getMessage();  
  35.             e.printStackTrace();  
  36.         }  
  37.         return   null ;  
  38.     }  
  39.   
  40.     public  String commonUpdate(String rSqlString) {  
  41.         if  (conn !=  null ) {  
  42.             try  {  
  43.                 Statement stmt = conn.createStatement();  
  44.                 stmt.execute(rSqlString);  
  45.                 //conn.close();   
  46.             } catch  (SQLException e) {  
  47.                 return  e.getMessage();  
  48.             }  
  49.         }  
  50.         return   "" ;  
  51.     }  
  52.   
  53.       
  54.       
  55.     public  ResultSet commonSelect(String rSqlString) {  
  56.         if  (conn !=  null ) {  
  57.             try  {  
  58.                 Statement stmt = conn.createStatement();  
  59.                 stmt.execute(rSqlString);  
  60.                 ResultSet result = stmt.executeQuery(rSqlString);  
  61.                 //conn.close();   
  62.                 return  result;  
  63.             } catch  (SQLException es) {  
  64.                 this .connErrInfo =  "dbProcess es:"  + es.getMessage();  
  65.             } catch  (Exception e) {  
  66.                 this .connErrInfo =  "dbProcess e:"  + e.getMessage();  
  67.             }  
  68.         }  
  69.         return   null ;  
  70.     }  
  71.   
  72.       
  73.     public   void  close(){  
  74.         if (conn !=  null ){  
  75.             try  {  
  76.                 conn.close();  
  77.             } catch  (SQLException e) {  
  78.                 e.printStackTrace();  
  79.             }  
  80.         }  
  81.     }  
  82.       
  83.     public  String getConnErrInfo() {  
  84.         return  connErrInfo;  
  85.     }  
  86.   
  87.     public   void  setConnErrInfo(String connErrInfo) {  
  88.         this .connErrInfo = connErrInfo;  
  89.     }  
  90.   
  91.     public   static   void  main(String[] args)  throws  SQLException{  
  92.           
  93.         DataAccess dataAccess = new  DataAccess();  
  94.           
  95.         java.util.Date startDate = new  java.util.Date();  
  96.         ResultSet rs = dataAccess.commonSelect("select * from test_table2 where ID in(14,15,16,50)" );  
  97.         while (rs.next()){  
  98.             String siteName = (String)rs.getString("name" );  
  99.             System.out.println("siteName:"  + siteName );  
  100.         }  
  101.         java.util.Date endDate = new  java.util.Date();  
  102.         long  period = endDate.getTime() - startDate.getTime();  
  103.         System.out.println("耗费时间:"  + period);  
  104.           
  105.         dataAccess.close();  
  106.     }  
  107.   
  108.     public  Connection getConn() {  
  109.         return  conn;  
  110.     }  
  111.   
  112.     public   void  setConn(Connection conn) {  
  113.         this .conn = conn;  
  114.     }  
  115. }  

 

 

 

五、 查询结果

 

Java代码   收藏代码
  1. siteName: 10.2 . 224 .241_test_table1_14  
  2. siteName:10.2 . 224 .241_test_table1_15  
  3. siteName:10.2 . 224 .241_test_table1_16  
  4. siteName:test_table2_14  
  5. siteName:test_table2_15  
  6. siteName:test_table2_16  
  7. 耗费时间:156   

 

 

我现在只是模拟简单的规则查询,后面我们将逐步深入了解。

分享到:
评论

相关推荐

    基于Amoeba中间件的分布式数据库管理系统.pdf

    标题中提到的“基于Amoeba中间件的分布式数据库管理系统”涉及了数据库技术领域中的一个重要分支,即分布式数据库管理系统(Distributed Database Management System, DDBMS)。分布式数据库管理系统的出现是为了...

    amoeba分布式数据库解决方案

    Amoeba是一款专注于解决分布式数据库管理难题的中间件,它位于客户端与数据库服务器之间,为用户提供了一种透明的数据访问方式。具体来说,Amoeba的主要职责包括: - **数据切分**:通过对数据进行合理划分,将数据...

    amoeba[1]分布式数据库解决方案.pdf

    本文将详细介绍Amoeba这一分布式数据库Proxy解决方案的核心理念、架构特点及其应用场景。 #### 分布式数据库系统的优点 分布式数据库系统相比传统的集中式数据库系统拥有诸多优势: 1. **成本效益**:通过地理上...

    分布式数据库Proxy解决方案(mysql负载均衡)

    Amoeba 作为一种分布式数据库代理框架,为解决传统数据库面临的性能瓶颈、可靠性和扩展性等问题提供了有力的支持。通过其强大的功能集合,如数据切分、读写分离和负载均衡等,Amoeba 不仅能够有效提升系统的性能表现...

    amoeba-mysql-binary-2.2.0.tar

    Amoeba是一个分布式数据库中间件,它能够将一个MySQL实例透明地扩展到多个节点,实现数据的高可用性和负载均衡。这个tar文件可能包含了Amoeba运行所需的全部文件,如配置文件、库文件和可执行文件等。 描述中提到了...

    amoeba-mysql-3.0.5-RC-distribution.zip

    Amoeba MySQL 是一个分布式数据库系统,它基于开源的 MySQL 数据库引擎,旨在提供高可用性、可扩展性和性能优化。3.0.5 RC(Release Candidate)版本是该软件的一个候选发布版本,通常在正式版发布前,供用户测试和...

    amoeba.pdf

    综上所述,Amoeba作为一个分布式数据库代理开发框架,通过其独特的设计和功能,为分布式数据库的管理提供了一种高效、可扩展的解决方案。它通过减少客户端与数据库之间的直接交互,隐藏了数据分布的复杂性,使数据库...

    amoeba-mysql-binary-2.2.0.tar.gz

    Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性...

    amoeba-mysql-1.0.2-BETA.zip_SQL 高并发_mysql-proxy java_代理_分布式java_

    Amoeba属于分布式数据库代理开发框架,专注于分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户 端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请 求...

    amoeba-mysql

    Amoeba作为MySQL的一个扩展,它在后端实现了数据的自动分片、路由和聚合,使得应用程序可以像操作单个数据库一样操作分布式数据库。 【文件名称】"amoeba-mysql-3.0.4-BETA" 提示我们这是Amoeba MySQL的一个版本,...

    mysql分布式思维(十一)- MySQL Cluster

    Amoeba是一种分布式数据库中间件,可与MySQL Cluster结合使用,提供更高级别的负载均衡和数据分片功能。Amoeba将SQL请求分散到多个MySQL实例,以提升系统处理能力。在入门级amoeba.doc文档中,可能包含关于如何设置...

    Amoeba+mysql 读写分离 Keepalived+mysql

    Amoeba 是一个分布式数据库中间件,主要用于MySQL的读写分离。它的主要作用是将读操作分发到多个从库,从而减轻主库的压力,提高系统整体的读取性能。Amoeba 通过透明的方式工作,应用程序无需修改即可直接连接到...

    MySQL分布式集群之MyCAT权威指南

    Cobar是由 Alibaba 开源的 MySQL 分布式处理中间件,它可以在分布式的环境下看上去像传统数据库一样提供海量数据服务。 Cobar自诞生之日起, 就受到广大程序员的追捧,但是自2013年后,几乎没有后续更新。在此情况下...

    amoeba集群文档+Amoeba使用指南pdf+mysql主从同步

    Amoeba是一种分布式数据库中间件,主要用于MySQL数据库的水平扩展。它通过分片(Sharding)技术将大型单一数据库拆分为多个较小的部分,称为分片,然后将这些分片分布到不同的服务器上。Amoeba在各个分片之间提供...

    amoeba-mysql-1.2.0-RC3.zip

    MySQL集群是一种分布式数据库解决方案,通过复制和分发数据到多个节点来提高可用性和可扩展性。Amoeba作为集群的一部分,可以协助实现这一目标。 在压缩包的文件列表中,我们可以看到以下几个关键文件: 1. README...

    windows平台用amoeba实现读写分离

    这个软件基于Java致力于MySQL的分布式数据库前端代理层,处于在应用和数据库之间,对客户端透明,它主要在应用层访问MySQL的时候充当SQL路由功能,解析应用传递过来的SQL语句,专注于分布式数据库代理层(Database ...

    amoeba-mysql-binary

    "amoeba-mysql-binary" 是一个与MySQL数据库相关的开源项目,其主要功能是提供一种分布式解决方案,用于扩展MySQL服务器的能力,提升数据库的可扩展性和可用性。Amoeba这个名字来源于生物学中的变形虫,寓意该系统...

    amoeba-mysql-0.18.tar.gz

    Amoeba MySQL 作为一个项目,可能是一个数据库中间件或分布式数据库解决方案,用于扩展 MySQL 的性能和可用性。它可能通过将数据库操作分片到多个 MySQL 实例上来实现水平扩展,从而提高处理大量并发请求的能力。...

    amoeba使用教程

    Amoeba是一款开源的分布式数据库前端代理层,主要用于MySQL数据库的分布式管理。它在2008年开始发布,设计目标是解决传统集中式数据库系统的性能瓶颈、可靠性和可扩展性问题。Amoeba作为SQL路由工具,位于客户端和...

Global site tag (gtag.js) - Google Analytics