我正在使用游标检索 Berkeley DB 数据库中的一系列键。我使用该标志进行了一次获取,然后使用该DB_SET_RANGE
标志进行了多次获取DB_NEXT
。
一切正常。问题是我只需要这个特定操作的键,但我总是得到键和关联的值。由于这些值可能会变得非常大(数百千字节),因此我想避免检索它们。有任何想法吗?
我正在使用游标检索 Berkeley DB 数据库中的一系列键。我使用该标志进行了一次获取,然后使用该DB_SET_RANGE
标志进行了多次获取DB_NEXT
。
一切正常。问题是我只需要这个特定操作的键,但我总是得到键和关联的值。由于这些值可能会变得非常大(数百千字节),因此我想避免检索它们。有任何想法吗?
我认为您可以使用DatabaseEntry.setPartial方法(使用 len=0)告诉 BerkeleyDB 引擎不从值中获取任何数据。
有趣的问题。我不相信单独拿到钥匙是可能的。
一种方法是将密钥存储在他们自己的数据库中,数据为零。如果您不能忍受重复,我认为最好的方法是批量阅读,因为根据定义,您的值范围具有良好的参考位置。在 DBC::get() 调用中使用 DB_MULTIPLE_KEY 标志,并为数据使用大型 DBT 缓冲区。使用 DbMultipleKeyDataIterator 迭代批量检索的块。
这应该会有所改善,因为检索中的连续叶项将导致有效的页面复制到您在 DBC::get 中使用的 DBT 临时缓冲区。