Hash与Btree的区别
当记录号不是用于数据存取的主键时,应该使用 Hash和Btree算法
。 (如果记录号是用于数据存取的一个二级关键字,那么还是可以选择Btree算法,因为它支持一个主键和一个记录号同时存取。)
Btree中的主键是有序存储
,记录间的关联是依靠次序。并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。Btree支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。 因此,当在主键有序时,Btree算法应该被使用
。例如,如果主键是时间戳, 那么8点时间戳后面跟随的就是9点时间戳, 这种情况下,Btree算法一般是正确的选择。再来个例子:如果主键是名字,应用需要取出所有同姓的记录,那么Btree 存取方法同样是个好选择。
Hash 和 Btree 两种方式在小的数据集合上几乎没有性能的差别
。不过,由于Hash使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。所以当一个数据集合足够大且关键字为随机分布时,采用Hash算法比较好
。
Queue和Recno区别
当用记录号作为数据存取的主键时,应该使用 Queue和Recno存取方法
。记录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为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
、
高并发的情况下。
|
分享到:
相关推荐
通过改进内部算法和数据结构,Berkeley DB可以更快地处理大量数据。 3. **空间效率**:Berkeley DB通常关注内存和磁盘空间的使用效率,4.8版本可能进一步降低了存储开销,从而在资源有限的环境中更高效。 4. **...
BerkeleyDB 多库联合操作 (Secondary Databases) - **3.1 二级数据库介绍** - **概念解释**:二级数据库是对主数据库的一个索引,用于提高查询效率。 - **应用场景**:快速查找、数据统计等。 - **3.2 创建二级...
- **20.3 BerkeleyDB存储功能概述** - **存储引擎**:概述Berkeley DB提供的不同存储引擎及其特点。 - **20.4 BerkeleyDB的四种算法异同** - **算法比较**:对比Berkeley DB中几种主要存储算法的优缺点。 - **20.5...
#### 二、BerkeleyDB与传统数据库的区别 BerkeleyDB虽然不是关系型数据库,但它在某些方面比传统的RDBMS具有优势: - **非关系型设计**:不依赖复杂的表格结构,更适用于非结构化或半结构化数据。 - **非对象导向**...
Berkeley DB 不是一个传统的关系型或对象型数据库,因此不支持SQL语言和高级数据库功能,如存储过程和触发器。它更适合于管理数据类型较少、数据管理需求不复杂、但需要高效数据操作的场景。 **DB的核心数据结构与...
Berkeley DB 是一个高性能的键值存储数据库系统,被广泛应用于多种操作系统之上,支持事务处理、并发控制等多种高级特性。本章节重点介绍事务处理的基础概念与实践方法。 ##### 事务的好处 在 Berkeley DB 中启用...
BerkeleyDB的高效存储和快速查询能力确保了dsniff在处理大量数据时仍能保持良好的性能。 具体到版本6.2.38,可能包含以下更新和改进: 1. **性能优化**:新版本可能对内部算法进行了优化,提高了数据读写速度和...
- **20.4 Berkeley DB 的四种算法异同** - **比较**:对比分析 B+Tree、哈希表、队列和记录号等四种数据结构的优缺点。 - **20.5 Berkeley DB 使用 C++ 实例** - **实例演示**:通过具体的 C++ 代码示例来展示 ...
伯克利DB(Berkeley DB)是一款开源的、嵌入式数据库系统,由Sleepycat Software开发,并在2006年被Oracle公司收购。它主要用于实现轻量级数据存储和管理,尤其适用于那些需要高性能、高可靠性的应用程序。伯克利DB...
STL接口是BerkeleyDB为C++开发者提供的一个便利工具,它允许开发者使用标准模板库中的容器和算法来操作数据库。STL接口使得BerkeleyDB的数据操作与C++的标准编程风格更加契合,提高了代码的可读性和可维护性。 **...
Berkeley DB Java Edition(简称BDB JE)是Oracle公司提供的一款高性能、轻量级的嵌入式数据库系统,专门针对Java应用程序设计。它允许开发者在应用程序中直接存储和管理数据,而无需设置独立的数据库服务器。这个...
Berkeley DB广泛用于需要快速、可靠和本地数据存储的应用程序。它支持多种数据访问模式,包括键值对存储,适合于小到中型的数据库应用。这个版本可能包含了一些特定的特性、安全更新或性能优化。研究Berkeley DB的...
尽管MySQL通常被认为是关系型数据库管理系统(RDBMS),但它也支持使用BerkeleyDB存储引擎。这种集成使得MySQL能够利用BerkeleyDB的一些特性,如高效的数据存储和高并发事务处理能力。 #### BerkeleyDB的客户 ...
在FastDFS和FastDHT中,Berkeley DB可能被用来存储元数据,如文件ID、文件大小、创建时间等,因为其轻量级、高性能且易于集成的特性。 当涉及到文件去重时,FastDFS和FastDHT可以协同工作。FastDFS在上传文件时,会...
Berkeley DB是一种支持Key-Value数据模型的嵌入式数据库存储引擎。它不支持传统的Client/Server架构,而是通过进程内API直接访问数据库。这种设计使得Berkeley DB具有极高的性能和低延迟特性。Berkeley DB的数据结构...
- "db-4.3.29"指的是Berkeley DB数据库引擎的版本,OpenLDAP通常使用Berkeley DB作为其默认后端存储系统,用于存储目录数据。 - "openssl-0.9.8a"是指OpenSSL库的版本,OpenSSL是一个用于安全套接层(SSL/TLS)...
爬取文件用Berkeley DB存储 提高性能: 常用操作系统不善于处理大量小文件 基于URL Ranking的优先级队列 主题爬虫: 机器学习算法对链接与主题相关度进行评估,并按照得出的优先级顺序进行爬取 爬虫礼仪 遵循爬虫...
爬虫相关知识代码 读书笔记《自己动手写网络爬虫》,自己敲的代码。...BDBFrontier 使用Berkeley DB 来做爬虫的前端url爬取列表存储 Crawler 爬虫一只,采用了宽度优先的方式爬取网络,并且使用httpclien4.3来