我有一个功能性的LMDB,出于测试目的,它当前只包含21个键/值记录。我已经成功地测试了插入和读取记录,并且我对数据库的正常工作感到满意。
但是,当我使用mdb_stat和mdb_dump实用程序时,我分别看到以下输出:
Status of Main DB
Tree depth: 1
Branch pages: 0
Leaf pages: 1
Overflow pages: 0
Entries: 1
VERSION=3
format=bytevalue
type=btree
mapsize=1073741824
maxreaders=126
db_pagesize=4096
HEADER=END
4d65737361676573000000000000010000000000000000000100000000000000d81e0000000000001500000000000000ba1d000000000000
DATA=END特别是,当我有21个条目时,为什么mdb_stat只指示一个条目?此外,每个条目包括1024×300个值,每个值5个字节。mdb_dump显然没有显示出我期望看到的1,536,000字节,但是I mdb_put()和mdb_get()的值是正确的。有人知道是怎么回事吗?
发布于 2018-10-30 08:09:44
操作系统目录与LMDB环境的data.mdb和lock.mdb文件之间是一对一的关系。
如果LMDB环境(在OS目录中)有多个数据库,则该环境还包含一个单独的LMDB数据库,其中包含其所有已命名的数据库。
mdb_stat和mdb_dump实用程序似乎包含最小的逻辑,因此当通过命令行向它们提供给定的目录时,它们似乎只为存储数据库名称的数据库生成结果,而不为存储感兴趣的实际数据的数据库生成结果。
发布于 2019-08-09 15:19:22
4d65737361676573是“消息”的Ascii,它是存储案例中实际数据的表(在lmdb术语中为“sub-db”)的名称。
默认情况下,mdb_dump命令仅转储主数据库。您可以使用-s选项转储该子数据库,即
mdb_dump -s Messages也可以使用-a选项转储所有子数据库。
发布于 2019-10-05 12:41:51
由于您正在使用子数据库,因此主数据库中的条目数量与您创建的子数据库的数量相对应(即只有1个)。
尝试使用mdb_stat -a。这将向您显示所有子数据库(以及主DB)的分解。在这个细目中,它将列出每个子数据库的条目数量。在这里,您应该会看到您的21个条目。
https://stackoverflow.com/questions/52940399
复制相似问题