woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

BerkeleyDB存储算法差别

HashBtree的区别
当记录号不是用于数据存取的主键时,应该使用 HashBtree算法 (如果记录号是用于数据存取的一个二级关键字,那么还是可以选择Btree算法,因为它支持一个主键和一个记录号同时存取。)

Btree
中的主键是有序存储 ,记录间的关联是依靠次序。并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。Btree支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。因此,当在主键有序时,Btree算法应该被使用 。例如,如果主键是时间戳,那么8点时间戳后面跟随的就是9点时间戳, 这种情况下,Btree算法一般是正确的选择。再来个例子:如果主键是名字,应用需要取出所有同姓的记录,那么Btree 存取方法同样是个好选择。

Hash
Btree 两种方式在小的数据集合上几乎没有性能的差别 。不过,由于Hash使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。所以当一个数据集合足够大且关键字为随机分布时,采用Hash算法比较好

Queue
Recno区别
当用记录号作为数据存取的主键时,应该使用 QueueRecno存取方法 。记录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。两者基本上都是建立在Btree算法之上,提供存储有序数据的接口。Queue的优势在于:由于其记录为定长,在插入操作时把记录插入到队列的尾部,所以速度最快,而且它执行上锁和并发处理的水平也相当高。 Recno 的长处在于它支持一些Queue不能实现的特征,比如可变长记录和支持flat-text文件。

记录号可以是可变的或者不变的: 可变指的是当记录被删除或者插入记录号发生变化;不变指的是记录号无论数据库如何操作,记录号都不会发生改变。 基于记录号存取在Btree方式下也是可行的。但是,记录号是可变,当记录删除或插入时,数据库内的其他记录的记录号都将发生改变。 Queue存取方法总是用固定的方式运行,不管数据库如何操作,记录号始终改变。 Recno 可以被设置为不变和可变两种形式。

另外,Recno为数据库提供支持flat-text文件的永久存储和数据在读或修改时提供一个快速的临时存储空间。

一个表格:

存储方式

描述

选择场景

BTree

关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。

为了代码的简单, Berkeley DB 没有实现对关键字的前缀码压缩。

B+ 树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构

1   Key 为复杂类型时。

2   Key 有序时。

Hash

DB 中实际使用的是扩展线性 HASH 算法( extended linear hashing ),

可以根据 HASH 表的增长进行适当的调整。关键字可以为任意的数据结构。

1   Key 为复杂类型。

2   当数据较大且 key 随机分布时。

Recno

要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。

相当于关系数据库中的自动增长字段。

Recho 建立在 B+ 树算法之上,提供了一个存储有序数据的接口。

记录的长度可以为定长或不定长。

1   key 为逻辑记录号时。

2   当非高并发的情况下。

 

Queue

Recno 方式接近只不过记录的长度为定长。

数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,

相比之下插入速度是最快的。

1    key 为逻辑记录号时。

2   定长记录。

3   高并发的情况下。

 

posted on 2011-08-31 13:02 肥仔 阅读(958) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理