Обработка огромных BLOB-объектов в MySQL? - PullRequest
5 голосов
/ 03 июня 2009

Как я могу вставить огромные большие двоичные объекты в базу данных MySQL (InnoDB)?

Поля типа LONGBLOB поддерживают размеры данных до 4 ГБ согласно руководству MySQL. Но как данные такого огромного размера попадают в базу данных?

Я пытался использовать

INSERT INTO table (bindata) VALUES ( LOAD_FILE('c:/tmp/hugefile') );

, которая не срабатывает, если размер огромного файла превышает 500 МБ. Я установил max_allowed_packet на соответствующий размер; значение innodb_buffer_pool_size, похоже, не оказывает влияния.

Мой сервер работает под управлением Windows Server 2003 и имеет 2 ГБ ОЗУ. Я использую MySQL 5.0.74-enterprise-nt.

Ответы [ 2 ]

2 голосов
/ 03 июня 2009

BLOB кэшируются в памяти, поэтому у вас будет 3 копий BLOB при вставке в базу данных.

Ваш BLOB объемом 500 МБ занимает 1500 МБ в ОЗУ, что, похоже, превышает ваш предел памяти.

1 голос
/ 03 июня 2009

Я не знаю, какой клиент / API вы используете, но при попытке использовать большие двоичные объекты из собственных клиентов Java и Objective-C кажется, что MySQL не поддерживает потоковую передачу больших двоичных объектов. Вам нужно достаточно памяти для хранения всего большого двоичного объекта в виде байтового массива в оперативной памяти (на стороне сервера и клиента) более одного раза! Переход на 64-разрядную версию Linux помогает, но не является желаемым решением.

MySQL не предназначен для работы с BLOB (хорошо для небольших BOB :-). Он занимает в два или три раза больше памяти для хранения / чтения в «BLOB».

Вы должны использовать другую базу данных, такую ​​как PostgreSQL, чтобы получить реальную поддержку BLOB, извините.

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