Oracle Blobs - размер магазина или рассчитать? - PullRequest
5 голосов
/ 09 марта 2010

Я пишу универсальную службу размещения ресурсов Http и храню большие объекты в виде больших двоичных объектов в базе данных Oracle. Я хочу иметь возможность установить заголовок «Content-Length» при возврате сохраненного объекта, что означает, что мне нужно знать размер BLOB, прежде чем я начну писать его клиенту (я знаю, что мог бы использовать chunked-encoding Я в некоторых случаях). Кто-нибудь имеет какое-либо влияние на производительность, вызываемое dbms_lob.getlength () при каждом чтении, или я должен рассчитать размер BLOB в INSERT и сохранить его в таблице? В среднем я ожидаю, что скорость записи будет выше, чем скорость чтения. Я сейчас пишу тест, чтобы попытаться понять, как это повлияет, но кажется, что это такой общий вопрос, и я подумал, что кто-то, возможно, уже понял это. Кроме того, используя JDBC / Spring 3, как бы я рассчитал размер BLOB при записи? (и я не могу использовать триггеры или хранимые процедуры) Спасибо.

Ответы [ 3 ]

6 голосов
/ 10 марта 2010

Я сделал быструю проверку, выбрав BLOB из таблицы, а затем LENGTH (BLOB) и DBMS_LOB.GETLENGTH (BLOB). При выборе самого BLOB я получил 44 последовательных получения. Когда я выбрал длину (любым способом), я получил 7 последовательных приёмов.

Исходя из этого, когда я получаю длину, он не получает весь BLOB-объект и не вычисляет длину. Разумно предположить, что длина, хранящаяся в начале BLOB-объекта (как и длина значения VARCHAR2, хранится), и это используется непосредственно.

Таким образом, не должно быть больших накладных расходов при получении длины, а не при ее хранении. Это также уменьшает вероятность несоответствия.

2 голосов
/ 10 марта 2010

Поскольку наши BLOBS хорошо сжимаются, мы выбрали такой подход: -

  • Храните сжатый BLOB. Сжатие выполняется на стороне Java, когда мы входим в BLOB
  • записать несжатый размер в байтах в другой столбец в той же таблице
  • распаковываете через поток, когда мы снова отправляем BLOB, зная, какой будет размер контента

Вы могли бы рассмотреть этот подход, если ваши большие двоичные объекты сжимаются.

0 голосов
/ 09 марта 2010

Так как я пока не вижу ответов ..

Я лично ничего не измерял, но наш администратор БД рекомендовал хранить их размер (я знаю, просто ОН сказал мне об этом). Хотя он довольно хорош, поэтому я лично считаю, что хранение размера - это путь, по крайней мере, если он критичен к производительности (нам пришлось бы назвать .length () A LOT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...