数据库
文章平均质量分 78
受到了风
这个作者很懒,什么都没留下…
展开
-
nessDB2.0 学习笔记
nessDB2.0是1.0的改进版,整个sst的结构有了很大的变化,所以阅读源代码的时候虽然整体的思想没有改变,但是也不能一直想着1.0的结构,其实附带上spec文件夹下的small-splittable-tree.txt文件阅读,会给整体阅读带来极大的方便。 首先2.0还是那些util文件:buufer.c,bloom.c,skiplist.c 基本没变化degug.c 是生原创 2013-08-18 22:47:45 · 1170 阅读 · 0 评论 -
nessDB1.0学习笔记
接下来看nessDB。nessDB是使用LSM-Tree写的一个小巧简易的数据库。它的代码不多,但是确是学习LSM-Tree和数据库启动恢复的好例子。LSM-Tree使用BeansDB的BitCask使用的Log-Structred结构(其实应该说是BitCask仿照LSM-Tree,因为后者更早),更多的关于LSM-Tree的资料可以参考:http://duanple.blo原创 2013-08-17 11:31:13 · 1453 阅读 · 0 评论 -
BeansDB源码剖析——bitcask.c
/** Beansdb - A high available distributed key-value storage system:** http://beansdb.googlecode.com** Copyright 2010 Douban Inc. All rights reserved.** Use and distribution lic原创 2013-08-14 19:55:05 · 2622 阅读 · 0 评论 -
BeansDB学习笔记
BeansDB是豆瓣的刘洪清大哥写的一个分布式存储系统。关于它的详细介绍可以参看http://www.douban.com/note/122507891/ 同时InfoQ中还有刘洪清大哥的演讲视频及资料:http://www.infoq.com/cn/presentations/lhq-beansdb-design-implementationBeansDB是一个简化了的D原创 2013-08-14 19:39:31 · 2584 阅读 · 0 评论 -
BeansDB源码剖析——htree.c
typedef struct t_item Item;struct t_item { //int bucket = item->pos & 0xff; //表示是第几个文件 //uint32_t pos = item->pos & 0xffffff00; //表示在文件中的位置 uint32_t pos; //大于0该数据有效,小于0表明无效。 //ver不会等于0,原创 2013-08-14 19:45:16 · 1953 阅读 · 0 评论 -
BeansDB源码剖析——record.c
//DataRecord与item的不同是,item只保存键值,而record保存键值和value值,但是内存里只存PADDING的大小typedef struct data_record { char *value; union { bool free_value; // free value or not,改为need_free比较好 uint32_t crc;原创 2013-08-14 19:53:07 · 1602 阅读 · 0 评论 -
LevelDB 学习笔记 —— utils
LevelDB是谷歌两个大牛写的KV数据库,相信有很多人已经听过它的名字了。具体背景不做介绍。今天看的是它的util文件夹,由于以前看过了,所以对其中的代码并不是很陌生,但还是卡在了cache.cc上。其余的util文件其实没什么多大的难度,arena.cc创建了一个简单的内存分配器,comparator.cc由于还没有接触LevelDB的内部逻辑,可以不用看。histogram.cc是柱原创 2013-08-19 15:03:16 · 1485 阅读 · 0 评论 -
levelDB学习笔记 —— table
levelDB并不跟beansDB,nessDB一样将key和value分开,而是将key和value一起存放。存放的文件就是.sst文件,而一个文件的结构就是一个table。table筛选器的阅读顺序应该是1.block_builder.cc 结合block.cc文件最开始的注释,我们可以得到一个block的结构:许多个entry,最后是一个数组来记录一些原创 2013-08-22 21:17:13 · 1379 阅读 · 0 评论 -
GDBM学习笔记
符合X/Open技术规范的UNIX版本自备了一个数据库dbm。它使用hash表来保存非结构化数据,不支持SQL。它只是一个存储检索数据的例程。数据以key/data对的形式存储在文件中。规范中允许把关键字/数据对的长度限制为1023个字节,但通常实现时不限制。关键字的取值被用作存储数据的索引。dbm被X/Open组织标准化为ndbm。GNU的dbm实现为gdbm(GNU dbm的缩写),它本身原创 2013-08-08 16:11:20 · 5026 阅读 · 1 评论 -
levelDB学习笔记——Version
Version部分是levelDB中对LSM-Tree的“Merge”实现的精要。它主要包括以下的几个类:VersionEdit类主要是对Version的一些修改,比如add_files,new_files,还有log_number等。VersionEdit一般只有一个。Version类Version类保存着有效的files。所以它的作用主要是进行files的Itera原创 2013-08-30 10:50:40 · 2340 阅读 · 0 评论