学习笔记-大数据存储
《学习笔记-大数据存储》要点: 本日了解了一下网站的大数据存储方面的内容,下面将我学习到的内容和大家分享一下. 首先介绍一下现在主流的数据库:Mysql,Oracle,db2,Nosql(非关系型数据库,redis,Mongodb),本文主要介绍的是Mysql. 对于Mysql,以前我总有这样的误解,便是中小型公司使用,对于大数据量,mysql并不能很好的支持.其实不然,据我了解,淘宝便是使用的Mysql数据库,由此可见,Mysql对于大数据量存储还是可行的.下面就简单介绍一下Mysql为了应对大数据量所采用的技术. Mysql主从技术(负载),下面是原理图: 它的工作原理就是:主数据库会把所有增编削的操作记录到Binary Log这个日志表中,然后同步到从数据库,从数据库执行查询操作,这就实现了分流,也就是我们所说的负载技术. 大数据量的存储,会引发很多的问题,比如Mysql一张表数据如果超过了一千万行,那么就会严重影响CPU性能.那么在Mysql中如何去办理呢? Mysql分库分表技术: Mysql中分表主要分为两种:垂直分表和水平分表.其中垂直分表很少用,以为我们在设计数据库的时候不可能将数据库表字段设计的过多,一般也就十几个二十多个,所以没有必要使用垂直分表.水平分表可以很好的办理数据量大的问题,但是它也有很多的弊端:比如你要将一个表分成两个表,那么原先的sql语句就得修改,这样会使得程序的判断逻辑越来越复杂,导致程序的维护代价高. 另外一种技术便是Mysql分区技术 MySQL的分区技术不同与之前的分表技术,它与水平分表有点类似,但是它在逻辑层进行的水平分表,对与应用程序而言它还是一张表,MySQL5.1版本后有4种分区类型: 一:RANGE分区(用的最多):基于属于一个给定连续区间的列值(字段),把多行分配给分区 (将一个表拆分成:索引文件,数据文件分片存储 ) 二:LIST分区:类似于按range分区,区别在于list分区是基于列值匹配一个离散值集合中的某个值来进行选择(列里面的值是固定值时候来进行分区,而且是枚举类型的值适合用list分区 -->好比说 性别:男,女) 三:HASH分区:基于用户定义的表达式的返回值来进行选择的分区,改表达式使用将要插入到表中的这些行的列值计算,这个函数可以包括MySQL中有效的、产生负整数值的任何表达式(把每次插入的数据随机的平均的分配到多个分区里面,最终多个分区里面的数据时平均分配的,但是每个分区里面的数值肯能不太一样,因为是随机分配的,一般可以用来做MySQL分区的测试来使) 四:KEY分区:类似于按hash分区,区别在于key分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数 分区技术能很好的解决分表技术所带来的弊端,成为解决海量数据存储的有力办法. 最后给大家说一下Mysql集群技术 Mysql集群其实便是冗余技术,为了保障数据库的持续运行,在图中,ACE三个数据库处于运行状态,BDF处于休眠状态,一旦ACE三个运行中的数据库发生故障,会立即激活相对应的休眠数据库,保障服务的不间断运行. 以上内容便是我学习大数据存储的学习笔记,水平有限,不喜勿喷,当然欢迎大神多多指导,共同进步. 欢迎参与《学习笔记-大数据存储》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |