我有一个功能性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
4d65737361676573
000000000000010000000000000000000100000000000000d81e0000000000001500000000000000ba1d000000000000
DATA=END
尤其是当我有21岁时,mdb_stat
为什么只显示一个条目?此外,每个条目包括1024 x 300个值,每个值五个字节。 mdb_dump
显然没有显示我希望看到的1,536,000字节附近的任何地方,但是即时的mdb_put()
和mdb_get()
值是正确的。有人知道怎么回事吗?
答案 0 :(得分:1)
操作系统目录与LMDB环境的data.mdb和lock.mdb文件之间的关系是一对一的。
如果LMDB环境(在OS目录中)具有多个数据库,则该环境还将包含一个单独的LMDB数据库,其中包含所有其命名数据库。
mdb_stat
和mdb_dump
实用程序似乎包含最少的逻辑,因此当通过命令行将它们提供给给定目录时,它们似乎只为存储数据库名称的数据库生成结果,而不是为存储数据库名称的数据库生成结果。存储实际感兴趣数据的数据库。
答案 1 :(得分:0)
4d65737361676573
是“消息”的Ascii,它是表的名称(lmdb术语中的“ sub-db”),用于存储您所用案例的实际数据。
mdb_dump
命令仅在默认情况下转储主数据库。您可以使用-s选项来转储该子数据库,即
mdb_dump -s Messages
或者您可以使用-a选项转储所有子数据库。
答案 2 :(得分:0)
由于您正在使用子数据库,因此主数据库中的条目数与您创建的子数据库数(即仅1)相对应。
尝试使用mdb_stat -a
。这将显示所有子数据库(以及主数据库)的细分。在此细分中,它将列出每个子数据库的条目数。在这里您应该看到21个条目。