一说海量数据有人就说了直接用大数据,那只能说不太了解这块,为此我们才要好好的去讲解一下海量的处理

  1. 海量数据的处理分为两种情况
    1)表中有海量数据,但是每天不是很快的增长
    2)表中有还流量数据,而且每天很快速的增长
    针对这了两种情况,我们给出的解决方案也不太一样,而且也不是所有的项目都是这样的情况。

  2. 海量数据的解决方案
    1)使用缓存
    2)页面静态化技术
    3)数据库优化
    4)分离数据库中活跃的数据
    5)批量读取和延迟修改
    6)读写分离
    7)使用NoSql和Hadoop等技术
    8)分布式部署数据库
    9)应用服务和数据库分离
    10)使用搜索引擎搜索数据库中的数据
    11)进行业务的拆分

    千万级数数据,mysql实际上确实不是什么压力,InnoDB的存贮引擎,使用B+数存储结构,千万级的数据量,基本也就是三四层的搜索,如果是配置合适的索引,性能基本也不是问题

    但有时候业务上面的增长,导致数据还会继续增长,为了应对这方面的问题而必须要做扩展了此时可能首先考虑的就是分库分表

    数据的切分: 就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散的存放到多个数据库中,以达到分散单台数据库负载的效果,即为分库分表

  3. 分表
    把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它

    1)什么时候考虑分表?
    * 一张表的查询速度已经慢的受到影响的时候
    * sql经过优化
    * 单张表中数据量爱的
    * 当频繁插入或者联合查询时,查询变慢
    2)分表解决的问题
    * 单表的并发能力提高了,硬盘I/O性能也提高了,写操作效率提高了
    * 查询一次的时间短了
    * 读写缩影的数据变小
    * 插入数据需要重新建立索引的数据减少

  4. 分库
    将一个应用中对应的一个数据库分解成多个数据库,且可以这多个数据库可以存在同一个服务器上,也可以存在于多个服务器上

    1)什么时候考虑分库?
    * 单台DB的存贮空间不够
    * 随着查询量的增加单台数据库服务器已经没法支撑

    2)分库解决的问题
    * 主要目的是为了突破单节点数据库的I/O能力限制,解决数据库扩展性问题

  5. 分区
    把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的

    1)什么时候考虑分区
    * 张表的查询速度已经慢的受到影响的时候
    * sql优化
    * 数据量大
    * 表中的数据是分段的
    * 对数据的操作往往只涉及一部分数据,而不是所有的数据

    2)分区可以解决的问题
    提升查询效率

    3)分区的实现方式
    使用数据库工具,或者sql语句

PARTITION BY RANGE(YEAR(order_day)) (PARTITION p_2010 VALUES LESS THAN (2010),PARTITION p_2011 VALUES LESS THAN (2011),PARTITION p_2012 VALUES LESS THAN (2012),
PARTITION p_catchall VALUES LESS THAN MAXVALUE);MAXVALUE 表示最大的可能的整数值。查看某一分区内的数据:
SELECT * FROM sales PARTITION (p_2010);/*查询在该分区内的数据*/删除分区
ALTER TABLE sale_data DROP PARTITION s20100406 ;

4)分区类型
* RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
* LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
* HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
* KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值

6. 分区和分表的区别于联系
* 分区和分表的目的都是减少数据库的负担,提高表的增删改查的效率。
* 分区只是一张表中的数据的存储位置发生变化,分表是将一张表分城多个表
* 访问量大,且数据比较大时,两种方式可以互相配合使用
* 访问量不大,但表数据比较多时,可以只进行分区

7. 垂直分割和横向分割
将表中的一个字段存放在另一个表(或数据库中) 将表中的一些数据存放到另一个表中或数据库中其中两个表的字段一致

  1. 拆分之后面临的问题**
    1)事物的支持
    ,分库分表,就变成了分布式事务
    2)join时跨库,跨表的问题
    3)分库分表,使用分布式读写分离,分布式为了保证为强一致性,必然带来延迟,导致性能降低,系统的复杂程度高

解决方案
1)分布式事物的解决方法为JTA,而JTA的实现又需要依靠Atomikos框架,而Atomikos又需要SringData+jpa支持,而SptingData+jpa又可以需要Hibernate实现持久化操作
2)选用第三方的数据中间件(Atlas,Mycat,TDDL)同时业务系统需要配合数据存储的升级

9. 总结
能不分就不分,分库分表的行为都会在某种程度上提升业务逻辑的复杂度,业务的时间复杂程度往往会翻倍或指数上升,所以,在分库之前,不要为分而分,去做其他做其它力所能及得事情把,比如升级硬件,网络,数据库版本,读写分离,负载均衡等,所有分库分表的前提是,这些你已经尽力了。

Mysql海量数据处理相关推荐

  1. Mysql海量数据处理(亿级)

    以下都是真实的工作遇见的问题和解决,希望能给各位提供一些思路和解决方案.欢迎留言探讨. 环境: Linux服务器 mysql 5.7 问题: 某个业务表数据量有2亿多条,由于一开始设计的时候就做了分表 ...

  2. 从hadoop框架与MapReduce模式中谈海量数据处理

    前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是 ...

  3. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起 ...

  4. 面试中海量数据处理总结

    教你如何迅速秒杀掉:99%的海量数据处理面试题 前言 一般而言,标题含有"秒杀","99%","史上最全/最强"等词汇的往往都脱不了哗众取宠 ...

  5. 海量数据处理相关算法及数据结构【转】

    积淀 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储.处理.操作.何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存. 那解决 ...

  6. 海量数据处理的 Top K相关问题

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 Top-k的最小堆解决方法 问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数.(称作Top k或者Top ...

  7. 海量数据处理算法 各种STL容器使用的数据结构剖析

    教你如何迅速秒杀掉:99%的海量数据处理面试题 转载于:结构之法算法之道blog 前言 一般而言,标题含有"秒杀","99%","史上最全/最强&qu ...

  8. 实战——幂等性+海量数据处理

    文章目录 前言 一.服务幂等 1.防止订单重复下单 1.1 场景如下:当用户在提交订单的时候 1.2 重复下单解决方案 1.3案例一幂等性总结 2 防止订单ABA问题 2.1 场景如下:当在修改订单用 ...

  9. infoQ 百度技术沙龙第25期回顾:海量数据处理技术解析

    百度技术沙龙第25期回顾:海量数据处理技术解析(含资料下载) 作者 贾国清 发布于 2012年4月8日 领域  运维 & 基础架构,  架构 & 设计,  语言 & 开发  主 ...

  10. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

最新文章

  1. Android 三角形控件
  2. OLEDB访问CSV、txt
  3. HDU 3949 XOR 线性基
  4. linux u 驱动程序,在uClinux中增加自己的设备驱动程序
  5. go编译库给c语言函数返回值,go语言 函数return值的几种情况
  6. JY01-KX-01
  7. android 8.1.0怎么截屏,vivo Z1i怎么截屏?4种vivo Z1i截图方法
  8. python实践项目(四)
  9. C#建立手机号段全库
  10. 安装各种工具/第三方库(随时更新)
  11. comsol和java_COMSOL java API——编译comsol模型java文件
  12. Android 仿美团GridView分页滑动(类似直播礼物列表效果)
  13. Python大屏看板最全教程之数据库连接
  14. 【入门】倒序输出一个四位整数
  15. VirtualBox 虚拟机里网络很慢的解决方法
  16. js经典代码200句
  17. FJUT 2019暑假第三次周赛 C - 郭先生的魔法阵
  18. 多线程设计模式-线程池模式
  19. jvm垃圾回收之垃圾收集器
  20. CALL和jmp近远调用的区别

热门文章

  1. 值得收藏的UmiJS 教程
  2. 京东移动端分类页面侧导航栏实现
  3. 条码专题--条码技术应用
  4. IDEA 思维导图 ,类UML 图工具插件 plantUML integration
  5. 基于 GARCH-CoVaR 方法的中国 A 股行业 关联网络风险溢出动态研究
  6. vba调用二维码ocx
  7. c# 代码混淆器ConfuserEX使用
  8. 人工智能之-产生式系统
  9. 计算机专业实习报告-5000字+,以及计算机专业实习周记-15篇
  10. 三组计算机局域网组网方案,多种方式组建家庭局域网