Berkeley DB:仅检索密钥

Posted

技术标签:

【中文标题】Berkeley DB:仅检索密钥【英文标题】:Berkeley DB: Retrieving only keys 【发布时间】:2010-11-16 01:30:20 【问题描述】:

我正在使用游标检索 Berkeley DB 数据库中的一系列键。我使用DB_SET_RANGE 标志进行了一次获取,然后使用DB_NEXT 标志进行了多次获取。

一切正常。问题是我只需要这个特定操作的键,但我总是得到键和关联的值。由于这些值可能会变得非常大(数百千字节),因此我想避免检索它们。有什么想法吗?

【问题讨论】:

【参考方案1】:

有趣的问题。我不相信单独拿到钥匙是可能的。

一种方法是将密钥存储在他们自己的数据库中,数据为零。如果您不能忍受重复,我认为最好的方法是批量阅读,因为根据定义,您的值范围具有良好的参考位置。 在 DBC::get() 调用中使用 DB_MULTIPLE_KEY 标志,并为数据使用大型 DBT 缓冲区。使用 DbMultipleKeyDataIterator 迭代批量检索的块。

这应该会有所改善,因为您检索中的连续叶项将导致有效的页面复制到您在 DBC::get 中使用的 DBT 临时缓冲区。

【讨论】:

【参考方案2】:

我认为您可以使用 DatabaseEntry.setPartial 方法(len=0)告诉 BerkeleyDB 引擎不要从值中获取数据。

【讨论】:

以上是关于Berkeley DB:仅检索密钥的主要内容,如果未能解决你的问题,请参考以下文章

从值中检索一系列数据 Berkeley DB

检查 Berkeley DB C++ API 中是不是存在密钥 [关闭]

无法从 C 中的 Berkeley DB 检索值

如何使用berkeley db检索键小于指定键的数据?

部署高性能 Berkeley DB 系统的最佳实践

Berkeley DB 中的函数指针迭代器