Параметры для настройки при получении большого количества маленьких BLOB (2-10 КБ) из базы данных Oracle? - PullRequest
3 голосов
/ 09 марта 2010

У нас есть таблица, в которой мы храним миллионы маленьких больших двоичных объектов (2-10 КБ). И нам нужно обращаться к части этой таблицы за раз, повторяя ее во время извлечения всех этих BLOB-объектов (эта «часть» обычно имеет порядок 10 ** 5 строк).

Мы используем оракул 11g R1.

Сейчас я думаю о настройке OracleConnection.setDefaultRowPrefetch() и намекаю, что это только для чтения.

Какие еще настройки возможны?

Кроме того, есть ли у кого-нибудь опыт работы с небольшими BLOB-объектами с помощью Oracle 11g R2? Кто-то сказал мне, что он лучше оптимизирован по сравнению с R1 для обработки небольших BLOB-объектов, но мне было интересно, стоит ли попробовать.

Любой совет приветствуется!

РЕДАКТИРОВАТЬ: Будут использованы все строки в «части» - они будут обработаны в специальный большой двоичный файл, который будет использоваться другой сущностью. Так что самой итерации нельзя избежать.

РЕДАКТИРОВАТЬ: наш текущий DDL (частично, модифицированный)

TABLESPACE "BLOB_STUFF" LOB(
 "STUFF"
)
STORE AS BASICFILE "BLOBS_FILE"(
TABLESPACE "BLOBS" ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
);

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Что стоит рассмотреть на уровне Oracle:

Убедитесь, что столбец больших объектов создан (или изменен) с предложениями CACHE и ENABLE STORAGE IN ROW - в противном случае для каждого чтения каждой строки потребуются два прямых пути чтения, что будет slooooow. Меньшие большие объекты будут храниться встроенными, а большие большие объемы будут сохраняться вне линии.

1 голос
/ 10 марта 2010

нам нужно получить доступ к части этого таблица за раз, перебирая ее во время извлечения всех этих BLOB-объектов

Существует общепринятый шаблон для ОО-программистов, который пишет свое приложение так, что он просто извлекает небольшую кучку строк из базы данных и затем выполняет итерацию по ним на среднем уровне, чтобы отделить строки, необходимые от мякины. Более эффективный подход заключается в написании сфокусированного запроса, который извлекает только точные строки.

Если это не то, что вы делаете, вам следует отредактировать вопрос, чтобы уточнить, как вы его обрабатываете. Если это то, что вы делаете, вы должны объяснить, почему вам нужно перебирать сто тысяч записей за раз.

...