LMDB:如何解释mdb_stat和mdb_dump实用程序的输出

时间:2018-10-23 02:40:27

标签: caffe lmdb

我有一个功能性LMDB,出于测试目的,该数据库目前仅包含21个键/值记录。我已经成功测试了插入和读取记录,并且对数据库按预期工作感到满意。

但是,当我使用mdb_statmdb_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()值是正确的。有人知道怎么回事吗?

3 个答案:

答案 0 :(得分:1)

操作系统目录与LMDB环境的data.mdb和lock.mdb文件之间的关系是一对一的。

如果LMDB环境(在OS目录中)具有多个数据库,则该环境还将包含一个单独的LMDB数据库,其中包含所有其命名数据库。

mdb_statmdb_dump实用程序似乎包含最少的逻辑,因此当通过命令行将它们提供给给定目录时,它们似乎只为存储数据库名称的数据库生成结果,而不是为存储数据库名称的数据库生成结果。存储实际感兴趣数据的数据库。

答案 1 :(得分:0)

4d65737361676573是“消息”的Ascii,它是表的名称(lmdb术语中的“ sub-db”),用于存储您所用案例的实际数据。

mdb_dump命令仅在默认情况下转储主数据库。您可以使用-s选项来转储该子数据库,即

mdb_dump -s Messages

或者您可以使用-a选项转储所有子数据库。

答案 2 :(得分:0)

由于您正在使用子数据库,因此主数据库中的条目数与您创建的子数据库数(即仅1)相对应。

尝试使用mdb_stat -a。这将显示所有子数据库(以及主数据库)的细分。在此细分中,它将列出每个子数据库的条目数。在这里您应该看到21个条目。