我们知道BDB是一种嵌入式的数据库,存取效率比mysql高,但是管理起来没有mysql方便,在分布式应用中同步也是一个问题。
恰好mysql是支持用BDB作为存储引擎的(5.1之后就不直接支持了,因为BDB被oracle收购了),那么能不能让mysql来进行数据管理和同步,而实际应用则绕过mysql直接访问BDB文件呢?
尝试了一下:
首先取得mysql 5.0源代码,按如下参数配置
编译之后启动mysql,建表时加上engine=bdb
此时在mysql的数据目录中可以看见*.db文件了。
用file命令查看,发现文件格式是Berkeley DB (Btree, version 9, native byte-order)
如果用db_dump命令查看,可以发现它与普通的db文件有两处不同:
1. 一般的db文件一个文件中只有一个库,而mysql则生成了两个库,main和status库(如果建表时加了主键之外的索引,则还会生成额外的索引库)
2. mysql生成的db文件,是以表的主索引作为key,用表的整行数据作为value,尤其对于char和varchar的列类型,mysql存储时会在字符串前面加上字符长度。例如"abc"被存储为"/x03abc"
对于第一点,可以在dbopen的时候指定一下库名,对于mysql生成的db文件,库名指定为"main"就可以了。
对于第二点,