TC官方文档翻译07----内存HASH数据库API(Tokyo Cabinet/Tokyo Tyarnt 文档系列)

本文详细介绍了数据库管理系统的内部结构,包括内存管理、哈希算法应用、API接口及其操作方法。重点阐述了如何使用内存数据库、创建与删除数据库、键值对的插入与查找、值大小的获取、迭代器使用等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 转载请注明出处, 由于个人技术能力有限, 英语水平欠缺,
 * 有翻译不合适或错误的地方, 请纠正,
 * 希望不要因为我的错误误导您, 希望您的智慧可以加入.
 * @translator: selfimpr
 * @mail: lgg860911@yahoo.com.cn
 * @blog: http://blog.youkuaiyun.com/lgg201
 */

 

 

内存 HASH 数据库 API

typedef struct { // 内存 hash 数据库

         void **mmtxs; // 全局锁对象

         void *imtx; // 基于路径的锁对象

         TCMAP **maps; // 内部 TCMAP 对象

         in titer; //maps 的迭代位置

}

 

TCMDB *tcmdbnew();

         创建一个桶大小为 TCMDBDEFBNUM(65536) 的数据库 .

TCMDB *tcmdbnew2(uint32_t bnum);

         创建有指定 bnum 的桶数组的数据库 . 实际上是创建了 TCMDBMNUM( 默认 8) TCMAP 对象 , 每个 map 中的桶大小为 bnum / TCMDBMNUM + 17.

void tcmdbdel(TCMDB *mdb);

         删除指定的内存数据库

void tcmdbput(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);

         通过对 key 进行 hash 得到要存入的 map, 然后调用 map tcmapput 插入

void tcmdbput2(TCMDB *mdb, const char *kstr, const char *vstr);

         tcmdbput 的字符串版本 .

bool tcmdbputkeep(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);

         向数据库中插入一条记录 , 如果已经存在 , 则无操作

bool tcmdbputkeep2(TCMDB *mdb, const char *kstr, const char *vstr);

         tcmdbputkeep 的字符串版本

void tcmdbputcat(TCMDB *mdb, const void *kbuf, int ksiz, const void *vbuf, int vsiz);

         向数据库中插入一条记录 , 如果已经存在 , 则将新的值连接到原始值末尾

void tcmdbputcat2(TCMDB *mdb, const char *kstr, const char *vstr);

         tcmdbputcat 的字符串版本

bool tcmdbout(TCMDB *mdb, const void *kbuf, int ksiz);

         从数据库中删除指定 key 的元素

bool tcmdbout2(TCMDB *mdb, const char *kstr);

         tcmdbout 的字符串版本

void *tcmdbget(TCMDB *mdb, const void *kbuf, int ksiz, int *sp);

         从数据库中检索指定 key 对应的值 , sp 用来记录值的大小 .

char *tcmdbget2(TCMDB *mdb, const char *kstr);

         tcmdbget 的字符串版本

int tcmdbvsiz(TCMDB *mdb, const void *kbuf, int ksiz);

         返回指定 key 对应的值的内存大小

int tcmdbvsiz2(TCMDB *mdb, const char *kstr);

         tcmdbvsiz 的字符串 key 版本

void tcmdbiterinit(TCMDB *mdb);

         迭代器初始化 , 首先通过 tcmapiterinit 初始化每个 map 的迭代器 , 然后重置 mdb iter

void *tcmdbiternext(TCMDB *mdb, int *sp);

         获取下一条记录 , sp 将记录这条记录的值的大小

char *tcmdbiternext2(TCMDB *mdb);

         tcmdbiternext 的字符串版本

TCLIST *tcmdbfwmkeys(TCMDB *mdb, const void *pbuf, int psiz, int max);

        获取当前数据库中所有和指定 key(pbuf pbuf+psiz 的内存内容 ) 相同 ( 也就是说以指定 key 开头 ) 的所有 key, 如果指定 max, 就只获取 max , 该匹配是逐个从 8 map 里去查找

TCLIST *tcmdbfwmkeys2(TCMDB *mdb, const char *pstr, int max);

         tcmdbfwmkeys 的字符串版本

uint64_t tcmdbrnum(TCMDB *mdb);

         返回当前数据库的记录数

uint64_t tcmdbmsiz(TCMDB *mdb);

         返回当前数据库的内存占用

int tcmdbaddint(TCMDB *mdb, const void *kbuf, int ksiz, int num);

         对数据库中指定 key 对应的值加 num 存储 , 并返回增加后的值 .

double tcmdbadddouble(TCMDB *mdb, const void *kbuf, int ksiz, double num);

         tcmdbaddint double 版本 .

void tcmdbvanish(TCMDB *mdb);

         清除当前数据库中的所有记录

void tcmdbcutfront(TCMDB *mdb, int num);

         移除数据库中的前 num 条记录 . 在实际的移除中 , 可能移除的并不是前 num . 而是通过 num / TCMDBMNUM + 1 计算到要从每个 map 中移除多少条记录 , 然后通过 map tcmapcutfront 接口进行移除

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值