本篇开始介绍使用比较器
JE中的数据库内部是使用B树来组织的,这意味着大多数数据库操作(插入,删除,读取,等等)涉及B树节点的比较。这种比较一般情况下是基于记录的键,但是如果你的数据库支持重复数据,那么比较也会涉及到记录的值。
默认情况下,JE使用一个一个字节来进行字典比较(byte-by-byte lexicographic comparison)。这种机制适用于大多数的数据。然而,在某些情况下,你也可以使用自定义的比较器,比如说你要执行一个跟语言相关的记录键的字符串比较(perform a language sensitive lexical ordering of string keys)。
要创建一个自定义的比较器非常简单,你只要实现java中的Comparator接口即可。JE会为 Comparator.compare()方法传递以字节数组存在于数据库中的参数。
下面我们演示一个例子,我们想自定义一个比较器,不使用字节数组而是使用字符串来进行比较:
public class MyDataComparator implements Comparator {
public MyDataComparator() {}
public int compare(Object d1, Object d2) {
byte[] b1 = (byte[])d1;
byte[] b2 = (byte[])d2;
String s1 = new String(b1, "UTF-8");
String s2 = new String(b2, "UTF-8");
return s1.compareTo(s2);
}
}
要使用这个比较器,你可以使用以下的方法。
- DatabaseConfig.setBtreeComparator()
用于比较数据库中记录的键。
- DatabaseConfig.setDuplicateComparator()
用于比较允许重复数据的数据库中的重复记录的值。
你也可以覆盖默认的比较器,通过使用以下的方法。
- DatabaseConfig.setOverrideBtreeComparator()
指定覆盖B书节点的比较器
- DatabaseConfig.setOverrideDuplicateComparator()
指定覆盖重复记录的比较器
这两者之间的不同,我现在还不太清楚o(╯□╰)o有一点需要注意,不管你用什么比较器,返回的顺序都应该是一样的。也就是说新的比较器和旧的比较器对同一个记录进行比较必须返回相同的值。
下面演示使用自定义的比较器
try {
// Get the database configuration object
DatabaseConfig myDbConfig = new DatabaseConfig();
myDbConfig.setAllowCreate(true);
// Set the duplicate comparator class
myDbConfig.setDuplicateComparator(MyDataComparator.class);
// Open the database that you will use to store your data
myDbConfig.setSortedDuplicates(true);
Database myDatabase = myDbEnv.openDatabase(null, "myDb", myDbConfig);
} catch (DatabaseException dbe) {
// Exception handling goes here
}
分享到:
相关推荐
Oracle BerkeleyDB-JE je-6.0.11
本手册是为初学者及有一定经验的开发者设计的,旨在提供一个全面、系统的指南来帮助读者理解 Berkeley DB 的基本概念、数据库管理、记录操作、游标使用以及二级数据库的实现等方面的知识。此外,手册还详细介绍了...
**Berkeley DB JE 7.0.6:深入理解分布式数据存储** Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、嵌入式、基于Java的键值对数据库系统。它以其轻量级、高性能和高可用性而受到广泛的青睐,尤其适合...
在Je-3.1.0版本中,BerkeleyDB使用特定的数据库文件格式,这些文件可以在不同平台上进行迁移,确保了跨平台的兼容性。 **7. 性能优化** BerkeleyDB提供了多种性能调优选项,如缓存大小设置、日志文件管理等,...
**Berkeley DB (BDB)** 是一款开源的、嵌入式数据库系统,由...通过详读并实践“BerkeleyDB-Core-Cxx-GSG.pdf”中的内容,开发者将能够熟练地在C++项目中集成和使用Berkeley DB,从而实现高效、可靠的数据存储和管理。
在C++接口方面,Berkeley DB提供了丰富的类库供开发者使用。例如,`Db`类用于表示数据库对象,`DbEnv`类用于管理数据库环境,而`Dbt`类则用于存储和检索数据库中的数据项。通过这些类,开发者可以方便地进行数据库的...
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本
根据提供的文档信息,“BerkeleyDB-Core-JAVA-GSG.pdf”主要介绍了如何在Java环境中使用Berkeley DB。该文档强调了Berkeley DB作为一种文件类型数据库的优势,包括快速的存取速度和方便的操作特性。 #### 二、...
- 在并发处理方面,Sqlite 使用行级锁定,而 BerkeleyDB 使用多版本并发控制,对于高并发环境,BerkeleyDB 可能表现更好。 总的来说,BerkeleyDB 和 Sqlite 都是优秀的嵌入式数据库解决方案,选择哪一个取决于具体...
**BerkeleyDB** 是一款强大的、高度可定制的嵌入式数据库系统,广泛应用于各种软件开发,尤其是在需要高效存储和检索数据的场景中。这款数据库系统由Oracle公司开发,最初在1990年由Sleepycat Software推出,因其...
(二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht
3. **空间效率**:Berkeley DB通常关注内存和磁盘空间的使用效率,4.8版本可能进一步降低了存储开销,从而在资源有限的环境中更高效。 4. **错误处理和恢复**:为了提高系统的健壮性,4.8版本可能增强了错误检测和...
Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht
《BerkeleyDB Manual C/C++》是一份详尽的官方文档,主要针对使用C和C++语言进行数据库操作的开发者。BerkeleyDB是一款轻量级、高性能的关系型数据库管理系统,常用于嵌入式系统和分布式应用程序。这篇手册将深入...
db-6.1.26.tar.gz berkeley db
Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288
2. **Java API**:一组接口和类,如`Database`、`DatabaseEntry`和`Transaction`,使得开发者可以使用Java代码与BerkeleyDB进行交互。 3. **示例和文档**:可能包含演示如何使用BerkeleyDB Java API的示例代码,以及...
标题“Berkeley DB C++编程入门教程”意味着文档旨在引导读者通过C++语言了解和使用Berkeley DB。这种数据库提供了一个简洁的API,使得开发者可以快速地存储和检索数据,无需复杂的数据库配置或管理。 在描述中提到...
3. **使用BerkeleyDB**:Scrapy-Deltafetch会利用BerkeleyDB的API,将抓取到的URL和数据存储为键值对,便于后续判断新旧和更新内容。 通过以上内容,我们了解了BerkeleyDB的核心特性和安装过程,以及它在Scrapy-...