tokyocabinet官方介绍

HASH 数据库

TC 通过 hash 算法获取记录 , 如果桶数组有足够多的元素 , 时间复杂度就是 O(1), 也就是说 , 抓取一条记录需要的时间是一个常量 , 而与数据库的规模无关 , 这对于存储和删除是等效的 .hash 值的冲突通过二叉搜索树解决 , 也就是说即便桶只有极少的元素 , 也可以保证搜索的时间复杂度在 O(logn) 附近

TC 在通过加载整个桶数组到内存来改善检索 . 如果桶数组在内存中 , 它可能对于目标区域的访问只需要一次文件操作的路径访问 , 一个保存在文件中的桶数组并不是调用 ’read’ 而是通过 mmap( 内存文件映射 ) 来调用的 , 因此 , 数据库连接的准备时间很短 , 并且两个或多个进程可以共享相同的内存映射 .

如果桶数组的元素个数大概是数据库总记录数的一半 , although it depends on characteristic of the input, hash 值的冲突概率约为 56.7%( 桶数组大小和数据库记录数相同时为 36.8%, 桶数组大小为数据库记录数两倍时为 21.3%, 4 倍时为 11.5%, 8 倍时为 6.0%), 在这种情况下 , 对于一次检索而言 , 最多会有两次文件操作 . 如果把这个看作一个性能指标 , 为了处理百万记录的数据库 , 桶数组需要大概 50 万元素 , 每个元素的大小是 4byte( 应该存储的是地址 ), 也就是说只要有 2M 的可用内存 , 就可以处理 100 万条记录的数据存取 .

传统的 DBM 提供两种模式的存储操作 : ‘insert’’replace’, 在将要插入的 key 已经存在于数据库中时 , ‘insert’ 模式会保留原值不变 , ‘replace’ 模式则将该 key 对应的值替换为指定的新值 . 除了这两种模式 , TC 提供了 ’concatenate’ 模式 , 这种模式下 , 指定的值会连接到已经存在的值的末尾并存储 , 这个特性在处理向数组中增加元素时非常有用 .

TC 对碎片的处理有两种方式 , 一种是调用静态的优化 , 把记录部署到另外一个文件 , 通过一次写入清除碎片 , 另外一种被称为动态优化是收集无用区域信息并用记录去替换 ( 应该是将已经无用的区域进行记录 , 在新插入大小合适的记录时 , 进行重用 )

B+ 树数据库

尽管 B+ 树数据库比 hash 数据库要慢 , 它的特性是顺序访问每条记录 . 次序可以由用户来指定 , B+ 树中的记录是已排序的并且按照逻辑页进行分布 . 通过独立的索引维护每一页使其成为多路平衡树 . 因此检索的时间复杂度是 O(log n), 游标提供对记录的顺序访问 . 游标可以通过指定 key 向前或向后跳跃到指定位置 . 由于每页被安排成双向链表 , 因此时间复杂度为 O(1).

B+ 树数据库是基于上面的 hash 数据库实现的 . 由于 B+ 树每页的存储相当于 hash 数据库中的记录 , B+ 树数据库就继承了 hash 数据库的存储管理效率 . 由于每条记录的头都比较小并且对其方式由每页大小决定 , 所以在大多数情况下 , 数据库文件大小是一个 hash 数据库的一般 . 尽管多个页面的操作需要更新 B+, TC 通过缓存页面和缩减文件操作来加速进行处理 . 在多数情况下由于所有的独立索引都缓存在内存中 , 因此 , 检索一条记录可能需要一次或更少的文件操作 .

B+ 树的每一页都是压缩存储的 . 两种压缩方法 : Deflate of ZLIBBlock Sorting of BZIP2 都支持 . 由于一页中的每条记录都有相似的规则 , Lempel-ZivBWT 算法可以提供很好的压缩效率 . 在处理文本数据时 , 数据库的大小缩减 25% 左右 . 如果数据库太大或硬盘 I/O 造成瓶颈 , 压缩特性会最大限度的提升速度 .

定长数据库

定长数据库限制每个 key 必须是自然数并且值的长度是有限的 , 然而 , 正式由于这种这种约束定长数据库在时间和空间上的效能比其他数据结构都高 .

由于整个数据库的区域都被通过 mmap( 内存映射文件 ) 映射在内存作为一个多维数组提交 , 它与文件 I/O 性能关联非常小 . 由于这种简单的结构 , 定长数据库工作要快于 hash 数据库并且它在多线程并发的场合表现非常好 .

数据库的大小与 key 的范围和值的大小限制相关 . 也就是说越小的 key 范围或越小的值长度带来的就是越小的空间占用 . 比如最大 key1000000 值限制大小为 100bytes, 数据库大小就大约为 100MB, 由于记录仅仅被加载到内存 , 因此可以把数据库大小增大到虚拟内存大小 .

Table 数据库

table 数据库并不是直白的简单 key/value 结构 , 而是一个类似关系型数据库的表的结构 . 每条记录通过主键唯一标识并且由多个由字符串命名的列组成值 . 比如 , 一个 雇员号 唯一确定一个雇员 , ”name”, “division”, “salary” 等则用来说明该雇员的其他属性 . 与关系数据库的表不同的是 , table 数据库不需要定义任何的 data schema 并且可以包含与其他记录不同的结构 .

table 数据库支持 query 进行查询 , 不仅仅是主键 , 而是可以通过任意的列作为条件 . 查询条件由列名和条件表达式组成 . 对字符串类型的列还提供了全文匹配 , 向前匹配 , 正则匹配等支持 , 标签搜索和全文检索也被支持 . 在查询中多个条件之间的逻辑交集和并集都是可用的 . 通过指定升序或降序还可以对查询结果集 ( 字符串类型或数值类型 ) 进行排序 .

你可以在任意列创建索引用于提高搜索和排序的性能 , 尽管列没有数据类型 , 索引却是有类型的 ( 只能为 stringnumber 建立 ). 倒排索引的空间间隔标记和字符 N-gram 标记也被支持 . 查询优化器会在合适的时候透过每个查询使用索引 , 索引的实现不同于 B+ 树数据库的文件

实用功能

数据库在文件系统上的事务机制 . 一次性提交在 beginningend 之间的一系列操作 , 或者中断事务并回退到事务开始之前的状态 . 支持两种级别的事务隔离级别 : 序列化和未提交读 .

TC 提供两种方式的数据库连接 : “reader””writer”. 作为一个 reader 能够执行检索但不能存储或删除 . 作为一个 writer 则可以执行所有的访问操作 . 通过在连接的时候进行文件锁来处理并发访问 , 当一个 writer 连接到数据库后 , 无论 readerwriter 都不允许连接 , reader 连接到数据库时 , 只有 reader 可以连接 . 通过这种方式可以保证在多任务并发时的数据一致性 .

TCapi 提供的函数在多线程环境中都是可用的 . 对无关联的数据库对象可以并行操作 , 对于同一个数据库对象的操作 , read-write 锁被用于隔离控制 . 也就是说 , 当一个写线程在操作数据库的时候 , 其他的读线程和写线程都是被锁定的 , 然而 , 当一个读线程在操作数据库的时候 , 读线程是处于非锁定状态的 , hash 数据库和定长数据库的锁粒度是记录级的 , 其他所有的数据库的锁粒度都是整个文件的锁 .

简单但是可扩充的接口

TC 提供了一套简单的基于 OO 设计的 api, 每种数据库操作都被封装 , 公开成为一些简明的方法 , 比如 : 连接 (open), 关闭连接 (disconnect), 插入数据 (put), 删除数据 (out), 检索 (get) 等等 . 由于 B+ 树数据库 , 定长数据库 , hash 数据库三种数据库的 api 是非常相似的 , 所以在他们之间进行转换非常容易 . 此外 , 抽象 API 提供了这些数据库的相同处理接口 , 基于抽象 API 的应用可以在运行时决定数据库类型 .

同样提供了工具 API, 比如基本的数据结构 list, map 等都被包含 , 另外还有一些有用的特性 : 内存池 , 字符串处理 , 编码也被包含 .

总共提供了 6C 语言 API, 4 种数据库对应的外 , 还有工具 api 和抽象 api. 命令行接口也作为 API 分别提供 , 这些接口对原型构建 , 测试 , 调试很有用 . 除了 C, TC 还提供了 Perl, Ruby, Java, Luaapi, 也希望未来有更多的第三方提供其他语言 API.

在多进程同时访问数据库或远程访问时 , remote service 非常有用 , remote service 由一个数据库服务和它的访问库组成 . 应用程序可以通过远程数据库 api 访问数据库 , 该服务实现了 HTTP 和部分 memcached 协议 , 因此这类协议的产品可以很容易实现切换 .

线性代数知识点整理 线性代数基础知识点摘要整理 阅读详情

相关推荐

第一篇:APS智能排产理论核心与求解器选型指南

本文系统解析了APS(高级计划与排程)系统的核心功能与技术实现。APS作为融合生产计划与排程的智能决策系统,通过运筹优化算法实现全局最优,平衡交付与效率。重点探讨了混合整数线性规划(MILP)在APS中的应用,包括设备分配、生产批量和人员班次优化等场景,并分析了其局限性与其他算法(如启发式算法)的互补性。文章还提供了APS实施策略建议和优化建模技巧,强调从简单模型开始迭代验证的重要性。最后介绍了甘特图在APS中的多维可视化作用,包括计划调整和决策支持功能。全文为理解APS系统原理及实践应用提供了全面指导。

算法工程师 514

TC官方文档翻译01----TokyoCabinet简介(Tokyo Cabinet/Tokyo Tyarnt 文档系列)

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

goosman-lei 4550

Sim-EKB-Install-2023-11-24-Run-as-Admin

西门子博图授权软件

小日本的内存数据库TTServer(tokyoCabinet,tokyoTyrant) 分析

内存数据库,顾名思义,就是所有的数据都放到内存里面, 加快查询速度。 内存数据库有哪些 : 1. Mysql 有内存表的概念,创建表时, ENGINE=MEMORY  就会创建一个内存数据表。 2. SQLite3 也支持内存数据库模式。 3. TTServer  日本人开发的 Key -Value模式的内存数据库 4. Redis    也是一个Key - Value 模式的内

Langeldep的专栏 9167

Tokyo Cabinet 安装和使用

一、安装1、首先编译安装tokyocabinet数据库编译的时候会提示找不到zlib.h和bzlib.h,那么先安装zlib-devel和bzip2-devel这两个包分别有这两个头文件rpm -ivh zlib-devel-1.2.3-3.i386.rpmrpm -ivh bzip2-devel-1.0.3-4.el5_2.i386.rpmwget http://1978th.net/tokyo

ganzi_yy的专栏 1962

Tokyo Cabinet 的四种数据结构

Tokyo Cabinet提供了Hash、Fixed-length、Table和B+ Tree四种数据结构,不同的结构特性和应用场景都不一样。TC本身提供了专门测试和调试工具tc (h/f/t/b) mgr。Tokyo Tyrant在启动的时候,通过数据库文件名后缀来表示使用哪种数据结构。以下是结构和后缀对应表:Hash Database :.tchB+ tree da

静心斋 2838

Tokyocabinet数据库

Tokyo Cabinet是日本人平林幹雄开发的一款DBM数据库,该数据库读写非常快。但是单单的TC数据库,用处不大,宿主程序需要进行很多开发。TC的作者开发了Tokyo Tyrant(TT)这个网络服务程序,除了自己的二进制协议,还提供了现在被广泛应用的HTTP协议,memcached协议来访问TC数据库,这样一来,一下子就扩展了TC的使用范围,让TC从一个单纯的开发库变成了易用,高效的数据库系...

胖头鱼 383

Key-value系统介绍

 Key-value系统    a. Tokyo Cabinet,Tokyo Tyrant - 日本人 Mikio Hirabayashi开发的官网地址:http://1978th.net/ (作者的出生年)TC:数据库开发库TT:数据库另外还有:Tokyo Dystopia:全文搜索系统Tokyo Promenade:内容管理系统 TC

lzz313的学习轨迹 1042

Tokyo Cabinet与Tokyo Tyrant 开篇

注册CSDN这么多年,现在终于下定决心开博写文章了,希望在以后能够坚持下来。目前我比较喜欢高性能服务器的设计,据说TC的性能很不错,就先分析Tokyo Cabinet与Tokyo Tyrant吧,我想分析得全面一些,毕竟这是我开始分析的第一个开源软件。         Toky

captainhan的专栏 637

在Ubuntu下安装tokyocabinet数据库

1. tokyo cabinet 数据库简介Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念。 当做为Hash表数据库使用

hit_kongquan的专栏 1451

【转】Tokyocabinet/Tokyotyrant文档大合集

本来打算自己整理下Tc的,呵呵,结果发现了下面这个不错的文档。Don't Repeat Yourself这条法则还是很重要的,故转载之。 原文连接:http://www.162cm.com/p/tokyotyrant.html#toc4 Tokyocabinet/Tokyotyrant文档大合集 [原文:整理于网络 整理:一米六二<xurenl...

weixin_34413065的博客 479

TokyoCabinet和TokyoTyrant

TokyoCabinet应用服务器配置管理数据结构多线程 . 转载于:http://hi.baidu.com/ah%5F%5Ffu/blog/item/1f59571157625277cb80c44c.html 由于自己的单词水平退化到初中时代,因此先在单词上扫盲: · Tokyo,是东京,就是日本首都东京....(光这行就能雷走很多读者) ·Cabinet, 储物柜 ·Tyr...

胖头鱼 200

tokyocabinet安装

安装tokyocabinet./configure会出现如下错误:     configure: error: bzlib.h is required . bzlib.h找不到的错误,在fedora下是bzip2-devel没有安装,用yum 安装就好了 ...

langwangff 248

编译tokyocabinet时遇到的问题与解决

[b]开场白[/b]: tokyocabinet是一日本人开发的一个高速key-value持久的缓存数据库,比bekerlyDB速度还要快。 我是打算用它来作为公司搜索缓存的.可以从http://tokyocabinet.sourceforge.net/javapkg/下载这java的版本,前提条件首先要安装jdk了,然后我下载了tokyocabinet-java-1.20.tar.g...

起跑人生,追逐梦想,超越现实 226

分布式key-value存储方案介绍:Cassandra,LightCloud,TokyoCabinet

Cassandra是一个非常可靠的大规模分布式存储系统。高度可伸缩的、一致的、分布式的结构化key-value存储方案,Facebook目前在使用此系统。 开发语言: Java 授权协议: Apache License 2.0 项目主页: http://incubator.apache.org/cassandra/ 文档地址: http://wiki.apache.org/...

胖头鱼 293

数据压缩在tokyo cabinet中的应用解析

一个int类型整数在计算机内由4个字节存储,表示的范围是0~2^32,而实际上,如果一个系统中,用到的整数的范围都比较小,高位补0的那些字节是否有些浪费了?比如int型整数128,它在计算机内的存储为0000 0000 0000 0000 0000 0000 1000 0000,有三个字节是补的0。怎么样来对这样的数据进行压缩存储了? 压缩之后,又怎么来进行读取了?  来看下tokyo ca

wuyunshu9的专栏 704

Tokyo Cabinet 安装测试

[ 2008-8-7 08:53 | by 张宴 ]   [文章作者:张宴 本文版本:v1.3 最后修改:2009.07.06 转载请注明原文链接:http://blog.s135.com/read.php/362/] [size=medium][color=red]红色为hbing110补充[/color][/size]   Tokyo Cabinet 是日本人 平林幹雄 开发的一款...

我也闪 185

性能强劲的Tokyo Cabinet 和 Tokyo Tyrant

Tokyo CabinetTokyo Cabinet(简称TC)是MikioHirabayashi开发的一种DBM的开发库,其数据文件只有一个,里面存放多个的数据记录,所有操作都是依据key做主键操作。key,value都可以是连续不定长,即可以是二进制,也可是是字符串。数据文件中的记录组织有三种模式,hash表,B+树,定长数组。做为hash表,主键key必须是唯

半道出家的和尚 1万+

tokyo cabinet 、tokyo tyrant以及php的 tokyo tyrant扩展安装、配置(Ubuntu)

Tokyo Cabinet是一款DBM数据库,与Berkeley DB是同类产品,但性能要好。Tokyo Tyrant是由同一作者开发的 Tokyo Cabinet数据库网络接口,Tokyo Tyrant是Tokyo Cabinet的数据库网络接口, 它加上Tokyo Cabin

667

tokyocabinet与tokyotyrant的安装

大致的安装步骤大家都可以在网上搜到,一搜一大把,我这里仅仅是把可能出现的一个问题给总结一下。 安装tokyocabinet的时候,解压完./configure的时候,提示错误缺少zlib.h文件,这个时候就需要下载zlib和bzip2压缩包,先安装着两个软件包,然后重新回到tokyocabinet目录下,./configure发现好使了,出现了ready install的字样,然后make,接着...

mizoushenjing 340

tokyocabinet与lucene在搜索上的应用

[b]开场白:[/b]一个多月没有写博客了,今天就写点这一个月工作情况吧.新的公司搜索框架最后却不能成功上线运行这点令我很遗憾,结果还是使用旧有的. [b]背景:[/b] 现在公司一直使用的搜索框架由于内存的使用上及搜索速度和索引的切换方面有比较大的缺憾,首先这里简单说一下以前的搜索框架吧,采取双索引机制,一搜索,一存储。缺点显然而见 1 内存使用方面,明显多加载多一份索引,有...

起跑人生,追逐梦想,超越现实 159
上一篇: linux查看端口
下一篇: grep颜色问题
NickACM
博客等级 码龄19年 3粉丝 130原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值