`
yexingren23
  • 浏览: 31773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BDB数据库合并工具

阅读更多

前一段时间开发了一个BDB数据库合并的工具,本以为通过BDB自带的DbDump和DbLoad就完美解决了,要上线的时候测试一个致命的Bug:合并后BDB数据的顺序不正确。

 

问题虽然已经解决,但过程却很戏剧化。

1、数据顺序的问题,首先想到的排序类 Comparator ,而且原始库也有这个函数直接使用吧;但BDB自带的DbLoad是不支持设置Comparator类的,因此把DbLoad源码Copy出来,略作修改,命名空间都没有变化。

 

BDB应用中有两种情况下需要用到Comparator

(1) setDuplicateComparator,即设置setSortedDuplicates(true)的情况下,需要同时设置一个比较函数;当允许一个key存放多个value时,将使用这个函数比较多个value的大小;

(2) setBtreeComparator,即设置BTree的比较函数;即不同的key采用BTree进行存储时,将使用这个函数比较不同的key;

 

另外,既然DBConfig支持了Duplicate ,别忘了EnvironmentConfig也要支持Duplicate;

 

2、完成以上修改,在本机测试数据合并后,将数据拷贝到测试服务器上后,启动数据服务,数据加载成功,顺序正确。

在我准备为之庆祝时,却发现程序打包发布到测试服务器上后,怎么执行数据的顺序都不正确???

windows上执行OK,linux执行Error,这可是Java应用,怎么会有这种情况?无奈之下,在应用中增加log输出进行诊断,实在没有思路的情况还有log可以帮忙。果然不负众望,增加的log并没有像预期那样输出。这时候才注意到原来java 打包export时有一个warning(平时warning无非是java文件一些警告,基本是不会注意的),打开一看,“文件名冲突,导致DbLoad这个文件并没有打到新的jar包中(文件名和命名空间都是一样的)”,原来如此。

 

3、作为第三方的数据合并工具,需要跟真正的数据服务环境( Environment )保持完全一致(如支持  Duplicate 、支持Transaction),而且BDB的LogEntry的记录方式会将  Comparator也写入jdb文件中,第三方和Comparator采用不同的类(命名空间和类名不同,方法实现完全相同也不行)将会导致ClassNotFound的错误。

 

 

1
0
分享到:
评论
3 楼 yexingren23 2011-12-29  
A collection of databases comprises a database environment.
2 楼 yexingren23 2011-12-29  
A database is collection of key/data pairs sharing sort and comparison.
1 楼 yexingren23 2011-12-29  
By default,JE sorts keys lexicographically, however, an application can optionally support their own sort and comparison functions. Data objects are similarly opaque
structures from the point of view of the storage system. Applications may treat
key/data pairs as objects, using a compact form of Java serialization, or as tuples of primitive values bound to objects. Applications may also create their own objectdata bindings or work directly with byte arrays.

相关推荐

    MySQL数据库详细介绍

    1. **命令行工具**:MySQL自带的命令行工具(mysql、mysqladmin)是最基础也是最常用的工具之一,适合进行简单的数据库管理操作。 2. **图形界面工具**:如MySQL Administrator、MySQL Query Browser、phpMyAdmin...

    svn--项目管理工具[总结版]

    - **BDB (BerkeleyDB)**:基于数据库的方式,适用于需要高性能访问的应用场景。 - **FSFS**:文件系统方式,是SVN推荐使用的存储方式,具有更高的稳定性和安全性。 ##### 3. 创建仓库 创建仓库是SVN使用的基础步骤...

    编程工具笔记

    其中,FSFS是一种不需要数据库支持的存储系统,相对于BDB更加稳定和安全。 4. **与CVS的对比**: - **存储格式**:CVS基于RCS文件,而SVN基于关系数据库或二进制文件,SVN的数据存储更加透明和安全。 - **速度**:...

    subversion1.8.8

    - **Berkeley DB (BDB)**:Subversion 1.8.x 系列可能继续支持 BDB 数据存储后端,但官方建议逐渐过渡到其他更稳定的后端,如 Apache's FSFS。 - **MySQL 和 PostgreSQL**:对于大型项目,Subversion 支持使用 ...

    SVN.zip代码管理工具

    仓库可以是本地的,也可以是网络上的,支持多种数据库后端如FSFS或BDB。 2. **工作副本(Working Copy)**:开发人员在本地电脑上下载的仓库的一个副本称为工作副本,是开发者实际编辑代码的地方。 3. **提交...

    subversion-1.14.2.tar.gz

    对于大型项目,它还支持多种数据库后端(如FSFS或BDB),以满足不同的性能和稳定性需求。通过持续的版本控制,Subversion使得开发人员能够更好地追踪和管理代码的演化,提高软件开发的效率和质量。

    tortoisesvn

    使用TortoiseSVN,用户可以执行常见的版本控制操作,如检出(Checkout)、提交(Commit)、更新(Update)、合并(Merge)和解决冲突(Resolve)。此外,TortoiseSVN还提供了一些额外的实用工具,例如 diff 工具,用于比较文件...

    SVN服务器搭建简易教程

    例如, 使用 TortoiseSVN 客户端工具, 开发者可以通过图形界面轻松地管理代码版本、提交更改、合并分支等操作, 极大地提高了开发效率和团队协作能力。 以上教程提供了详细的步骤来指导用户完成 SVN 服务器的搭建, ...

    [资料][软件开发][版本控制][CVS][Version Control with Subversion].pdf

    - 数据库存储方式:使用BDB或FSFS作为后端存储机制。 - 文件系统层:提供统一的接口来访问存储在后端数据库中的数据。 #### 三、Subversion的安装与组件 - **安装过程**:根据不同的操作系统有不同的安装方法,...

    一千行 MySQL 学习笔记.pdf

    - **BDB**:Berkeley DB存储引擎。 - **Merge**:合并多个MyISAM表。 - **Example**:示例存储引擎。 - **CSV**:将数据存储为逗号分隔的文本文件。 - **MaxDB**:用于与SAP系统集成。 - **Archive**:仅支持...

    mysql5.1手册非常不错

    11. **性能监视**:MySQL 5.1引入了Performance Schema,提供了一个详细的数据库性能监控工具,可以帮助分析和优化系统性能。 综上所述,MySQL 5.1不仅在核心功能上进行了优化,还提供了许多新的特性和增强,使其...

    My SQL知识大全

    MySQL提供了多种工具来帮助用户管理和操作数据库,其中包括命令行工具(如mysql、mysqladmin)以及图形界面工具(如MySQL Administrator、MySQL Query Browser)。 - **phpMyAdmin**:使用PHP编写的MySQL管理工具,...

    MySQL性能优化实践.docx

    监控和分析MySQL性能,使用慢查询日志、EXPLAIN命令和性能_schema等工具,可以帮助发现并解决性能瓶颈。 总的来说,MySQL性能优化是一个系统工程,涉及需求分析、架构设计、数据库管理、SQL优化等多个层面,需要...

    版本控制 Tortoise SVN

    svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 集中式代码管理的核心是服务器,所有...

    MySQL 教程.docx

    - 提供一系列用于管理、检查、优化数据库操作的工具,简化日常维护工作。 - **支持大型数据库**: - 能够处理拥有上千万条记录的大型数据库,适用于大数据应用场景。 - **存储引擎多样化**: - 支持多种存储...

    MySQL课程之MySQL存储引擎入门

    - **数据备份**:MyISAM表的备份相对简单,可以通过`mysqldump`工具或者直接复制`.frm`(表结构文件)、`.MYD`(数据文件)和`.MYI`(索引文件)来实现。 - **常见故障与解决办法**:MyISAM容易遇到的问题包括磁盘...

    SVN安装配置摘要

    仓库可以本地或远程托管,支持多种数据库后端,如FSFS或BDB。 2. **工作拷贝(Working Copy)**:用户在本地的工作环境,与仓库中的文件保持同步。 3. **提交(Commit)**:将本地工作拷贝的改动保存到仓库的操作。 4...

Global site tag (gtag.js) - Google Analytics