Как получить только размер значения в BerkeleyDB? - PullRequest
0 голосов
/ 13 апреля 2010

Есть ли способ получить только длину (в байтах) значения, хранящегося в BDB? Мне не нужен весь массив данных, только его размер.

Ответы [ 4 ]

2 голосов
/ 31 мая 2010

Если вы не хотите получать всю запись и не используете DPL, я бы сказал, что вы должны добавить вторичный индекс для размера хранимого байтового массива и убедиться, что ваш DAO правильно обновляет значение при любом сохранении или обновлении. Вы можете добавить KeyCreator, который создает вторичный ключ size во вторичной базе данных на основе записи.

Какой тип запроса вы пытаетесь выполнить? Вы хотите найти все записи определенного размера? Или вы хотите узнать размер определенной записи, прежде чем ее получить? Я думаю, что на последний вопрос труднее ответить.

0 голосов
/ 18 февраля 2013

для вашей проблемы, используя флаг DB_DBT_PARTIAL и запросить начало записи, вы получите ваши первые идентификаторы, а DBT.size можно использовать для вычисления общего количества идентификаторов.

0 голосов
/ 10 февраля 2013

Если вы храните свои идентификаторы документов как дубликаты элементов данных, а не как одно значение элемента данных BLOB-объектов, вы можете использовать DBC-> count () для определения количества совпадающих документов без фактического получения длинного списка идентификаторов. В противном случае API-интерфейс Berkeley DB, похоже, не поддерживает то, что вы запрашиваете (даже если бы вы думали, что было бы эффективно добавить его). Я тоже ломал голову над этим, и это было решением, которое я придумал для своего собственного проекта.

0 голосов
/ 13 апреля 2010

Я предполагаю, что вы используете версию JE (или привязку Java BDB), и в этом случае, как только вы получите DatabaseEntry нужного ключа, getSize () должна дать вам то, что вы хочу.

Если вы используете привязку C, проверьте поле размера дескриптора DBT.

...