Journal on 2020-01-16
Posted on Thu 16 January 2020 in Journal
Maxim
希望不是未来的东西,它是看见此刻的方式。
分布式计算的谬论
refer to https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing
The fallacies are:
- The network is reliable 网络是可靠的
- Latency is zero 延时为零
- Bandwidth is infinite 带宽无限
- The network is secure 网络是安全的
- Topology doesn't change 网络拓扑是不变的
- There is one administrator 有一个管理员
- Transport cost is zero 传输成本为零
- The network is homogeneous
key-value数据结构
一般有三种:Hash表、红黑树、SkipList,它们各自有着不同的优缺点(不考虑删除操作):
- Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。
- 红黑树:插入、查找为O(logn),但常数项较小;无锁实现的复杂性很高,一般需要加锁;数据天然有序。
- SkipList:插入、查找为O(logn),但常数项比红黑树要大;底层结构为链表,可无锁实现;数据天然有序。
如果要实现一个key-value结构,需求的功能有插入、查找、迭代、修改,那么首先Hash表就不是很适合了,因为迭代的时间复杂度比较高;而红黑树的插入很可能会涉及多个结点的旋转、变色操作,因此需要在外层加锁,这无形中降低了它可能的并发度。而SkipList底层是用链表实现的,可以实现为lock free,同时它还有着不错的性能(单线程下只比红黑树略慢),非常适合用来实现我们需求的那种key-value结构。 LevelDB、Reddis的底层存储结构就是用的SkipList。