-
持久型数据库(mysql) 为啥会比非 持久型数据库(redis)更快?
这个东西是反直觉的,一般人正常来想,从内存里面读数据肯定比从磁盘里面读数据 要更快, 但是 mysql 也有可能 出现 读取的数据 缓存在内存中的情况,那为啥mysql 仍然还是要比 redis慢呢?
实际上,除开 读取磁盘的区别,更大的区别,redis 不需要 将 内存中的数据结构 编码(encode)为硬盘数据结构,不过现在 redis 也可以异步持久化, -
OLAP 和 OLTP的区别
实际上这个很简单, OL 是 online 的意思, tp 是 transaction process (事务处理), ap 是 analytical process (分析处理), 简单的说OLAP用于数据仓库 数据分析等, OLTP就是正常事务处理,
-
数据库的复制
复制有很多种策略, 最简单的
a. 同步复制(性能最差)一条数据插入之后, 所有的从库 都要复制完成之后才算完成, 这个出现网络错误等问题之后,很容易崩溃,一般不建议
b. 异步复制
主库先插入数据,从库异步完成操作,
如果插入之后立刻读取可能会出现 读取不到最新数据的问题,(修复策略是 读取时 指定读主库) -
分区
分区 一般是和复制 在一起, 即 既有 复制又有 分区,
分区是将表 分块, 分开存储, 分开有多种策略,
一般就是按 id的hash 分区 取 前两位 按照 36进制取值 然后根据分块 取值落点就行了,
用hash 取值分区呢,好处在于 ,均匀,不会出现 大量 热点数据 居中在一个分区上的情况,缺点在于 失去了数据的连续性,范围查询会变得麻烦,( 解决方案呢:建立索引)
为什么不用 hash值除以分区数 取余数呢,即mod方案, 因为重新分区的情况, 分区数据可能会出现移动,原本是 1号分区的数据 可能变为了2号,大量数据都会移动,正常情况了 用hash 取值就够了 -
事务
事务关键词 ACID, atomic ,consistency , isolation, durability ,实际上类似 REST规范,你并不能通过 一个 数据库声明他是一个ACID数据 库,来预测他的行为,目前 还是以mysql为规范。
脏读 :读到了未提交的数据
脏写: 两个事务同时提交的问题,覆盖写入
读已提交:mysql实现方式是, 如果事务未提交,读到旧数据,提交了 读新数据,
ddia 学习笔记(1)
2020-12-28