MySql(一):存储层技术选型

存储层技术:文件、数据库、redis、hbase、mangoDB、ES分布式集群等等。

 

常识-计算机存储的方式

时间单位:秒 > 毫秒 > 微秒 > 纳秒,每两级之间的换算进率为1000。

  • 1秒=1000毫秒(ms)
  • 1毫秒=1000 微秒(μs)
  • 1微秒=1000 纳秒(ns)
  • 1纳秒=1000 皮秒(ps)
  • 1皮秒=1000飞秒(fs)

1、磁盘:

磁盘寻址为毫秒级别,磁盘IO为百兆级别(带宽吞吐量);数据可靠,可以做持久化。

例如:磁盘和网卡都属于IO设备

ping www.baidu.com,物理网卡寻找为毫秒时间

2、内存:

内存寻找为纳秒级别,断电数据会丢失。

ping 本地地址,只是一个虚拟网卡,寻找路径只是在内存里面

 

 

文件存储特点:单文件全量IO

  • 存储:单文件存储,使用文本,换行符来区分每行数据,数据的查询通过I/O进行,查找是会进行全量IO操作,按行来顺序查询

  • 磁盘寻址和IO吞吐的硬件限制;
  • 属于线性查处,时间复杂度为O(n),所以数据量越大时查找越慢。

 

数据库存储特点索引树内存寻址+数据块IO(磁盘)

  • 存储:分治的思想,使用数据块datapage,大小为16k,更小的格子,和操作系统对磁盘与内存交互的"页"同样,innodb可通过查看Innodb_page_size;查看数据库信息配置可使用show variables like "%innodb%" 等等;

  • 索引(B+树)来建立和数据的映射关系,优先放在内存缓存(内存寻址快)。如果不使用索引,或者索引不命中,数据库查找同样是对数据块进行一块一块查找,也是全量IO;
  • 优点:通过索引树来进行内存寻址,根据映射关系找到对应的数据块,减少磁盘无关数据的IO。

  • mysql表的存储引擎不同,数据和索引数据是否存储在一起也不同

  • 数据库的数据存储还是磁盘存储,所以还是存在磁盘IO瓶颈问题。

 

表数据越多,crud会越慢?

1、数据写入一定会变慢,因为写入会进行索引的排序和维护。

2、数据查询分很多情况:

  • 单查询,在命中索引,查询一条数据,且数据库连接够用,查询都是通过内存上的寻址,然后进行数据块的IO,速度是不受影响;
  • 高并发下,即便是简单查询,可能每个查询命中是不同的数据块,需要拿取多个数据块总量会受限磁盘的IO吞吐最大量,即磁盘IO瓶颈,也会变慢;
  • 进行复杂逻辑查询时,如join,将两个表数据按条件合并成一行,这时也需要不断进行数据块的IO,如果数据量大也会受磁盘IO瓶颈限制;
  • 查询索引没命中会进行全表扫描,查询的数据量大IO次数多,连接不够用需要等待也会影响查询速度。

tip:

1、mysql自己的缓存,将sql语句进行hash,将结果缓冲在内存里,之后sql进行hash后一样时,直接从内存中取走结果,但是只有sql中查询条件改变,仍需要重新进行数据库查询,意义不大,一般不开始数据库缓存。

2、分库分表,数据分开存储会引入新的问题:查询数据分布在多个主机,进行数据汇总时会涉及网络IO、磁盘IO、磁盘缓冲等等其他维度的新问题,不在此探究。

 

SAP-HANA数据库:内存存储的关系型数据库

  • 纯内存存储,通过日志系统来做持久化;
  • 速度快相对于普通mysql数据库快,同样的数据在内存数据库内存占用少。比如1w条数据,某个字段都是同样的字符串,在磁盘中会重复存1w个,但是在内存中,如java,1w个对象,某个字段用的相同的字符串,在内存中是引用的同一个数据。
  • 内存数据库贵~。~

磁盘存储数据库慢,内存存储数据库贵。所以根据数据进行冷热数据区分,冷数据放在磁盘,热数据存储在内存,所以redis、memcache出现。

 

 

Redis/Memcahce缓存: 内存存储+缓存

1、内存存储,速度快,noSql,KV,单线程Epoll,支持多种类型数据存储,不用本地序列化/反序列化,可直接取存储数据中的某一个数据(本地方法),计算向数据靠近/数据向计算靠近;

2、为什么不支持sql查询?因为redis在架构设计中用于缓存,只存储一部分数据,且冷数据会丢弃,并不去存储全量数据,所以支持sql是没有意义。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值