LMDB 中的子数据库有限制吗?
Posted
技术标签:
【中文标题】LMDB 中的子数据库有限制吗?【英文标题】:Is there a limit of sub-databases in LMDB? 【发布时间】:2015-03-09 01:00:24 【问题描述】:因为找不到 lmdb 键值存储的任何论坛,所以在这里发帖。
子数据库有限制吗?同时打开的子数据库的合理数量是多少?
我想要大约 200 个数据库,这看起来很多,并且清楚地表明我的模型是错误的。 我想可以在密钥本身中改造和嵌入每个数据库的 id,只保留一个数据库,但是我有更长的密钥,如果需要,我也不能删除数据库。
如果 LMDB 已经为键使用某种内部前缀,我很感兴趣。 任何如何解决该问题的建议表示赞赏。
【问题讨论】:
【参考方案1】:不要每次都调用 mdb_dbi_open,而是保留您自己的映射,其中包含从 mdb_dbi_open 返回的数据库句柄的数据库名称。在程序的整个生命周期内重复使用这些句柄。这将允许您在一个环境中拥有多个数据库,并防止使用 mdb_dbi_open 产生开销。
【讨论】:
【参考方案2】:如果您阅读了 mdb_env_set_maxdbs 的文档。
目前,中等数量的插槽价格便宜,但大量插槽变得昂贵:每个事务 7-120 个字,并且每个 mdb_dbi_open() 都会对打开的插槽进行线性搜索。
http://www.lmdb.tech/doc/group__mdb.html#gaa2fc2f1f37cb1115e733b62cab2fcdbc
最好的了解方法是测试函数调用 mdb_dbi_open 的性能,看看是否可以接受。
【讨论】:
以上是关于LMDB 中的子数据库有限制吗?的主要内容,如果未能解决你的问题,请参考以下文章