LMDB中的子数据库是否有限制?

时间:2015-03-09 01:00:25

标签: lmdb

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

子数据库是否有限制?什么是合理数量的子数据库同时打开?

我想拥有~200个数据库,这些数据库似乎很多,并清楚地表明我的模型是错误的。 我想可以在密钥本身中重新构造和嵌入每个数据库的id,并且仅保留一个数据库但是我有更长的密钥,并且如果需要我也不能删除数据库。

我很感兴趣LMDB是否已经为密钥使用了某种内部前缀。 任何建议如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

如果您阅读了mdb_env_set_maxdbs的文档。

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

http://symas.com/mdb/doc/group__mdb.html#gaa2fc2f1f37cb1115e733b62cab2fcdbc

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

答案 1 :(得分:2)

不是每次都调用mdb_dbi_open,而是将自己的数据库名称映射到mdb_dbi_open返回的数据库句柄。在程序的生命周期中重用这些句柄。这将允许您在一个环境中拥有多个数据库,并通过mdb_dbi_open来防止开销。