如何在Python中增加LMDB键值数据库的最大键大小?

4

我有一个应用程序需要在键值存储数据库中使用长键来存储值。如果我尝试在lmdb中使用Python API存储一个使用长键(大于511个字节)的值,我将收到以下错误:

lmdb.BadValsizeError: mdb_put: MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size

看下面的示例代码:

>>> short_key = 'short_key'
>>> long_key = 'long_key' * 100
>>> print(f'short_key ({len(short_key.encode())} bytes), long_key ({len(long_key.encode())} bytes)')
short_key (9 bytes), long_key (800 bytes)

初始化 lmdb 环境并检查最大键大小:

>>> import lmdb
>>> env = lmdb.open('db_folder')
>>> print(f'Max key bytes = {env.max_key_size()}')
Max key bytes = 511

使用短键插入值是有效的:

>>> with env.begin(write=True) as txn:
...     txn.put(short_key.encode(), '1'.encode())
...
True

然而,使用较长的密钥会引发以下错误:

>>> with env.begin(write=True) as txn:
...     txn.put(long_key.encode(), '2'.encode())
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
lmdb.BadValsizeError: mdb_put: MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size

这里的文档说:

默认情况下,记录键的长度限制为511个字节,不过可以通过重建库来进行调整。编译时键的长度可以通过Environment.max_key_size()查询。

我不确定如何按照这些说明操作?有关解决此问题的任何建议将不胜感激。

2个回答

0

0

我也遇到了这个问题。但是我没有找到增加密钥大小的解决方案。重建LMDB对我来说太难了。 我通过SVD压缩了长键。实际上,长键会减慢查询速度。


您的答案可以通过添加更多支持信息来改善。请[编辑]以添加进一步的细节,比如引用或文献资料,这样其他人就可以确认您的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - xlmaster
这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Shawn Hemelstrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接