tokyo cabinet源代码分析1

原创 2011年11月02日 17:42:56

1. tokyo cabinet系统介绍

 tokyo cabinet官方主页http://fallabs.com/tokyocabinet/,是一款kv型的数据库,没有数据类型,没有表的概念,key和value都可以是任意长度的字符串。

2. 安装及简单客户端程序

tokyo cabinet安装比较简单:

1. 下载源文件包:http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz

2. 解压该文件:

tar zxvf tokyocabinet-1.4.47.tar.gz

3. 编译安装

cd tokyocabinet-1.4.47/

./configure ; make ; make install

上面及完成整个tokyo cabinet数据库的安装,tokyo cabinet的使用也非常简单,和通常意义上的数据库操作是类似的:

1. 首先打开数据库,得到和数据库操作的句柄

2. 使用该句柄执行操作

3. 释放该句柄

解压完的example目录中有多个示例程序,tcadbex.c是比较简单的一个,内容如下:

#include <tcutil.h>
#include <tcadb.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>

int main(int argc, char **argv){
  TCADB *adb;
  char *key, *value;

  /* create the object */
  adb = tcadbnew();

  /* open the database */
  if(!tcadbopen(adb, "casket.tch")){
    fprintf(stderr, "open error\n");
  }

  /* store records */
  if(!tcadbput2(adb, "foo", "hop") ||
     !tcadbput2(adb, "bar", "step") ||
     !tcadbput2(adb, "baz", "jump")){
    fprintf(stderr, "put error\n");
  }

  /* retrieve records */
  value = tcadbget2(adb, "foo");
  if(value){
    printf("%s\n", value);
    free(value);
  } else {
    fprintf(stderr, "get error\n");
  }

  /* traverse records */
  tcadbiterinit(adb);
  while((key = tcadbiternext2(adb)) != NULL){
    value = tcadbget2(adb, key);
    if(value){
      printf("%s:%s\n", key, value);
      free(value);
    }
    free(key);
  }

  /* close the database */
  if(!tcadbclose(adb)){
    fprintf(stderr, "close error\n");
  }

  /* delete the object */
  tcadbdel(adb);

  return 0;
}

上面的程序打开数据库,插入几条数据,之后查询插入的数据,释放资源。

3. 系统key/value存储方式

tokyo cabinet中有多中数据存储方式,下面的博客中主要关注的是下面的两种存储方式HASH方式和B+树形式。如果是HASH形式的话,按照如下的形式组织:


给定key,之后,经过hash(key)得到对应的bucket,每个bucket使用二叉查找树的形式维护的是被hash到该bucket上的<key, value>。

如果是使用B+树的形式实现的话,组织形式如下:


这种组织方式使用B+树的形式给key构建索引,查找的时间复杂度为O(logN),另外的一种好处是使用B+树的形式能够更加容易的支持范围查询。



tokyo cabinet源代码分析(1)

tokyo cabinet数据库源代码分析。 Abstract database中对于on memory hash database进行分析。...
  • moxuansheng
  • moxuansheng
  • 2010年10月19日 00:40
  • 2237

性能强劲的Tokyo Cabinet 和 Tokyo Tyrant

Tokyo CabinetTokyo Cabinet(简称TC)是MikioHirabayashi开发的一种DBM的开发库,其数据文件只有一个,里面存放多个的数据记录,所有操作都是依据key做主键操作...
  • starxu85
  • starxu85
  • 2009年08月18日 07:15
  • 12478

Tokyo Cabinet 安装和使用 .

http://blog.csdn.net/ganzi_yy/article/details/5370345 一、安装 1、首先编译安装tokyocabinet数据库 编译的时候会提示找不到zli...
  • happylife1527
  • happylife1527
  • 2012年12月22日 22:59
  • 694

tokyo cabinet 管理工具 tcrmgr

tcrmgr : 测试和调试ttserver的程序,很多用法就就见官方文档了,主要有: tcrmgr inform host : 获取服务器的信息 tcrmgr put host key valu...
  • remotesupport
  • remotesupport
  • 2012年05月13日 11:27
  • 1018

Tokyo Cabinet碎片整理

Posted by  新飞  on 2012 年 8 月 2 日 Tweet4 Tokyo Cabinet(下文简称TC)是一个DBM的实现。这...
  • pi9nc
  • pi9nc
  • 2014年09月09日 11:28
  • 692

tokyo cabinet源代码分析(2)

2.4数据记录的查找    在前面的部分对于记录的插入进行了阐述。本节对通过key查找value方法进行了分析。 2.4.1TCMAP数组查找   先映射到MAP数组的一个元素,然后基于该元素对...
  • happylife1527
  • happylife1527
  • 2012年12月20日 21:35
  • 193

NoSQL Solution: Evaluation and Comparison: MongoDB vs Redis, Tokyo Cabinet, and Berkeley DB [CHART]

文章来源: http://perfectmarket.com/blog/not_only_nosql_review_solution_evaluation_guide_chart在原文下面,redis...
  • macyang
  • macyang
  • 2011年03月02日 20:20
  • 1404

tokyo cabinet源代码分析(5)

tokyo cabinet hash memory 数据库记录查找
  • moxuansheng
  • moxuansheng
  • 2010年10月26日 23:27
  • 1079

tokyo cabinet源代码分析(4)

tokyo cabinet记录插入二叉树过程以及结构层次图
  • moxuansheng
  • moxuansheng
  • 2010年10月25日 23:07
  • 1184

tokyo cabinet源代码分析(3)

key,value结构加入过程分析。
  • moxuansheng
  • moxuansheng
  • 2010年10月24日 11:26
  • 1122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tokyo cabinet源代码分析1
举报原因:
原因补充:

(最多只允许输入30个字)