海量数据存储之存储设计(一)
转自:http://forchenyun.iteye.com/blog/942448 相关文章推荐: 海量数据存储之Key-Value存储简介 海里数据存储之存储设计(二) Je的排版真的让人难过...... 从本文开始着重讲解存储细节,思路比较飘逸,观者多包涵。 翻译了一篇Redis作者antirez的 文章 做为本文的切入点,翻译得不好,这部分可以大致一览,后面会有分析。 Append Only和Reuse Blocks的一些区别 对于一颗append only btree(以下简称AOB)来说,最有趣的属性就是它不可能出现corrupt(可以理解为数据不一致状态)。另外一个有趣的属性就是并发访问没有任何问题,因为无论你访问根节点或其它节点,它们总是一致的(Valid)。 但是有一点我不喜欢的,AOB需要一个额外的Compaction(压缩)进程,否则文件会越来越大。如果你的访问需求是绝大部分是读,那么这样是没问题的。但如果你有非常多的写需求,那么问题就来了。 试想一下:如果你的写请求非常大,已经到了磁盘IO的极限,此时你的AOB文件会越来越大,你需要Compaction。但是你已经达到了IO瓶颈,这时你是重新开一个文件还是重写这棵树呢?这些额外的IO将会影响到这棵btree的性能。你能先降低写请求来降低这种冲撞吗?很遗憾不能,另外