6

在这里发帖,因为我找不到 lmdb 键值存储的任何论坛。

子数据库有限制吗?同时打开的子数据库的合理数量是多少?

我想要大约 200 个数据库,这看起来很多,并且清楚地表明我的模型是错误的。我想可以在密钥本身中改造和嵌入每个数据库的 id 并只保留一个数据库,但是我有更长的密钥,如果需要我也不能删除数据库。

不过,如果 LMDB 已经为键使用某种内部前缀,我很感兴趣。任何如何解决该问题的建议表示赞赏。

4

2 回答 2

3

如果您阅读了 mdb_env_set_maxdbs 的文档。

目前,中等数量的插槽很便宜,但大量插槽变得昂贵:每个事务 7-120 个字,并且每个 mdb_dbi_open() 都会对打开的插槽进行线性搜索。

http://www.lmdb.tech/doc/group__mdb.html#gaa2fc2f1f37cb1115e733b62cab2fcdbc

最好的了解方法是测试函数调用 mdb_dbi_open 的性能,看是否可以接受。

于 2015-03-15T21:52:26.797 回答
3

不要每次都调用 mdb_dbi_open,而是保留您自己的映射,其中包含从 mdb_dbi_open 返回的数据库句柄的数据库名称。在程序的整个生命周期内重复使用这些句柄。这将允许您在一个环境中拥有多个数据库,并防止使用 mdb_dbi_open 产生开销。

于 2016-09-21T22:03:45.860 回答