`
longgangbai
  • 浏览: 7280098 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[转]关系型数据的分布式处理系统Cobar

阅读更多

转载自:

http://code.alibabatech.com/wiki/display/cobar/Home

概述

Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

  • 产品在阿里巴巴B2B公司已经稳定运行了3年以上。
  • 目前已经接管了3000+个MySQL数据库的schema,为应用提供数据服务。
  • 据最近统计cobar集群目前平均每天处理近50亿次的SQL执行请求。

快速启动

场景描述

  • 系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。
  • tb1表的数据被映射到物理数据库dbtest1的tb1上。
  • tb2表的一部分数据被映射到物理数据库dbtest2的tb2上,另外一部分数据被映射到物理数据库dbtest3的tb2上。
    如下图所示:

步骤一:环境准备

  • 软件准备

    操作系统: Linux或者Windows (推荐在Linux环境下运行Cobar)
    MySQL: http://www.mysql.com/downloads/ (推荐使用5.1以上版本)
    JDK: http://www.oracle.com/technetwork/java/javase/downloads/ (推荐使用1.6以上版本)
    Cobar: http://code.alibabatech.com/wiki/display/cobar/release/ (下载tar.gz或者zip文件)

  • 数据准备

    假设本文MySQL所在服务器IP为192.168.0.1,端口为3306,用户名为test,密码为空,我们需要创建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,脚本如下:

    数据库创建脚本
    #创建dbtest1
    drop database if exists dbtest1;
    create database dbtest1;
    use dbtest1;
    #在dbtest1上创建tb1
    create table tb1(
    id    int not null,
    gmt   datetime);
     
    #创建dbtest2
    drop database if exists dbtest2;
    create database dbtest2;
    use dbtest2;
    #在dbtest2上创建tb2
    create table tb2(
    id    int not null,
    val   varchar(256));
     
    #创建dbtest3
    drop database if exists dbtest3;
    create database dbtest3;
    use dbtest3;
    #在dbtest3上创建tb2
    create table tb2(
    id    int not null,
    val   varchar(256));

步骤二:部署和配置Cobar

请确保机器上设置了JAVA环境变量JAVA_HOME
  • 下载Cobar压缩文件并解压,进入conf目录可以看到schema.xml, rule.xml, server.xml等相关的配置文件
    wget http://code.alibabatech.com/mvn/releases/com/alibaba/cobar/cobar-server/1.2.4/cobar-server-1.2.4.tar.gz
    tar zxf cobar-server-1.2.4.tar.gz
    cd cobar-server-1.2.4 #可以看到bin,conf,lib,logs四个目录
  • schema.xml配置如下(注意:schema.xml包含MySQL的IP、端口、用户名、密码等配置,您需要按照注释替换为您的MySQL信息。)
    schema.xml 配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE cobar:schema SYSTEM "schema.dtd">
    <cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
     
      <!-- schema定义 -->
      <schema name="dbtest" dataNode="dnTest1">
        <table name="tb2" dataNode="dnTest2,dnTest3" rule="rule1" />
      </schema>
     
      <!-- 数据节点定义,数据节点由数据源和其他一些参数组织而成。-->
      <dataNode name="dnTest1">
        <property name="dataSource">
          <dataSourceRef>dsTest[0]</dataSourceRef>
        </property>
      </dataNode>
      <dataNode name="dnTest2">
        <property name="dataSource">
          <dataSourceRef>dsTest[1]</dataSourceRef>
        </property>
      </dataNode>
      <dataNode name="dnTest3">
        <property name="dataSource">
          <dataSourceRef>dsTest[2]</dataSourceRef>
        </property>
      </dataNode>
     
      <!-- 数据源定义,数据源是一个具体的后端数据连接的表示。-->
      <dataSource name="dsTest" type="mysql">
        <property name="location">
          <location>192.168.0.1:3306/dbtest1</location> <!--注意:替换为您的MySQL IP和Port-->
          <location>192.168.0.1:3306/dbtest2</location> <!--注意:替换为您的MySQL IP和Port-->
          <location>192.168.0.1:3306/dbtest3</location> <!--注意:替换为您的MySQL IP和Port-->
        </property>
        <property name="user">test</property> <!--注意:替换为您的MySQL用户名-->
        <property name="password"></property> <!--注意:替换为您的MySQL密码-->
        <property name="sqlMode">STRICT_TRANS_TABLES</property>
      </dataSource>
    </cobar:schema>
  • rule.xml配置如下(本文仅以数字类型的id字段作为拆分字段,将数据拆分到两个库中。)
    rule.xml 配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE cobar:rule SYSTEM "rule.dtd">
    <cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
      <!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法。-->
      <tableRule name="rule1">
        <rule>
          <columns>id</columns>
          <algorithm><![CDATA[ func1(${id})]]></algorithm>
        </rule>
      </tableRule>
     
      <!-- 路由函数定义,应用在路由规则的算法定义中,路由函数可以自定义扩展。-->
      <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
        <property name="partitionCount">2</property>
        <property name="partitionLength">512</property>
      </function>
    </cobar:rule>
  • server.xml配置如下
    server.xml 配置
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE cobar:server SYSTEM "server.dtd">
    <cobar:server xmlns:cobar="http://cobar.alibaba.com/">
     
      <!--定义Cobar用户名,密码-->
      <user name="test">
        <property name="password">test</property>
        <property name="schemas">dbtest</property>
      </user>
    </cobar:server>

步骤三:启动和使用Cobar

  • 启动Cobar,进入bin目录可以看到Cobar的启动、停止与重启脚本
    ./startup.sh #Cobar进程名为CobarStartup
  • 查看logs目录下stdout.log, 启动成功日志如下
    10:54:19,264 INFO  ===============================================
    10:54:19,265 INFO  Cobar is ready to startup ...
    10:54:19,265 INFO  Startup processors ...
    10:54:19,443 INFO  Startup connector ...
    10:54:19,446 INFO  Initialize dataNodes ...
    10:54:19,470 INFO  dnTest1:0 init success
    10:54:19,472 INFO  dnTest3:0 init success
    10:54:19,473 INFO  dnTest2:0 init success
    10:54:19,481 INFO  CobarManager is started and listening on 9066
    10:54:19,483 INFO  CobarServer is started and listening on 8066
    10:54:19,484 INFO  ===============================================
  • 访问Cobar同访问MySQL的方式完全相同, 常用访问方式如下(注意:本文将Cobar部署在192.168.0.1这台机器上,否则请替换为您的Cobar所在IP,其他信息不变)
    #命令行
    mysql -h192.168.0.1 -utest -ptest -P8066 -Ddbtest
     
    #JDBC(建议5.1以上的mysql driver版本)
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.0.1:8066/dbtest", "test", "test");
    ......
  • SQL执行示例,执行语句时与使用传统单一数据库无区别
    mysql>show databases;                                                #dbtest1、dbtest2、dbtest3对用户透明
    +----------+
    | DATABASE |
    +----------+
    | dbtest   |
    +----------+
     
    mysql>show tables;                                                   #dbtest中有两张表tb1和tb2
    +-------------------+
    | Tables_in_dbtest1 |
    +-------------------+
    | tb1               |
    | tb2               |
    +-------------------+
     
    mysql>insert into tb1 (id, gmt) values (1, now());                   #向表tb1插入一条数据
    mysql>insert into tb2 (id, val) values (1, "part1");                 #向表tb2插入一条数据
    mysql>insert into tb2 (id, val) values (2, "part1"), (513, "part2"); #向表tb2同时插入多条数据
    mysql>select * from tb1;                                             #查询表tb1,验证数据被成功插入
    +----+---------------------+
    | id | gmt                 |
    +----+---------------------+
    |  1 | 2012-06-12 15:00:42 |
    +----+---------------------+
     
    mysql>select * from tb2;                                             #查询tb2,验证数据被成功插入
    +-----+-------+
    | id  | val   |
    +-----+-------+
    |   1 | part1 |
    |   2 | part1 |
    | 513 | part2 |
    +-----+-------+
     
    mysql>select * from tb2 where id in (1, 513);                        #根据id查询
    +-----+-------+
    | id  | val   |
    +-----+-------+
    |   1 | part1 |
    | 513 | part2 |
    +-----+-------+
  • 查看后端MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中
分享到:
评论

相关推荐

    阿里巴巴开源的基于MySQL的分布式数据库服务中间件 Cobar.zip

    Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下像传统数据库一样为您提供海量数据服务。以下是快速启动场景:系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。tb1表的数据被映射到物理...

    cobar+spring+oracle数据源切换

    在IT行业中,数据源切换是一项重要的任务,尤其是在大型企业或分布式系统中,为了实现高可用性和负载均衡,可能需要在不同的数据库之间进行切换。本文将详细介绍如何利用Cobar、Spring和Oracle来实现数据源的无缝...

    分布式关系数据库中间件(mysql版本)

    分布式关系数据库中间件是现代大型互联网应用应对高并发、大数据量场景的重要技术手段。它能够将单一的数据库扩展为分布式架构,实现数据的水平扩展,提高系统的可用性和性能。在这个主题中,我们将深入探讨分布式...

    mysql中间件研究(Atlas、cobar、TDDL、Mycat).docx

    Cobar 是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,能够在分布式环境下提供海量数据服务。Cobar 的架构是位于前台应用和实际数据库之间,对前台开放的接口是 MySQL 通信协议。Cobar 中间件可以解决...

    大数据处理技术总结与分析.docx

    例如,阿里巴巴的COBAR系统是一个基于MySQL的分布式数据库系统,通过数据库中间件实现分布式处理,以应对大规模数据和高并发场景。 综上所述,大数据处理技术涵盖事务处理、统计分析和数据挖掘,每个领域都有其特定...

    大数据处理技术的总结与分析(DOC50页).doc

    - 在数据量和并发量较小的情况下,单机版关系型数据库(如Oracle、MySQL、SQL Server)配合数据复制技术可满足需求。 - 当数据量和并发量增大,可采用Oracle RAC集群或硬件升级,如小型机、大型机等。 - 对于...

    大数据处理技术的总结与分析.docx

    举例来说,阿里巴巴的COBAR系统是一种基于MySQL的分布式数据库系统,它通过分布式数据库中间件实现高并发处理和数据一致性。这种系统设计是为了解决大规模用户下的业务需求,确保系统的稳定性和性能。 总之,大数据...

    大数据处理技术的汇报与分析.docx

    在小规模数据量和并发量下,可以使用单机版的关系型数据库,如Oracle、MySQL等,配合数据复制技术确保高可用性。随着数据量和并发量增加,可能需要采用ORACLE RAC集群或硬件升级,甚至在互联网企业中,如淘宝、12306...

    cobar-server-1.2.7.tar

    Cobar 是一个高性能、分布式的关系型数据库中间件,它的全称是“Clustered MySQL Bar”。在阿里巴巴集团内部,Cobar 曾经被广泛应用于解决大规模数据处理和高并发访问的问题。Cobar 的主要目标是通过分库分表、读写...

    大数据处理技术的总结与分析(20210920104123).pdf

    阿里巴巴的COBAR系统就是一个基于MySQL的分布式数据库系统,通过分布式数据库中间件实现大规模数据处理。 总的来说,大数据处理技术涉及数据库管理、分布式计算、数据仓库和数据挖掘等多个层次,它们共同构成了...

    mysql中间件研究(Atlas_cobar_TDDL)

    Cobar 是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。Cobar 可以解决以下问题: 1. 随着业务的进行数据库的数据量和访问量的剧增...

    分布式数据库原理和架构设计.pptx

    随着互联网的快速发展和数据量的爆炸式增长,传统的集中式数据库系统如RDBMS(关系型数据库管理系统)已经无法满足高性能、高可用和可扩展性的需求。在这种背景下,分布式数据库应运而生。 在2006年前,RDBMS如...

    ES分布式搜索解决方案.docx

    对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈: 解决要点: 1)通过主从备份解决数据安全性问题; 2)通过数据库代理中间件心跳监测,解决单点故障问题; 3)通过代理中间件将查询语句...

    大数据技术体系图谱.pptx

    数据存储 分布式关系型数据库 DRDS TiDB Cobar Mycat Aurora 5. 4. 3. 2. 1. 大数据技术体系图谱全文共96页,当前为第24页。 分布式关系型数据库 DRDS TiDB Cobar Mycat Aurora 大数据技术体系图谱全文共96页,当前...

    MyCat In Action英文版

    6. 全局表与数据分片:自动将数据碎片化到多个节点,以实现高效的关系型查询。 7. 基于ER关系的独特分片策略:进一步优化了关系型查询的效率。 8. 多平台支持:MyCat可在多种操作系统上部署,便于实施和管理。 ...

    阿里巴巴数据库分库分表的实践

    在2006年阿里巴巴B2B团队以开源方式研发了Cobar这一关系型数据的分布式处理系统。该系统在很大程度上解决了最初使用Oracle数据库因为存储数据变得越来越大带来的扩展性问题,并且为开发人员提供了一个使用相对简单的...

    MyCat.tar.gz-Delete

    MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。 MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL...

    mycat.tar.gz

    MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。 MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL...

    mycat数据库中间件:概述完整版资料.pptx

    MYCAT的前世今生:MYCAT诞生于2013年阿里的Cobar项目中,后来MYCAT开源,吸引了许多Cobar的用户参与开发,最終发展成为一个由众多软件公司的实力派架构师和资深开发人员维护的社区型开源软件。 MYCAT特性: * 高...

Global site tag (gtag.js) - Google Analytics