哈希表总结及其高级话题讨论
哈希表(hash table)是一种快速查找场景下常用的数据结构,本文对其主要问题及其高级应对方法进行有限的总结和讨论:
-
负载不够均衡,此时会有哈希冲突(collision)出现,导致哈希表性能下降
-
负载高时,若不进行空间扩展则性能下降,若进行空间扩展,扩展行为的(瞬间)代价通常较高
工作中常用到的 C++ 功能子集
用 C++ 语言也有一些年头了,在此总结一些工作中比较实用的 C++ 的功能子集。这里的主要使用场景是系统编程,不包括各种通用类库。
论文笔记:[ICDE'18] Anna: A KVS for any scale
Anna 是 Berkeley 大学研究的一种 Key-Value 存储 [1]。其开创性的使用 lattice 的方式允许用户自定义冲突解决方式,进而可以自定义一致性级别,在特定场景下极大的提升系统性能。Anna 使用了 Actor 模型而非传统的共享内存模型构建系统,使得系统可以以几乎一致的方式处理单机/分布式场景下的通信和协调,并且充分发挥硬件提供的并发能力。论文中没有详细叙述实现这两者的具体细节,由于这两者的实现方式都有一定难度,期待接下来的研究能够披露出进一步的细节。
每个程序员都应该会点形式化证明
我认为每个程序员都应该会点形式化证明,这有助于思考,更有助于写出正确的实现。
单机存储引擎的基础方法
这是一篇关于单机存储引擎基本思路的总结和分析。
论文笔记:[OSDI'14] F4: Facebook's Warm BLOB Storage System
F4 是 Facebook 为了降低存储成本而开发的,应用于只读可删除不可写场景的,对象存储系统。
论文笔记:[OSDI'10] Finding a needle in Haystack: Facebook's photo storage
Haystack 是 Facebook 为了其图片存储场景进行特殊优化的热存储系统,系统接口是简单 Key-Value 存储。论文主要描述了其单机存储引擎的构建,针对一次写入多次读取从不修改的场景进行优化。本笔记只涉及到论文中单机存储引擎的部分。
论文笔记:[USENIX ATC'14] In Search of an Understandable Consensus Algorithm (Raft)
Raft 是一种分布式共识算法,用于解决在异步通信网络中存在节点失效且本地存储可靠的情况下多个分布式节点达成一致的问题。在已经提出 Paxos 算法用于解决这一问题的情况下继续提出 Raft 算法,主要是为了解决 Paxos 理解困难的问题。Paxos 算法更偏向于理论研究,对于实现的很多细节虽然略有提及,但是并没有进行深入的讲解和讨论,因此对于算法的实现和优化而言还有很多困难。
论文笔记:Paxos Made Simple
Paxos 是一种分布式共识算法,用于解决在异步通信网络中存在节点失效且本地存储可靠的情况下多个分布式节点达成一致的问题。文中的算法只解决了决议一条法案(decree)的情况。如果需要决议多条法案,可以将该算法执行多次,每次分别对应一条法案。可以想象,有可能存在一些步骤在多次决议时无需重复执行,因此在多次决议法案的情况下,该算法可以进一步优化,但没有在本文中进行具体展开。
论文笔记:[SOSP 2007] Dynamo: Amazon's Highly Available Key-value Store
如题所述,该论文讲述了一种构建高可用 Key-Value 存储的方案,高可用主要是针对于写请求,存储的环境是可信环境,存储的对象的大小一般不超过 1MB。实现方法类似于 Chord + MVRs(multi-valued registers),但是另有不少针对性能的优化。Dynamo 提供 observable causal consistency。根据 论文笔记:[PODC 2015] Limitations of Highly-Available Eventually-Consistent Data Stores,这已经是这一类系统所能提供的最高一致性了。[3]