- 浏览: 2542790 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
CREATE TABLE `t1` (
`a` int(11) NOT NULL auto_increment,
`message` char(20) default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM ;
CREATE TABLE `t2` (
`a` int(11) NOT NULL auto_increment,
`message` char(20) default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM ;
CREATE TABLE t (a INT NOT NULL ,message CHAR(20) ) ENGINE=MRG_MyISAM UNION=(`t1`,`t2`)
当增删改t1,t2时候,t表会同步
CREATE TABLE `yc_tessss_0` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default '',
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `m_orderid_2` (`m_orderid`),
KEY `entertime` (`entertime`),
KEY `flag_index` (`mflag`),
KEY `username` (`username`),
KEY `uid` (`csm_where`),
KEY `prize_time_limit` (`prize_time_limit`),
KEY `uid2` (`uid`)
) ENGINE=MyISAM CHARSET=gbk
CREATE TABLE `yc_tessss` (
`id` int(11) NOT NULL,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default '',
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
KEY `id` (`id`),
KEY `m_orderid_2` (`m_orderid`),
KEY `entertime` (`entertime`),
KEY `flag_index` (`mflag`),
KEY `username` (`username`),
KEY `uid` (`csm_where`),
KEY `prize_time_limit` (`prize_time_limit`),
KEY `uid2` (`uid`)
) ENGINE=MRG_MyISAM CHARSET=gbk UNION=(`yc_tessss_0`,`yc_tessss_1`,`yc_tessss_2`,`yc_tessss_3`,`yc_tessss_4`,`yc_tessss_5`,`yc_tessss_6`,`yc_tessss_119`)
MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩的.
当你创建一个MERGE表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为MERGE表自身,不必要在同一个数据库中。
你可以对表的集合用SELECT, DELETE, UPDATE和INSERT。你必须对你映射到一个MERGE表的这些表有SELECT, UPDATE和DELETE 的权限。
如果你DROP MERGE表,你仅在移除MERGE规格。底层表没有受影响。
当你创建一个MERGE表之时,你必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个来用。如果你想要对 MERGE表的插入发生在UNION列表中的第一个或最后一个表上,你可以选择地指定一个INSERT_METHOD选项。使用FIRST或LAST值使得插入被相应地做在第一或最后一个表上。如果你没有指定INSERT_METHOD选项,或你用一个NO值指定该选项。往MERGE表插入记录的试图导致错误。
下面例子说明如何创建一个MERGE表:
CODE:
mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。
创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:
CODE:
mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |
有关于Mysql的MERGE表类型
#
他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,
.frm 表结构定义
.mrg union表的名字清单
两个基本表:
CREATE TABLE TEST_MERGE_1(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
)
CREATE TABLE TEST_MERGE_2(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
)
MERGE表的建立:
CREATE TABLE TEST_MERGE(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) TYPE=MERGE UNION=(TEST_MERGE_1,TEST_MERGE_2) INSERT_METHOD=LAST;
1. 此表类似于SQL中的union机制。
2. 此表结构必须和基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 能通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改能直接反映在此表上。
6. INSERT_METHOD的取值能是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在他上面的约束没有所有作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个相同的Key值。
#
>DROP TABLE `yc_tessss_test`;
>delimiter //
>CREATE TABLE IF NOT EXISTS `yc_tessss_test` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default NULL,
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
PRIMARY KEY (`id`)
) TYPE=MERGE UNION=(yc_tessss_1,yc_tessss_2) INSERT_METHOD=LAST;
>//
--------------???????????????????? Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩的.
当你创建一个MERGE表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为MERGE表自身,不必要在同一个数据库中。
你可以对表的集合用SELECT, DELETE, UPDATE和INSERT。你必须对你映射到一个MERGE表的这些表有SELECT, UPDATE和DELETE 的权限。
如果你DROP MERGE表,你仅在移除MERGE规格。底层表没有受影响。
当你创建一个MERGE表之时,你必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个来用。如果你想要对 MERGE表的插入发生在UNION列表中的第一个或最后一个表上,你可以选择地指定一个INSERT_METHOD选项。使用FIRST或LAST值使得插入被相应地做在第一或最后一个表上。如果你没有指定INSERT_METHOD选项,或你用一个NO值指定该选项。往MERGE表插入记录的试图导致错误。
下面例子说明如何创建一个MERGE表:
CODE:
mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。
创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:
CODE:
mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |
发表评论
-
mysql表修复
2015-04-07 10:16 102891.1命令myisamchk(必须停掉mysql服务,或者所操 ... -
Table_locks_immediate
2014-08-25 15:46 3082Table_locks_immediate表示立即释放表锁数 ... -
mysql分区
2014-02-21 10:38 1851mysql自5.1开始支持分区 ... -
InnoDB 引擎独立表空间 innodb_file_per_table
2013-02-25 11:14 1312http://deeplyloving.iteye.com ... -
mysql监测工具tuning-primer.sh
2013-01-21 17:57 2660【转】http://www.dbasky.net ... -
mysql主从日志的定期清理
2013-01-21 16:24 1155[转]http://wangwei007.blog.51 ... -
[转]Mysql报错:Result consisted of more than one row
2013-01-09 16:25 15900Error Code : 1172 Result consi ... -
根据bin log 分析管理员被莫名删除问题
2013-01-04 17:04 1168============== 根据bin log 分析管理 ... -
mysql中select * for update锁表的问题
2013-01-04 14:07 2510先前介绍过SELECT ... FOR UPDATE的用法 ... -
PDO报错:Cannot execute queries while other unbuffered queries are active.
2012-12-12 17:57 11953用 PDOStatement->execute() 执行 ... -
MySQL死锁导致无法查询
2012-12-11 14:51 2565客服反馈后台无法查询,原因大概知道,是因为MySQL的事务 ... -
mysql性能分析:mysql profiling 应用
2012-12-11 10:26 13491)先打开profiling ==> set pro ... -
mysql体系结构和查看当前的数据库请求
2012-12-07 15:00 2893mysql体系结构: 由 ... -
mysql_error:Error starting thread: Resource temporarily unavailable
2012-11-01 17:57 2115121031 18:53:17 InnoDB: Unable ... -
导出bin log时间段脚本datarecover.sh
2012-09-06 13:34 1247修改 _binlogdir='/data/mysql/m ... -
Mysql备份工具xtraback全量和增量测试
2012-08-17 14:58 3867【转载】http://blog.chinaunix.net/s ... -
数据库中的隔离级别和锁机制
2012-08-09 17:55 1587ANSI/ISO SQL92标准定义了 ... -
mysqldump和mysql命令
2012-08-03 13:44 1383========================= mys ... -
【汇总】mysql join
2012-07-18 11:35 1172标准SQL中CROSS JOIN交叉连接(笛卡尔积)和内连接I ... -
mysql cursor游标的使用,实例
2012-07-17 23:09 1816mysql被oracle收购后,从mysql-5.5开始, ...
相关推荐
springboot+sharding sphere+mybatis 分库分表 文章 https://blog.csdn.net/weixin_42749765/ https://blog.csdn.net/weixin_42749765/article/details/130529127
mysql_基因算法遗传分库分表demo_genetic_algorithm_mysql
最后是"广播分表",这种策略适用于小表,即将一张表的副本复制到所有数据节点。查询时,所有节点都会接收到请求,从而实现快速读取。广播表通常用于存放配置信息,如全局唯一ID生成器的序列号表。 在实际应用中,...
- **解决方案**:切换到admin数据库后再次运行命令。 #### 五、总结 通过以上步骤,我们可以成功地搭建一个MongoDB分片集群。分片技术能够极大地提升MongoDB处理大规模数据的能力,并且能够有效地分散负载,提高...
同时,分库分表后可能引入的额外问题,如分布式事务处理和跨库查询,也需要有相应的解决方案。 总的来说,面对数据库写入数据量增加的情况,通过垂直拆分和水平拆分,可以有效地提高系统性能,支持大数据量存储,...
MySQL是世界上最流行的关系型数据库管理系统之一,经常在面试中被问到各种问题,尤其是在技术面试中。...在实际工作中,还需要了解事务处理、锁机制、性能调优、分区与分表、备份与恢复等更多主题。
它支持部署在腾讯云或单独部署,用户只需在创建表的时候指定一个分表字段,由TDSQL系统负责数据的路由以及汇总,应用层可以对数据库进行透明操作。 功能特性 TDSQL可以提供水平扩容能力,适合海量数据的场景。它...
在数据分析和大数据处理中,将一个大表分成多个小表是一种常见的优化策略,这有助于提高查询效率、降低存储压力,并便于分布式处理。本主题将详细探讨如何利用Python进行数据表的拆分工作。 首先,我们需要了解为...
MySQL分表及分表后插入sql语句,表为订单表,可以参考一下
8. 数据库设计:新闻网站的数据库设计应该考虑扩展性和性能,比如合理使用索引、分表分库等策略,确保高并发下数据的稳定读写。 9. 安全性:网站需要防止SQL注入、XSS攻击等,使用预编译语句、过滤用户输入等方式...
在大数据场景下,单一的大表可能会导致性能瓶颈,因此通常会采用分区策略将数据分散到多个小表中,这被称为分表。这样做可以提高查询效率,减轻单个表的压力。Oracle数据库提供了多种分区策略,如范围分区、列表分区...
本套教程涵盖Mycat核心技术主要知识点,常用功能均有实战演练。主要包含Mycat介绍原理、安装、一主一从读写分离、双主双从读写分离、分库分表、全局序列、高可用架构、安全设置、监控平台等章节。
本例子主要以存储引擎、视图、存储函数、锁机制、分表为主,并且配以对应的博客全面解析。 这个例子的博客系列在这里:http://blog.csdn.net/Jack__Frost/article/category/6998564
### Shardingsphere 分库分表知识点详解 #### 1. 概览 ##### 1.1 简介 Shardingsphere 是一个分布式数据库中间件项目,它由 Apache 软件基金会维护,旨在为应用程序提供透明的数据分片、读写分离、数据加密等能力...
- 随着数据量的增长,可以调整分表策略,例如增加更多的表,或者改变分表依据,如MD5字段取几位进行分表,以适应更大的数据规模。 6. **安全性**: - 分表可以降低因单表数据量过大而引发的安全风险,如SQL注入...
动网论坛几年前采用的分表优化技术已成为国内众多同行采纳的标准,但我们还需要更多的创新、学习、交流和改进,我们将会虚心的采纳大家优秀的建议和解决方案。 我们所采用的核心代码拥有两年远超同类产品的优秀运行...
- 注意,支持【子表】,填入对应子表名、id、关联主表id,执行分表的时候,将对应把子表分表【目前支持2个子表,如果您想更多个子表,请自行修改代码】 - 为什么要分享 - 赚积分呗,老子十几年的CSDN会员了,想在...
◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于...