返回介绍

3.1 Tokyo Products

发布于 2024-10-01 22:56:28 字数 3084 浏览 0 评论 0 收藏 0

http://1978th.net/tokyocabinet/tokyoproducts.pdf

概述:

  • Tokyo Cabinet – database library

  • Tokyo Tyrant – database server

  • Tokyo Dystopia – full-text search engine

  • Tokyo Promenade – content management system

  • open source – released under LGPL

  • powerful, portable, practical – written in the standard C, optimized to POSIX

下图为 Tokyo Products

1574510174613

图 10 Tokyo Products

TC 实现

TC: database library. ( libtokyocabinet.so )

支持各种 storage 方式。

  • hash (hdb)
  • B+ tree (bdb)
  • array: fixed-len (adb)
  • table (tdb)

Eg., B+tree db object:

tcbdbopen, tcbdbput2, tcbdbget2, #tcbdbcurnew, tcbdbclose

测试程序:(perl, Ruby…)

http://1978th.net/tokyocabinet/perldoc/#example

Example Code:

// Makefile: gcc tctest.c  -ltokyocabinet
#include <tcutil.h>
#include <tchdb.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>
int main(int argc, char **argv)
{
        TCHDB *hdb;
        int ecode;
        char *key, *value;
        /* create the object */
        hdb = tchdbnew();
        /* open the database */
        if(!tchdbopen(hdb, "casket.hdb", HDBOWRITER | HDBOCREAT)) {
                ecode = tchdbecode(hdb);
                fprintf(stderr, "open error: %s¥n", tchdberrmsg(ecode));
        }
        /* store records */
        if(!tchdbput2(hdb, "foo", "hop") ||
            !tchdbput2(hdb, "bar", "step") ||
            !tchdbput2(hdb, "baz", "jump")) {
                ecode = tchdbecode(hdb);
                fprintf(stderr, "put error: %s¥n", tchdberrmsg(ecode));
        }
        /* retrieve records */
        value = tchdbget2(hdb, "foo");
        if(value) {
                printf("%s¥n", value);
                free(value);
        } else {
                ecode = tchdbecode(hdb);
                //fprintf(printf(stderr, "get error: %s/n", tchdberrmsg(ecode));
                }
                /* traverse records */
                tchdbiterinit(hdb);
        while((key = tchdbiternext2(hdb)) != NULL) {
                value = tchdbget2(hdb, key);
                if(value) {
                        printf("%s:%s¥n", key, value);
                        free(value);
                }
                free(key);
        }
        /* close the database */
        if(!tchdbclose(hdb)) {
                ecode = tchdbecode(hdb);
                fprintf(stderr, "close error: %s¥n", tchdberrmsg(ecode));
        }
        /* delete the object */
        tchdbdel(hdb);
        return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文