- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
tokyocabinet源码分析
码农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的存储类型 如果DB名字为“*” 内存中的Hash存储 如果DB名字为“+” 内存中的B+存储 如果DB名字为“.tch” 硬盘上的HASH存储 如果DB名字为“.tch” 硬盘上的B+存储 如果DB名字为“.tcf” 像数组一样的连续数字对应定长值的存储 如果DB名字为“.tct” 一个key值下面对应很多个name-value的形式 Tokyocabinet的关键参数 bnum : 指定bucket array的数量。推荐设置为存储总记录的0.5 – 4倍,使key的哈希分布更均匀,减少在bucket内二分查找的时间复杂度。 xmsiz: 指定TCHDB的扩展MMAP内存大小。 rcnum: 缓存内存的记录条数 dbgfd : 设置为1,调试信息 下面是硬盘上HASH存储的源码分析 文件结构 图1 tch文件格式 如上图,文件大概分为3个部分 256个字节的头,见下表; bnum个bucket数组,每个bucket保存offset, bucket 下第一个数据的绝对偏移量(文件); 数据部分 表1 头的结构 magic number 0 32 identification of the database. Begins with ToKyO CaBiNeT database type 32 1 hash (0x01) / B+ tree (0x02) / fixed-length (0x03) / table (0x04) additional flags 33 1 logical union of open (10) and fatal (11) alignment power 34 1 the alignment size, by power of 2 free block pool power 35 1 the number of elements in the free block pool, by power of 2 options 36 1 logical union of large (10), Deflate (11), BZIP2 (12), TCBS (13), extra codec (14) bucket number 40 8 the number of elements of the bucket array record number 48 8 the number of records in the database file size 56 8 the file size of the database first record 6
文档评论(0)