“写优化”的数据结构(3):small-splittable-tree



"写优化"的数据结构(3):small-splittable-tree

如果你感到buffered b-tree 或者 x�Cy tree还是有点复杂,这里还有简单的。
如果不走tree-like派系,那就走短、平、快的small-splittable-tree的路子,甚至可以玩small-splittable-list。

短就是每个tree单元要小。
平就是tree高度要低。
快就是分裂起来要快(compaction)。
这里的tree可以是b-tree或其他的tree结构都没问题,但在分裂起来,一定要快,不能hang住写线程。

如果你嫌tree结构有高度,还是复杂,那可以来简单的small-splittable-list,也就是所有数据插入完毕,最终是个顺序的list,这个list由多个segment构成,任何两个segment之间不会有区间重叠。

write
--------
每个segment反映到磁盘就是一个文件,比如1.SSL。
这个SSL文件由2部分组成:header和blocks。
header记录区间信息,比如: <pivot1, blockid1> ... <pivotn, blockidn>,用于数据归属block查找。
block里存放的是key-value数据(追加写),每个block大小是固定的(比如256KB),当block满了,就分裂成2个block,当一个SSL里的block都满了(个数等于 SSL-size/block-size),则对这个SSL进行分裂,这个分裂过程也是很快的,没有数据merge过程。

read
------
首先根据key定位到你属于哪个SSL,然后根据header定位到你属于哪个block,这样就搞定了。

small-splittable-list基本就是在往AOF靠拢,但是读起来是很快的。

这种数据结构的缺点就是page cache利用率不高,共享部分太少了,如果是tree,从root到某些inner-node的路径是可共享的,只好做记录级缓存了,kernel帮不了你。

Read full article from "写优化"的数据结构(3):small-splittable-tree


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts