tokyocabinet源码分析.doc_第1页
tokyocabinet源码分析.doc_第2页
tokyocabinet源码分析.doc_第3页
tokyocabinet源码分析.doc_第4页
tokyocabinet源码分析.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

码农70%时间看别人的代码,30%的时间自己写代码。本人也是这样由于手头上的项目,花几天的时间把Tokyocabinet看了一下。Tokyocabinet 是一个DBM的实现,这里的数据库由一系列key-value对的记录构成。Key和value都可以是任意长度的字节序列。Tokyocabinet的源码结构md5.c myconf.c tcadb.c tcamgr.c tcatest.c tcawmgr.c tcbdb.c tcbmgr.c tcbmttest.c tcbtest.c tcfdb.c tcfmgr.c tcfmttest.c tcftest.c tchdb.c tchmgr.c tchmttest.c tchtest.c tctdb.c tctmgr.c tctmttest.c tcttest.c tcucodec.c tcumttest.c tcutest.c tcutil.c其中,tca*.c是抽象出来的数据库的代码,这个的库可以是hashtable,fix-length array database,b+ tree database 中的任何一种。tcb*.c是b+ tree数据库的相关代码,tcf*.c是fix-length array 数据库的相关代码,tch*.c是hashtable型数据库相关代码,tct*.c是table database相关的代码。理解了这些数据存储类型的区别,才能理解后来tokyotyrant的一些参数设置.在下一节就专门讲述这些; tcu*.c是工具类的杂项函数集。 基本上所有的数据库类型都有*test和*mttest,*mgr三个二进制程序。比如fix-length-array database有tcftest.c,tcftest.c,tcfmttest.c都有是main函数的。Tokyocabinet的存储类型n 如果DB名字为“*” 内存中的Hash存储n 如果DB名字为“+” 内存中的B+存储n 如果DB名字为“.tch” 硬盘上的HASH存储n 如果DB名字为“.tch” 硬盘上的B+存储n 如果DB名字为“.tcf” 像数组一样的连续数字对应定长值的存储n 如果DB名字为“.tct” 一个key值下面对应很多个name-value的形式Tokyocabinet的关键参数 bnum : 指定bucket array的数量。推荐设置为存储总记录的0.5 4倍,使key的哈希分布更均匀,减少在bucket内二分查找的时间复杂度。 xmsiz: 指定TCHDB的扩展MMAP内存大小。 rcnum: 缓存内存的记录条数 dbgfd : 设置为1,调试信息下面是硬盘上HASH存储的源码分析文件结构 图1 tch文件格式 如上图,文件大概分为3个部分1 256个字节的头,见下表;2 bnum个bucket数组,每个bucket保存offset, bucket 下第一个数据的绝对偏移量(文件);3 数据部分 表1 头的结构magic number032identification of the database. Begins with ToKyO CaBiNeTdatabase type321hash (0x01) / B+ tree (0x02) / fixed-length (0x03) / table (0x04)additional flags331logical union of open (10) and fatal (11)alignment power341the alignment size, by power of 2free block pool power351the number of elements in the free block pool, by power of 2options361logical union of large (10), Deflate (11), BZIP2 (12), TCBS (13), extra codec (14)bucket number408the number of elements of the bucket arrayrecord number488the number of records in the databasefile size568the file size of the databasefirst record648the offset of the first recordopaque region128128users can use this region arbitrarilyOn-memory hash结构 图2 这是On-memory hash结构图 1 最上层是maps数组,长度固定为8,对key的访问先hash到其中一个map; 2 每个map由buckets数组组成(bnum/8)。Key经过第二次hash到其中一个bucket; 3 hash到同一bucket的recor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论