Mysql海量数据处理

Mysql海量数据处理一说海量数据有人就说了直接用大数据,那只能说不太了解这块,为此我们才要好好的去讲解一下海量的处理海量数据的处理分为两种情况1)表中有海量数据,但是每天不是很快的增长2)表中有还流量数据,而且每天很快速的增长针对这了两种情况,我们给出的解决方案也不太一样,而且也不是所有的项目都是这样的情况。海量数据的解决方案1)使用缓存2)页面静态化技术3)数据库优化4)分离数据库中活跃的…

大家好,又见面了,我是你们的朋友全栈君。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152425.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 隶属度函数模板_高斯隶属度函数

    隶属度函数模板_高斯隶属度函数模糊隶属度函数划分等级根据国家对信号交叉路口的评价标准,对交通状况分为4个等级,分别为Ⅰ级舒适畅通、Ⅱ级接近饱和、Ⅲ级常呈混乱、Ⅳ级阻塞。因此选用4个等级的模糊隶属度函数。分别为:某时段交通状况对Ⅰ级路况的隶属度函数:        某时段交通状况对Ⅱ级路况的隶属度函数:        某时段交通状况对Ⅲ级路况的隶属度函数:        某时段交通状况对Ⅳ级

    2025年7月27日
    7
  • TCP连接异常终止(RST包)场景分析

    TCP连接异常终止(RST包)场景分析一、TCP异常终止(reset报文)TCP的异常终止是相对于正常释放TCP连接的过程而言的,我们都知道,TCP连接的建立是通过三次握手完成的,而TCP正常释放连接是通过四次挥手来完成。但是有些情况下,TCP在交互的过程中会出现一些意想不到的情况,导致TCP无法按照正常的三次握手建立连接或四次挥手来释放连接。如果此时不通过其他的方式来释放TCP连接的话,这个TCP连接将会一直存在,占用系统的资源。在这种情况下,我们就需要有一种能够释放TCP连接的机制,这种机制就是TCP的reset报文。reset报文是指

    2022年10月1日
    2
  • JAVA数组的定义及用法

    JAVA数组的定义及用法

    2021年12月1日
    47
  • python chmod_Python os.chmod用法及代码示例

    python chmod_Python os.chmod用法及代码示例Python中的os.chmod()方法用于将路径模式更改为数字模式。用法:os.chmod(path,mode)参数:path-pathnameofthefileordirectorypathmode-modemaytakeoneofthefollowingvalues:stat.S_ISUID:SetuserIDonexecutionstat.S…

    2022年10月20日
    2
  • docker打包镜像到本地_如何从虚拟机导出镜像

    docker打包镜像到本地_如何从虚拟机导出镜像引言当我们在测试环境(本文特指docker容器)部署好自己得服务得时候,想在生产环境上部署我们得服务,又害怕环境不一样导致服务不能运行,那么这个时候就可以把我们得容器导出为镜像,然后再把镜像导出为压缩包,接下来把压缩包复制到我们的生产环境,然后在生产环境把压缩包导入为镜像,最后使用此镜像开一个容器,然后在容器内打开我们的服务,那么我们的服务就可以正常运行啦!环境简介系统环境:ubuntu18.04如果要在新的服务器使用我们的镜像,那么需要新的服务器和你测试环境的服务器的底层系统一致,即如果你测试环

    2025年9月21日
    8
  • 手机扫码登陆原理(扫码充电线原理)

    问题描述 qq,淘宝等应用在pc端app或网页版都有扫码登陆功能(下述统称为网页端)。用户无需输入用户名和密码,通过在手机端app登陆后,扫网页中的二维码即可直接登陆。 原理分析:网页端+服务器 用户在浏览器点击“二维码登陆”向服务器发送扫码登陆请求,服务器收到请求后,随机生成一个uuid(通用唯一标识符:universallyuniqueidentifier),将这个i…

    2022年4月18日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号