Mysql(集群)业务水平切割 垂直切割(Amoeba)
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)的更多相关文章
- linux上使用amoeba实现MySql集群,以及读写分离,主从复制
一.由于是MySql集群,所以就不可能只有一个MySql,需要多个MySql,具体安装步骤,可以参考http://www.cnblogs.com/ywzq/p/4882140.html这个地址进行安装 ...
- 关于MySQL集群的一些看法
作者:Gary Chen链接:https://zhuanlan.zhihu.com/p/20204156来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 市面上的招聘往往 ...
- MySQL集群的几种方案
组建MySQL集群的几种方案LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂 ...
- 组建MySQL集群的几种方案
组建MySQL集群的几种方案LVS+Keepalived+MySQL(有脑裂问题?但似乎很多人推荐这个)DRBD+Heartbeat+MySQL(有一台机器空余?Heartbeat切换时间较长?有脑裂 ...
- MySQL集群之MyCat
MySQL集群之MyCat 一.MyCat简介及分析 1.1 MyCat是什么? 1.2 关键特性及应用场景 1.2.1 关键特性 1.2.2 应用场景 1.2.3 MyCat不适合的应用场景 1.3 ...
- mysql集群数据一致性校验
目前,mysql在互联网行业使用地如火如荼,很多大型网站都在使用MySQL数据库,通过搭建mysql主备集群,实现高性能,高可用的存储方案.mysql集群的共同特性是通过复制来实现主备间的同步,保证主 ...
- 京东分布式MySQL集群方案介绍
背景 数据库作为一个非常基础的系统,任何一家互联网公司都会使用,数据库产品也很多,有Oracle.SQL Server .MySQL.PostgeSQL.MariaDB等,像SQLServer/Ora ...
- 高可用性、负载均衡的mysql集群解决方案
高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么 ...
- 分布式MySQL集群方案的探索与思考
转载:http://www.infoq.com/cn/articles/exploration-of-distributed-mysql-cluster-scheme?utm_campaign=rig ...
随机推荐
- perl-cgi-form
来源: http://www.cnblogs.com/itech/archive/2012/09/23/2698595.html http://www.cnblogs.com/itech/archiv ...
- libprotobuff8.so not found
http://stackoverflow.com/questions/25518701/protobuf-cannot-find-shared-libraries
- JS里的CSS函数
<title>无标题文档</title> <script> function css(obj,name,value){ if(arguments.length==2 ...
- js中对象相关
对象的创建: var first=new Object(); var second={ a:"bbb", b:function(){...} } 对象的内容增加: first.na ...
- 使用命令行编译as文件成swf
设置环境变量到flex sdk的目录下.如:D:\Program Files\Adobe Flash Builder 4.5\sdks\flex_sdk_4.6\bin 找到flex-config.x ...
- Android多线程下安全访问数据库
http://zhiwei.neatooo.com/blog/detail?blog=5343818a9d4869f0310000de github 原文https://github.com/dmyt ...
- USACO Section 1.3 Wormholes 解题报告
题目 题目描述 在一个二维平面上有N个点,这N个点是(N/2)个虫洞的端点,虫洞的特点就是,你以什么状态从某个端点进去,就一定会以什么状态从另一端的端点出来.现在有一头牛总是沿着与X轴正方向平行的直线 ...
- 在Visual C++中的用ADO进行数据库编程
1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO ...
- jquery 事件注册 与重复事件处理
<!doctype html><html lang="us"><head><meta charset="utf-8"& ...
- 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp
http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...