注:部分参考《后端架构师技术图谱》
参考:《架构师技术图谱》
SQL
mysql
理论
原理
《MySQL的InnoDB索引原理详解》
《MySQL存储引擎--MyISAM与InnoDB区别》
《myisam和innodb索引实现的不同》
《MySQL数据库存储引擎详解》
InnoDB
优化
《MySQL36条军规》
《MYSQL性能优化的最佳20+条经验》
《SQL优化之道》
《通过show status 来优化MySQL数据库》
《避免全表扫描的sql优化》
《mysql数据库死锁的产生原因及解决办法》
《导致索引失效的可能情况》
《MySQL 在并发场景下的问题及解决思路》
《MySQL 单表百万数据记录分页性能优化》
《MySQL 性能优化高阶神技》
《数据库分库分表》
《 MYSQL分页limit速度太慢优化方法》
索引
聚集索引, 非聚集索引
《MySQL 聚集索引/非聚集索引简述》
《MyISAM和InnoDB的索引实现》
MyISAM 是非聚集,InnoDB 是聚集
复合索引
《复合索引的优点和注意事项》
文中有一处错误:
对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引
《MySQL查询where条件的顺序对查询效率的影响》
自适应哈希索引(AHI)
explain
系列文章
tidb
NoSQL
FS
《分布式系统的时间》
《分布式架构知识体系》
Zookeeper
Etcd
分布式架构
《亿级Web系统搭建——单机到分布式集群》
《Web系统大规模并发——电商秒杀与抢购》
《从单一架构到分布式交易架构,网易严选的成功实践》
《大规模网站架构的缓存机制和几何分形学》
《终于有人把“TCC分布式事务”实现原理讲明白了》
《分布式系统设计权衡之CAP》
《建高并发高可用的电商平台架构实践》
《分布式集群的负载均衡》
《一个复杂系统的拆分改造实践》
《秒杀业务架构的优化之路》
扩展性设计
CAP 与 BASE 理论
分布式锁
稳定性 & 高可用
Web Server
RPC
《从“被动挖光缆”到“主动剪网线”,蚂蚁金服异地多活的微服务体系》
《互联网架构,究竟为啥要做服务化?》
《微服务:从设计到部署》
Golang
PHP
Java
《TCP/IP学习》
OSI 七层协议
TCP/IP
HTTP
HTTP2.0
网络模型
Epoll
Java NIO
kqueue
连接和短连接
框架
Hessian
Protobuf
数据结构
队列
《java队列——queue详细分析》
非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。
阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、PriorityBlockingQueue,采用锁机制;使用 ReentrantLock 锁。
《LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析》
集合
链表、数组
字典、关联数组
栈
树
完全二叉树
平衡二叉树
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
《浅谈数据结构-平衡二叉树》
《浅谈算法和数据结构: 八 平衡查找树之2-3树》
二叉查找树(BST)
红黑树
B,B+,B*树
MySQL是基于B+树聚集索引组织表
《B-树,B+树,B*树详解》
《B-树,B+树与B*树的优缺点比较》
LSM 树
LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。
《LSM树 VS B+树》
B+ 树读性能好,但由于需要有序结构,当key比较分散时,磁盘寻道频繁,造成写性能较差。
LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。
《LSM树(Log-Structured Merge Tree)存储引擎》
极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。
优化方式:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。
Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,所以Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。
BitSet
常用算法
《常见排序算法及对应的时间复杂度和空间复杂度》
《图解排序算法系列》
《AES加密的四种模式详解》
《B-树和B+树》
排序、查找算法
选择排序
冒泡排序
插入排序
快速排序
归并排序
堆排序
计数排序
桶排序
基数排序
二分查找
《一致性hash算法》
分布式一致性算法
PAXOS
Zab
Raft
Gossip
两阶段提交、多阶段提交