<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[数据库水平切分和垂直切分的区别]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Fri, 03 Apr 2020 07:41:39 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	1、水平切分：<br/>通俗的来讲<br/>例：QQ的用户表。假设QQ的用户有100亿，如果只有一张表，每个用户登录的时候数据库都要从这100亿中查找，会很慢很慢。如果将这一张表分成100份，每张表有1亿条，就小了很多，比如qq_user_0,qq_user_1,qq_user_2...qq_user_99表。<br/><br/>用户登录的时候，可以将用户的id%100，那么会得到0-99的数，查询表的时候，将表名qq跟取模的数连接起来，就构建了表名。比如123456789用户，取模的89，那么就到qq_user_89表查询，查询的时间将会大大缩短。<br/><br/>这就是水平切分。<br/><br/>2、垂直切分：<br/><br/>垂直切分指的是：表的记录并不多，但是字段却很长，表占用空间很大，检索表的时候需要执行大量的IO，严重降低了性能。这时需要把大的字段拆分到另一个表，并且该表与原表是一对一的关系。<br/><br/>例如学生答题表tt：有如下字段：<br/><br/>Id name 分数 题目 回答<br/><br/>其中题目和回答是比较大的字段，id name 分数比较小。<br/><br/>如果我们只想查询id为8的学生的分数：select 分数 from tt where id = 8;虽然知识查询分数，但是题目和回答这两个大字段也是要被扫描的，很消耗性能。但是我们只关心分数，并不想查询题目和回答。这就可以使用垂直分割。我们可以把题目单独放到一张表中，通过id与tt表建立一对一的关系，同样将回答单独放到一张表中。这样我们插叙tt中的分数的时候就不会扫描题目和回答了。<br/><br/>3、其他要点：<br/><br/>1)存放图片、文件等大文件用文件系统存储。数据库只存储路径，图片和文件存放在文件系统，甚至单独存放在一台服务器(图床)。<br/><br/>2)数据参数配置。<br/><br/>最重要的参数就是内存，我们主要用的innodb引擎，所以下面两个参数调的很大：<br/><br/>innodb_additional_mem_pool_size=64M<br/><br/>innodb_buffer_pool_size=1G<br/><br/>对于MyISAM，需要调整key_buffer_size，当然调整参数还是要看状态，用show status语句可以看到当前状态，以决定该调整哪些参数。<br/><br/>4、合理的硬件资源和操作系统<br/><br/>如果机器的内存超过4G，那么应当采用64位操作系统和64位MySQL。<br/><br/>案例：<br/><br/>简单购物系统暂设涉及如下表：<br/><br/>1.产品表(数据量10w，稳定)<br/><br/>2.订单表(数据量200w，且有增长趋势)<br/><br/>3.用户表 (数据量100w，且有增长趋势)<br/><br/>以mysql为例讲述下水平拆分和垂直拆分，mysql能容忍的数量级在百万静态数据可以到千万<br/><br/>垂直拆分：<br/><br/>解决问题：<br/>表与表之间的io竞争<br/>不解决问题：<br/>单表中数据量增长出现的压力<br/><br/>方案：<br/>把产品表和用户表放到一个server上<br/>订单表单独放到一个server上<br/><br/><br/>水平拆分：<br/><br/>解决问题：<br/>单表中数据量增长出现的压力<br/><br/>不解决问题：<br/>表与表之间的io争夺<br/><br/>方案：<br/>用户表通过性别拆分为男用户表和女用户表<br/>订单表通过已完成和完成中拆分为已完成订单和未完成订单<br/>产品表 未完成订单放一个server上<br/>已完成订单表盒男用户表放一个server上<br/>女用户表放一个server上<br/>Tags - <a href="https://www.heckjj.com/tags/%25E5%259E%2582%25E7%259B%25B4%25E5%2588%2587%25E5%2588%2586/" rel="tag">垂直切分</a> , <a href="https://www.heckjj.com/tags/%25E6%25B0%25B4%25E5%25B9%25B3%25E5%2588%2587%25E5%2588%2586/" rel="tag">水平切分</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] 数据库水平切分和垂直切分的区别]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>