我有一个应用程序需要在键值存储数据库中使用长键来存储值。如果我尝试在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()查询。
我不确定如何按照这些说明操作?有关解决此问题的任何建议将不胜感激。