Amoeba原理戳这里:Amoeba详细介绍


需要根据企业 数据业务进行切割,垂直切割又称为纵向切割。

垂直切割通说的说就是有多个表,对表进行分离(用户数据、博客文章数据、照片数据、标签数据类型、群组数据)

水平切割通俗的说就是一张表的数据太多,对表内数据进行分离

以下是一个水平切割的实例

安装JDK、Amoeba和配置文件参考前面写过的基于Amoeba的读写分离   http://www.cnblogs.com/losbyday/p/5818994.html

注释或者删除两行就OK

      <!-- 读写分离在这里 -->
<!-- <property name="writePool">master</property>
<property name="readPool">slave</property> -->

配置水平分割规则

# vim /usr/local/amoeba/conf/rule.xml

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE amoeba:rule SYSTEM "rule.dtd">

<amoeba:rule xmlns:amoeba="http://amoeba.meidusa.com/">
<!-- 表名 操作的那个数据库 那个数据库池 --> <tableRule name="los" schema="test" defaultPools="server1,server2"> <rule name="rule1"> <parameters>ID</parameters>
        <!--               写入数据库的规则        -->
<expression><![CDATA[ user_id between 1 and 50000 and user_id % 2 =0 ]]></expression> <defaultPools>server1</defaultPools> <readPools>server1</readPools> <writePools>server1</writePools> </rule> <rule name="rule2"> <parameters>ID</parameters> <expression><![CDATA[ user_id between 1 and 50000 and user_id % 2 =0 ]]></expression> <defaultPools>server2</defaultPools> <writePools>server2</writePools> <readPools>server2</readPools> </rule> <!-- <rule name="rule4"> <parameters>ID</parameters> <expression><![CDATA[ ID > 20000000 ]]></expression> <defaultPools>server3</defaultPools> </rule> --> <!-- <rule name="rule3"> <parameters>ID,CREATE_TIME</parameters> <expression><![CDATA[ID>4 or CREATE_TIME between to_date('2008-11-12 00:00:00.0000') and to_date('2008-12-10 00:00:00.0000') ]]></expression> <defaultPools>server3</defaultPools> </rule> --> </tableRule>
</amoeba:rule>

插入测试数据

Amoeba Server登录:

# mysql -uroot -p123456 -h 192.168.100.214 -P 9006

mysql->use test;

mysql->insert into los(user_id,user_name,user_address)values('1','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('2','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('3','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('4','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('5','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('6','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('7','user1','China');

mysql->insert into los( user_id,user_name,user_address)values('8','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('9','user1','China');

mysql->insert into los(user_id,user_name,user_address)values('10','user1','China');

分别登录master和slave数据库进行查看

总结:

(1)、amoeba 是根据 sql 解析来进行 水平切分的, 需要把切分的关键字段(这里是user_id),加入到insert  sql 语句 中。否则 切分规则无效。无效后,会在 server1, server2 均都插入数据。

(2)、amoeba插入数据的时候必须先use  dbname(比如要先use test库名,或者查询带上库名和表名,test.t_user) 否则插入数据会默认插到server1上面

(3)、在rule.xml 指定的ID范围,在插入数据user_id的时候。不能超过这个范围,否则分片无效,

比如定义的ID范围为:

1-500000号

insert into zyalvin(user_id,user_name,user_address)values('5000001','user1','China'); 如果插入ID超过5000000,变成了5000001的话那么这个数据将同时写到server1和server2 导致分片无效。

有点儿事,回头修正

Mysql(集群)业务水平切割 垂直切割(Amoeba)的更多相关文章

  1. linux上使用amoeba实现MySql集群,以及读写分离,主从复制

    一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...

  2. 关于MySQL集群的一些看法

    作者:Gary Chen链接:https://zhuanlan.zhihu.com/p/20204156来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 市面上的招聘往往 ...

  3. MySQL集群的几种方案

    组建MySQL集群的几种方案LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂 ...

  4. 组建MySQL集群的几种方案

    组建MySQL集群的几种方案LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂 ...

  5. MySQL集群之MyCat

    MySQL集群之MyCat 一.MyCat简介及分析 1.1 MyCat是什么? 1.2 关键特性及应用场景 1.2.1 关键特性 1.2.2 应用场景 1.2.3 MyCat不适合的应用场景 1.3 ...

  6. mysql集群数据一致性校验

    目前,mysql在互联网行业使用地如火如荼,很多大型网站都在使用MySQL数据库,通过搭建mysql主备集群,实现高性能,高可用的存储方案.mysql集群的共同特性是通过复制来实现主备间的同步,保证主 ...

  7. 京东分布式MySQL集群方案介绍

    背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.PostgeSQL.MariaDB等,像SQLServer/Ora ...

  8. 高可用性、负载均衡的mysql集群解决方案

    高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么 ...

  9. 分布式MySQL集群方案的探索与思考

    转载:http://www.infoq.com/cn/articles/exploration-of-distributed-mysql-cluster-scheme?utm_campaign=rig ...

随机推荐

  1. php 获取地址栏参数

    javascript实现: top.location.href 顶级窗口的地址this.location.href 当前窗口的地址 PHP实现: //获取域名或主机地址 echo $_SERVER[' ...

  2. KMP算法中的next数组求解示意图

  3. Android Studio一直build、一直refreshing、一直buiding gradle project into的终极解决办法

    打开我的电脑,打开C:\Users\用户名, 把红圈的文件夹都删了 如果AndroidStudioProjects文件夹里那些project都不重要,也可以跟红圈文件夹删了, 然后再打开android ...

  4. 动态链接库dll,导入库lib,静态链接库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...

  5. word2010无法打开文件时的一点对策

    word2010无法打开文件时的一点对策 1. Word 安全模式启动,点击「开始」,在搜索栏中输入winword /safe并回车,测试问题是否依然存在? 2. 正常启动Word,点击“文件”—“选 ...

  6. GameUnity 2.0 文档(四) 网格+四叉树 最优碰撞检测

    在写之前,必须对 前一篇文档补充一下. Camera2DAngle类是 摄像机旋转 2d人物360度,PlayerMove是人物移动. 这两个类 都可以 360 °  场景旋转人物也跟着旋转. 但不能 ...

  7. C++的精髓——虚函数

    虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原 ...

  8. 转:WebDriver(Selenium2) 判断页面是否刷新的方法

    public static boolean waitPageRefresh(WebElement trigger) { int refreshTime = 0; boolean isRefresh = ...

  9. Swift学习(1)

    swif(1) println("Hello, world") 输出结果: Hello, world swift使用let来声明常量,使用var来声明变量 //变量 var myV ...

  10. Android Studio相关的坑

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...