Как получить только размер значения в BerkeleyDB?
Есть ли способ получить только длину (в байтах) значения, хранящегося в BDB? Мне не нужен весь массив данных, только его размер.
4 ответа
Если вы не хотите извлекать всю запись и не используете DPL, я бы сказал, что вы должны добавить вторичный индекс к размеру хранимого байтового массива и убедиться, что ваш DAO правильно обновляет это значение на любом сохранить или обновления. Вы можете добавить KeyCreator
который создает вторичный size
введите вторичную базу данных на основе записи.
Какой тип запроса вы пытаетесь выполнить? Вы хотите найти все записи данного размера? Или вы хотите узнать размер определенной записи, прежде чем ее получить? Я думаю, что на последний вопрос труднее ответить.
Я предполагаю, что вы используете версию JE (или Java-привязку BDB), и в этом случае, как только вы получите DatabaseEntry нужного ключа, getSize() должна дать вам то, что вы хотите.
Если вы используете привязку C, проверьте поле размера дескриптора DBT.
Для вашей проблемы, используя флаг DB_DBT_PARTIAL и запрос на начало записи, вы получите ваши первые идентификаторы, а DBT.size может быть использован для вычисления общего количества идентификаторов.
Если вы храните идентификаторы документов как дубликаты элементов данных, а не как одно значение элемента данных BLOB-объектов, вы можете использовать DBC->count() для определения количества подходящих документов без фактического получения длинного списка идентификаторов. В противном случае API-интерфейс Berkeley DB, похоже, не поддерживает то, что вы запрашиваете (даже если вы думаете, что было бы эффективно добавить его). Я тоже ломал голову над этим, и это было решением, которое я придумал для своего собственного проекта.