<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></title> 
<link>http://www.bizeway.net/index.php</link> 
<description><![CDATA[网务通 - 网务公司发展之路]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></copyright>
<item>
<link>http://www.bizeway.net/read.php?</link>
<title><![CDATA[mysql分表，分区的区别和关系]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[MySQL]]></category>
<pubDate>Sat, 27 Jul 2013 09:40:16 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?</guid> 
<description>
<![CDATA[ 
	一，什么是mysql分表，分区<br/><br/>什么是分表，从表面意思上看呢，就是把一张表分成N多个小表，具体请看mysql分表的3种方法<br/><br/>什么是分区，分区呢就是把一张表的数据分成N多个区块，这些区块可以在同一个磁盘上，也可以在不同的磁盘上，具体请参考mysql分区功能详细介绍，以及实例<br/><br/>二，mysql分表和分区有什么区别呢<br/><br/>1，实现方式上<br/><br/>a），mysql的分表是真正的分表，一张表分成很多表后，每一个小表都是完正的一张表，都对应三个文件，一个.MYD数据文件，.MYI索引文件，.frm表结构文件。<br/><br/>view sourceprint?1 [root@BlackGhost test]# ls &#124;grep user &nbsp; &nbsp;<br/><br/>2 alluser.MRG &nbsp; &nbsp;<br/><br/>3 alluser.frm &nbsp; &nbsp;<br/><br/>4 user1.MYD &nbsp; &nbsp;<br/><br/>5 user1.MYI &nbsp; &nbsp;<br/><br/>6 user1.frm &nbsp; &nbsp;<br/><br/>7 user2.MYD &nbsp; &nbsp;<br/><br/>8 user2.MYI &nbsp; &nbsp;<br/><br/>9 user2.frm <br/><br/>简单说明一下，上面的分表呢是利用了merge存储引擎（分表的一种），alluser是总表，下面有二个分表，user1，user2。他们二个都是独立的表，取数据的时候，我们可以通过总表来取。这里总表是没有.MYD,.MYI这二个文件的，也就是说，总表他不是一张表，没有数据，数据都放在分表里面。我们来看看.MRG到底是什么东西<br/><br/>view sourceprint?1 [root@BlackGhost test]# cat alluser.MRG &#124;more &nbsp; &nbsp;<br/><br/>2 user1 &nbsp; &nbsp;<br/><br/>3 user2 &nbsp; &nbsp;<br/><br/>4 #INSERT_METHOD=LAST <br/><br/>从上面我们可以看出，alluser.MRG里面就存了一些分表的关系，以及插入数据的方式。可以把总表理解成一个外壳，或者是联接池。<br/><br/>b），分区不一样，一张大表进行分区后，他还是一张表，不会变成二张表，但是他存放数据的区块变多了。<br/><br/>view sourceprint?1 [root@BlackGhost test]# ls &#124;grep aa &nbsp; &nbsp;<br/><br/>2 aa#P#p1.MYD &nbsp; &nbsp;<br/><br/>3 aa#P#p1.MYI &nbsp; &nbsp;<br/><br/>4 aa#P#p3.MYD &nbsp; &nbsp;<br/><br/>5 aa#P#p3.MYI &nbsp; &nbsp;<br/><br/>6 aa.frm &nbsp; &nbsp;<br/><br/>7 aa.par <br/><br/>从上面我们可以看出，aa这张表，分为二个区，p1和p3，本来是三个区，被我删了一个区。我们都知道一张表对应三个文件.MYD,.MYI,.frm。分区呢根据一定的规则把数据文件和索引文件进行了分割，还多出了一个.par文件，打开.par文件后你可以看出他记录了，这张表的分区信息，根分表中的.MRG有点像。分区后，还是一张，而不是多张表。<br/><br/>2，数据处理上<br/><br/>a），分表后，数据都是存放在分表里，总表只是一个外壳，存取数据发生在一个一个的分表里面。看下面的例子：<br/><br/>select * from alluser where id=’12′表面上看，是对表alluser进行操作的，其实不是的。是对alluser里面的分表进行了操作。<br/><br/>b），分区呢，不存在分表的概念，分区只不过把存放数据的文件分成了许多小块，分区后的表呢，还是一张表。数据处理还是由自己来完成。<br/><br/>3，提高性能上<br/><br/>a），分表后，单表的并发能力提高了，磁盘I/O性能也提高了。并发能力为什么提高了呢，因为查寻一次所花的时间变短了，如果出现高并发的话，总表可以根据不同的查询，将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢，本来一个非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。<br/><br/>b），mysql提出了分区的概念，我觉得就想突破磁盘I/O瓶颈，想提高磁盘的读写能力，来增加mysql性能。<br/><br/>在这一点上，分区和分表的测重点不同，分表重点是存取数据时，如何提高mysql并发能力上；而分区呢，如何突破磁盘的读写能力，从而达到提高mysql性能的目的。<br/><br/>4），实现的难易度上<br/><br/>a），分表的方法有很多，用merge来分表，是最简单的一种方式。这种方式根分区难易度差不多，并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。<br/><br/>b），分区实现是比较简单的，建立分区表，根建平常的表没什么区别，并且对开代码端来说是透明的。<br/><br/>三，mysql分表和分区有什么联系呢<br/><br/>1，都能提高mysql的性高，在高并发状态下都有一个良好的表面。<br/><br/>2，分表和分区不矛盾，可以相互配合的，对于那些大访问量，并且表数据比较多的表，我们可以采取分表和分区结合的方式（如果merge这种分表方式，不能和分区配合的话，可以用其他的分表试），访问量不大，但是表数据很多的表，我们可以采取分区的方式等。<br/><br/>另附一段评价：<br/>在以前，一种解决方案就是使用 MERGE<br/><br/>类型，这是一个非常方便的做饭。架构和程序基本上不用做改动，不过，它的缺点是显见的：<br/><br/>只能在相同结构的 MyISAM 表上使用 <br/>无法享受到 MyISAM 的全部功能，例如无法在 MERGE 类型上执行 FULLTEXT 搜索 <br/>它需要使用更多的文件描述符 <br/>读取索引更慢 <br/>这个时候，MySQL 5.1 中新增的分区(Partition)功能的优势也就很明显了：<br/><br/>与单个磁盘或文件系统分区相比，可以存储更多的数据 <br/>很容易就能删除不用或者过时的数据 <br/>一些查询可以得到极大的优化 <br/>涉及到 SUM()/COUNT() 等聚合函数时，可以并行进行 <br/>IO吞吐量更大 <br/>分区允许可以设置为任意大小的规则，跨文件系统分配单个表的多个部分。实际上，表的不同部分在不同的位置被存储为单独的表。<br/><br/><br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a> , <a href="tag.php?tag=%E5%88%86%E8%A1%A8" rel="tag">分表</a> , <a href="tag.php?tag=%E5%88%86%E5%8C%BA" rel="tag">分区</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?&amp;guid=0#topreply</link>
<title><![CDATA[[评论] mysql分表，分区的区别和关系]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?&amp;guid=0#topreply</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>