【问题标题】:How to get just the size of the value in BerkeleyDB?如何获得 BerkeleyDB 中值的大小?
【发布时间】:2013-02-18 06:11:34
【问题描述】:

有没有办法只获取存储在 BDB 中的值的长度(以字节为单位)?我不需要整个数据数组,只需要它的大小。

【问题讨论】:

    标签: database berkeley-db berkeley-db-je


    【解决方案1】:

    如果您不想检索整个条目并且不使用 DPL,我会说您应该在存储的字节数组的大小上添加一个二级索引,并确保您的 DAO 正确更新它任何保存或更新的价值。您可以添加一个KeyCreator,它会根据记录在辅助数据库中创建一个辅助size 键。

    您要执行什么类型的查询?您想搜索给定大小的所有记录吗?或者您想在检索某个记录之前知道它的大小?我认为后一个问题更难回答。

    【讨论】:

    • 在我的例子中,存储在 key 下的值是一个(非常)长的文档 ID 列表。我希望能够先检索其中的 100 个,然后向用户显示“5000000 中有 100 个”。目前,该任务已取消,但我可能会创建二级索引。谢谢!
    【解决方案2】:

    我假设您使用的是 JE 版本(或 BDB 的 Java 绑定),在这种情况下,一旦您获得所需密钥的 DatabaseEntry,getSize() 应该会为您提供所需的内容。

    如果您使用的是 C 绑定,请检查 DBT 句柄的大小字段。

    【讨论】:

    • 我正在专门寻找一种方法来避免检索整个条目,因为我只需要它的大小。
    【解决方案3】:

    如果您将文档 id 存储为重复数据项,而不是作为一个 blob 数据项值,那么您可以使用 DBC->count() 来检测匹配文档的数量,而无需实际检索一长串 id。否则,Berkeley DB API 似乎不支持您所要求的内容(即使您认为他们添加它可能是有效的)。我也对此感到困惑,这就是我为自己的项目提出的解决方案。

    【讨论】:

      【解决方案4】:

      对于您的问题,使用 DB_DBT_PARTIAL 标志询问记录的开头将为您提供您的第一个 ID,并且 DBT.size 可用于计算 ID 的总数。

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 2013-06-17
        • 2014-01-17
        • 2012-04-10
        • 2012-09-09
        • 1970-01-01
        • 2018-03-07
        • 2019-01-16
        相关资源
        最近更新 更多