Я пишу универсальную услугу хостинга ресурса Http и храню большие объекты как БЛОБЫ в базе данных Oracle. Я хочу смочь установить заголовок 'Довольной Длины' при возврате хранившего объекта, что означает, что я должен знать размер BLOB, прежде чем я начну писать это клиенту (я знаю, что мог использовать закодированный разделенный на блоки и в некоторых случаях). У кого-либо есть опыт с влиянием производительности, звоня dbms_lob.getlength (), будет иметь на каждом чтении, или я должен вычислить размер BLOB на ВСТАВКУ и сохранить его в таблице? В среднем я ожидал бы, что уровни записи будут выше затем уровни чтения. Я пишу сравнительный тест прямо сейчас, чтобы попытаться видеть, каково влияние, но на такой общий вопрос кажется, что я думал, что кто-то, возможно, уже понял это. Кроме того, с помощью JDBC/Spring 3, как я даже вычислил бы размер BLOB на запись? (и я не могу использовать триггеры или хранимые процедуры), Спасибо.
Я провел быструю проверку, выбрав BLOB из таблицы, а затем LENGTH (BLOB) и DBMS_LOB.GETLENGTH (BLOB). При выборе самого BLOB я получил 44 согласованных получения. Когда я выбрал длину (любым методом), я получил 7 последовательных приемов.
Исходя из этого, когда я получаю длину, он не извлекает весь blob и не вычисляет длину. Разумно предположить, что длина, которую он хранит в начале BLOB (например, хранится длина значения VARCHAR2), и используется напрямую.
Таким образом, не должно быть больших накладных расходов на определение длины, а не на ее сохранение. Это также снижает вероятность несоответствия.
Поскольку я еще не вижу ответов ..
Я не лично измерял что угодно, но наш администратор базы данных рекомендовал хранить их размер (я знаю, просто ОН мне так сказал). Тем не менее, он довольно хорош, поэтому я лично считаю, что сохранение размера - это лучший способ - по крайней мере, если это критично для производительности (нам пришлось бы вызвать .length () ОЧЕНЬ МНОГО).
Поскольку наши BLOB-объекты в целом хорошо сжимаются, мы использовали следующий подход: -
. Вы можете рассмотреть этот подход, если ваши большие двоичные объекты сжимаемы.