Antkillerfarm Hacking V7.0

数据库(二)

2020-03-19

数据库

分布式算法

Paxos、Raft、Gossip、Nuorum NWR、PBFT、Anti-Entropy、POW、ZAB等等。

https://mp.weixin.qq.com/s/KKrxuVCrjlXXWMPTXQ-fvA

分布式之系统底层原理

https://zhuanlan.zhihu.com/p/130974371

分布式一致性协议概述

https://mp.weixin.qq.com/s/NqLpT47ZWD6oJzfo_tWceA

Paxos(分布式一致性算法)

https://mp.weixin.qq.com/s/OXE7prU9cMuZG8kFydPm9A

Paxos和Raft的前世今生

https://mp.weixin.qq.com/s/ZE3sXRWoZYgbSIPTYIHWoA

浅谈分布式一致性:Raft与SOFAJRaft

https://mp.weixin.qq.com/s/Fj4zERz9PEuNumd_SI0bEA

浅谈CAP和Paxos共识算法

https://mp.weixin.qq.com/s/KTZQjC1JokmwmCkOH8APdg

一文了解分布式一致性算法EPaxos

https://mp.weixin.qq.com/s/42cStPudXRHjs61gjSIgWw

一文读懂区块链与传统数据库之共识机制

https://blog.csdn.net/blockchain_lemon/article/details/84801413

一文读懂11个主流共识算法, 彻底搞懂PoS,PoW,dPoW,PBFT,dBFT这些究竟是什么鬼…

https://zhuanlan.zhihu.com/p/113612578

Chandy-Lamport算法核心解读

https://mp.weixin.qq.com/s/q2XL-_XoRLL1xLzGmzlo6A

分布式快照算法: Chandy-Lamport

https://zhuanlan.zhihu.com/p/130332285

分布式一致性算法-Paxos、Raft、ZAB、Gossip

https://mp.weixin.qq.com/s/ow-6rQYGlvX316h63aCGVg

百度正式开源其Raft一致性算法实现braft

https://zhuanlan.zhihu.com/p/273270802

包教包会的用一张白纸推导出RAFT算法

https://zhuanlan.zhihu.com/p/25664121

比较raft ,basic paxos以及multi-paxos

https://mp.weixin.qq.com/s/JVreQzE8B6nAgPmDHM5aXQ

从Paxos到Multi-Paxos

Cache

缓存雪崩指大量缓存同一时间段集体失效,或者缓存整体不能提供服务,导致大量的请求全部到达数据库,对数据CPU和内存造成巨大压力,严重的会造成数据库宕机。也被称为缓存踩踏(Cache Stampede)。

使用随机过期时间。为每一个key都合理的设计一个过期时间,这样可以避免大量的key在同一时刻集体失效。


https://mp.weixin.qq.com/s/RME5b3plT97nYfUaCl9ePw

关于缓存和数据库强一致的可行方案

https://mp.weixin.qq.com/s/gQAA2-YuvTHrL2IP8Bco6w

缓存与数据库的数据一致性方案介绍

https://mp.weixin.qq.com/s/Gm7S0a5VN9L57wlry4-t6w

缓存关注点——先写DB还是“缓存”?

https://mp.weixin.qq.com/s/q-R7kv4696LooHy3Hn-H1A

分布式系统关注点——缓存背后的“毁灭种子”

https://mp.weixin.qq.com/s/cUBSOGFfkWNu91r9agXszQ

高并发系统三大利器之缓存

https://mp.weixin.qq.com/s/NdnE4uiT_b7omDx_uBGAtg

你可以说一下缓存击穿、穿透、雪崩的区别和解决方法吗?

https://mp.weixin.qq.com/s/QgFbw5thvip2txUJZNQqCA

缓存一致性问题怎么解决?

https://mp.weixin.qq.com/s/XOiHlurpwCa-MmQp1yAjSQ

高并发场景下,到底先更新缓存还是先更新数据库?

https://mp.weixin.qq.com/s/o1wbG_9LDDqM2kLNAfHUIg

没人告诉过你更复杂的缓存穿透怎么解决

https://mp.weixin.qq.com/s/0J9X-fFp3y0zaxR78tBfQQ

服务降级该怎么做?

https://mp.weixin.qq.com/s/_RlOAvjfTINJrhwHUogs7Q

分布式缓存与DB秒级一致设计实践

https://mp.weixin.qq.com/s/mjySTz73Ltcfsw1e6iY4YA

缓存踩踏:Facebook史上最严重的宕机事件分析

https://mp.weixin.qq.com/s/sE8xhHUc5qhzeaRga_VFeQ

再也不怕,缓存雪崩、击穿、穿透!

https://mp.weixin.qq.com/s/Ii0b6ORmsxjmXsVRnhG5eA

如何解决缓存系统的数据不一致问题

https://mp.weixin.qq.com/s/rxvNSZtRyA7f27TKKL3J_g

爱奇艺本地实时Cache方案

https://www.ibm.com/docs/en/i/7.2?topic=management-thread-local-storage

Thread Local Storage(TLS)

横向拆分和纵向拆分

横向拆分:按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。适用场景:数据有独立性,例如表中分别记录各个地区的数据或不同时期的数据。

纵向拆分:按列进行分割,即把一条记录分开多个地方保存,每个子表的行数相同。如果一个表中某些列常用,而另外一些列不常用,则可以采用纵向拆分。

参考:

https://www.cnblogs.com/shz365/p/6349618.html

数据库拆分:横向拆分和纵向拆分

DML & DDL

DML(Data Manipulation Language)数据操纵语言:

适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.

DDL(Data Definition Language)数据定义语言:

适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.

数据管理工具

数据管理工具主要有:Navicat和DataGrip。

https://www.cnblogs.com/zuge/p/7397255.html

DataGrip使用入门

https://mp.weixin.qq.com/s/9Q18rptRwV4Ccg33dD9BrQ

操作所有的数据库靠它就够了(DBeaver)

https://mp.weixin.qq.com/s/x2Rdw2iLuNzs4tN7rwfWvA

这个工具牛逼了!将任何SQL数据库转换为智能电子表格(NocoDB)

数据湖

数仓:“结构化”地存数据。典型代表:用Excel记账目。

我们平时写东西的时候不一定都是开excel:写个文档用word,拍个照片存相册里面,这些数据没法像数仓一样“结构化”:如果有个人告诉你说“你把照片都放Excel里面”,你会觉得他疯了,对吧。但是这些东西最好都放一块存起来,别丢了——在家你可能就存硬盘里面,存移动硬盘里面,或者fancy一点,存云盘里面。把数据“放一块”,先不担心怎么把它有条有理做成大Excel表格,这个就是数据湖

https://mp.weixin.qq.com/s/mYwaGszQGod_o6f3p2QbDw

深度对比Delta、Iceberg和Hudi三大开源数据湖方案

https://mp.weixin.qq.com/s/O94Q1Dxe8TnbCMv9d_hlOg

Uber推出数据湖集成神器DBEvents,支持MySQL、Cassandra等

https://mp.weixin.qq.com/s/ufvvGCh7xxu8keQ-j0bjEA

数仓实时化改造:Hudi on Flink在顺丰的实践应用

https://mp.weixin.qq.com/s/csUPkJYpmTyLZqYU3lecRw

Flink和Iceberg如何解决数据入湖面临的挑战

LSM (Log Structured Merge)

数据库的存储格式,有用无序的Heap表,堆表。也有用有序表。堆表吗,数据来了随便一放,没有顺序、没有规律,想怎么放就怎么放,乱七八糟,估称堆表。有序表,比如Skiplist算法等。数据以Key为准排个序,码放的整整齐齐。进入存储系统时,还可以再去个重什么的,也就是SSTable。


十年前,谷歌发表了 “BigTable” 的论文,论文中很多很酷的方面,其中之一就是它所使用的文件组织方式,这个方法更一般的名字叫Log Structured-Merge Tree。其核心思想就是放弃部分读能力,换取写入的最大化能力。

http://www.open-open.com/lib/view/open1424916275249.html

Log Structured Merge Trees(LSM)原理

https://mp.weixin.qq.com/s/CmYg22NObamkNOqGjKg0-w

解读现代存储系统背后的经典算法

https://mp.weixin.qq.com/s/9L_HOCfRwC_QxjzJyVjKXA

字节跳动在RocksDB存储引擎上的改进实践

数据库变更

数据库变更工具主要有Liquibase和Flyway。

https://mp.weixin.qq.com/s/67KEakYxM2lNm_hB9_W9BQ

老板:把数据库变更,给整利索了

时序数据库

https://mp.weixin.qq.com/s/yQSMSLBYg4iauu8yeUfvjw

深度解读!时序数据库HiTSDB:分布式流式聚合引擎

https://mp.weixin.qq.com/s/rZuGW9Fe0TA3dNEY7dh_Jg

TimescaleDB比拼InfluxDB:如何选择合适的时序数据库?

https://mp.weixin.qq.com/s/L_-3H51TpRLBQnqRiLxP4Q

实时数据库:一夜之间,我感受到了时序数据库的威胁

OpenTSDB

OpenTSDB(Time Series Database)是一个基于HBase的存放时序数据的数据库。

官网:

http://opentsdb.net/

DB这个词很有误导性,其实它并不是一个db,单独一个OpenTSDB无法存储任何数据,它只是一层数据读写的服务,更准确的说它只是建立在Hbase上的一层数据读写的服务。

HBase在使用上的一个难点就是如何根据业务的特点,设计键值和索引。OpenTSDB就是这方面的一个实践。

参考:

https://mp.weixin.qq.com/s/GApmeXGbjRTnhullArlkYg

小米正用时序数据库,解决这个“硬核”问题

数据血缘

大数据时代,数据的来源极其广泛,各种类型的数据在快速产生,数据也是爆发性增长。从数据的产生,通过加工融合流转产生新的数据,到最终消亡,数据之间的关联关系可以称之为数据血缘关系。

https://mp.weixin.qq.com/s/LGK3YPZCe6oPTf48QaAIqA

携程数据血缘构建及应用

事务的隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。

脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。

不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。

幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)

https://www.cnblogs.com/myseries/p/10748912.html

数据库的4种隔离级别

Share Nothing & Share Disk

share nothing和share disk是两种常见的分布式数据库模型。

share nothing架构下,每个结点都有自己的CPU、内存、存储。跨结点的数据访问通过结点之间的网络通讯来完成。

share disk架构下,每个结点有自己的CPU和内存,但是共享同一个存储。也就是说,存储只有一份,放在单独的分布式文件系统上,由文件系统本身来保证其可用性,一般由高端的专门存储设备来完成。

https://zhuanlan.zhihu.com/p/32924680

分布式数据库的Share Nothing/Share Disk/Share Storage

https://www.zhihu.com/question/20120283

为什么说MySQL Cluster是shared-nothing架构的?如何理解shared-nothing?

Fork me on GitHub