前一段时间开发了一个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. **命令行工具**:MySQL自带的命令行工具(mysql、mysqladmin)是最基础也是最常用的工具之一,适合进行简单的数据库管理操作。 2. **图形界面工具**:如MySQL Administrator、MySQL Query Browser、phpMyAdmin...
- **BDB (BerkeleyDB)**:基于数据库的方式,适用于需要高性能访问的应用场景。 - **FSFS**:文件系统方式,是SVN推荐使用的存储方式,具有更高的稳定性和安全性。 ##### 3. 创建仓库 创建仓库是SVN使用的基础步骤...
其中,FSFS是一种不需要数据库支持的存储系统,相对于BDB更加稳定和安全。 4. **与CVS的对比**: - **存储格式**:CVS基于RCS文件,而SVN基于关系数据库或二进制文件,SVN的数据存储更加透明和安全。 - **速度**:...
- **Berkeley DB (BDB)**:Subversion 1.8.x 系列可能继续支持 BDB 数据存储后端,但官方建议逐渐过渡到其他更稳定的后端,如 Apache's FSFS。 - **MySQL 和 PostgreSQL**:对于大型项目,Subversion 支持使用 ...
仓库可以是本地的,也可以是网络上的,支持多种数据库后端如FSFS或BDB。 2. **工作副本(Working Copy)**:开发人员在本地电脑上下载的仓库的一个副本称为工作副本,是开发者实际编辑代码的地方。 3. **提交...
对于大型项目,它还支持多种数据库后端(如FSFS或BDB),以满足不同的性能和稳定性需求。通过持续的版本控制,Subversion使得开发人员能够更好地追踪和管理代码的演化,提高软件开发的效率和质量。
使用TortoiseSVN,用户可以执行常见的版本控制操作,如检出(Checkout)、提交(Commit)、更新(Update)、合并(Merge)和解决冲突(Resolve)。此外,TortoiseSVN还提供了一些额外的实用工具,例如 diff 工具,用于比较文件...
例如, 使用 TortoiseSVN 客户端工具, 开发者可以通过图形界面轻松地管理代码版本、提交更改、合并分支等操作, 极大地提高了开发效率和团队协作能力。 以上教程提供了详细的步骤来指导用户完成 SVN 服务器的搭建, ...
- 数据库存储方式:使用BDB或FSFS作为后端存储机制。 - 文件系统层:提供统一的接口来访问存储在后端数据库中的数据。 #### 三、Subversion的安装与组件 - **安装过程**:根据不同的操作系统有不同的安装方法,...
- **BDB**:Berkeley DB存储引擎。 - **Merge**:合并多个MyISAM表。 - **Example**:示例存储引擎。 - **CSV**:将数据存储为逗号分隔的文本文件。 - **MaxDB**:用于与SAP系统集成。 - **Archive**:仅支持...
11. **性能监视**:MySQL 5.1引入了Performance Schema,提供了一个详细的数据库性能监控工具,可以帮助分析和优化系统性能。 综上所述,MySQL 5.1不仅在核心功能上进行了优化,还提供了许多新的特性和增强,使其...
MySQL提供了多种工具来帮助用户管理和操作数据库,其中包括命令行工具(如mysql、mysqladmin)以及图形界面工具(如MySQL Administrator、MySQL Query Browser)。 - **phpMyAdmin**:使用PHP编写的MySQL管理工具,...
Merge引擎用于合并多个MyISAM表;Archive引擎适合存储历史数据;Federated引擎实现跨服务器的数据集成;Cluster/NDB提供高可用性和高性能的集群解决方案;其他如CSV、Blackhole和Example引擎则满足特殊场景需求。要...
监控和分析MySQL性能,使用慢查询日志、EXPLAIN命令和性能_schema等工具,可以帮助发现并解决性能瓶颈。 总的来说,MySQL性能优化是一个系统工程,涉及需求分析、架构设计、数据库管理、SQL优化等多个层面,需要...
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 集中式代码管理的核心是服务器,所有...
- 提供一系列用于管理、检查、优化数据库操作的工具,简化日常维护工作。 - **支持大型数据库**: - 能够处理拥有上千万条记录的大型数据库,适用于大数据应用场景。 - **存储引擎多样化**: - 支持多种存储...
- **数据备份**:MyISAM表的备份相对简单,可以通过`mysqldump`工具或者直接复制`.frm`(表结构文件)、`.MYD`(数据文件)和`.MYI`(索引文件)来实现。 - **常见故障与解决办法**:MyISAM容易遇到的问题包括磁盘...
仓库可以本地或远程托管,支持多种数据库后端,如FSFS或BDB。 2. **工作拷贝(Working Copy)**:用户在本地的工作环境,与仓库中的文件保持同步。 3. **提交(Commit)**:将本地工作拷贝的改动保存到仓库的操作。 4...