什么是伯克利 DB 幻数?

Posted

技术标签:

【中文标题】什么是伯克利 DB 幻数?【英文标题】:What is the Berkeley DB Magic Number? 【发布时间】:2015-08-17 06:33:35 【问题描述】:

具有原生字节顺序的 Berkeley DB v9 Btree 的幻数是多少?幻数是否有特定的长度或识别它们的简单方法?

【问题讨论】:

是什么让你认为是一个“神奇的数字”?您是否知道数据文件的二进制格式足以知道有这样一个数字,但不知道实际数字?如果您非常了解二进制文件,那么您应该知道数字在哪里,因此可以自己找到它。而且不能直接下载源代码看看吗?它双重许可的,其中一个许可是开源许可,或者您不想创建一个 Oracle 帐户?看看旧的 Oracle 之前的版本怎么样? 我知道它有一个,因为 *nix file 命令。这就是它识别文件的方式,就想要它的原因而言,我需要它在文件系统严重混乱的磁盘上进行文件雕刻。 Linux file 命令的源代码中似乎有一个条目,用于 Berkeley DB Btree 幻数。从 Ubuntu/Debian apt-get source file 获取 file 源代码,然后查看 ./file-5.14/magic/Magdir/database。我不太关心将此文本输入文件的格式解码为file,但也许你会这样做。 @Paul apt 告诉我它找不到它的源包:/ 到 Google @Scoopta 我尝试在裸机 ubuntu 15.04 上运行,发现我需要先apt-get update; apt-get dpkg-dev,然后是apt-get source file。请注意,dpkg-dev 将安装 patchgcc 等... 【参考方案1】:

如您所见,它是0x00053162。我假设本机字节顺序,您的意思是 x86 本机字节顺序?如果你 hexdump 文件,你会看到它在字节 12-15,字节交换(如 3162 0005,因为它是 x86):

hexdump blah.db | head -1
0000000 0001 0000 9fbc 0009 0000 0000 3162 0005
0000010 0009 0000 1000 0000 0900 0001 0000 0000

版本在下一个uint32_t,字节16-19。在这里,它是0009 0000,它是小端语言的第 9 版。事实上,从偏移量 12 开始的整个字节序列看起来是一个struct __db_bt_stat,其内容在db_stat(或Db::stat)的联机帮助页中给出:http://www.mit.edu/afs.new/athena/astaff/source/src-9.0/third/db/docs/api_cxx/Db/stat.html

【讨论】:

非常感谢。我没有意识到 x86 是字节交换的。现在这很有意义。

以上是关于什么是伯克利 DB 幻数?的主要内容,如果未能解决你的问题,请参考以下文章

伯克利 DB SIGBUS 错误

Python 伯克利数据库队列

未找到伯克利 DB -ldb_cxx

伯克利 DB 中的交易。快速地?

Berkeley DB:存储键的值列表

是否有可能获得平均伯克利数据库记录大小