Мне нужно создать таблицу, которая будет содержать большой BLOB, который будет занимать 98% размера строки. Однако этот BLOB будет храниться в строке только временно и будет перемещен в другое место, а затем столбец BLOB будет установлен в NULL. Может ли MySQL повторно использовать это пространство или оно всегда будет частью строки? Если его нельзя повторно использовать автоматически, есть ли другой способ (например, таблица оптимизации), который я могу использовать, чтобы вручную освободить это пространство? В противном случае мне может потребоваться найти другое решение для обработки этого конкретного набора данных.
Вопрос
MySql освобождает пространство больших двоичных объектов с помощью InnoDB
- Можете ли вы хранить его вне MySQL, скажем, Redis или другого хранилища ключей / значений? Maxim Krizhanovsky 30.04.2012
- Данные будут перемещены в другое хранилище (S3) с помощью пакетного асинхронного процесса. Первоначальная запись должна быть mysql для транзакционных целей. Я мог бы переместить его в другое хранилище, такое как Redis (или постоянная очередь сообщений) во время транзакции, но этот процесс должен быть быстрым, поэтому я не решаюсь добавлять другие движущиеся части. Вот почему я сосредоточен на том, можно ли / как освободить пространство после перемещения большого двоичного объекта на S3. Если нет абсолютно никакого способа восстановить, тогда Redis, вероятно, будет следующим вариантом. AlexGad 30.04.2012
Ответы
Ответ 1 · рейтинг 1 · e4c5
Похоже, вам определенно будет лучше использовать Redis или даже просто хранить свой blob в файловой системе. На самом деле это то, что я рекомендую; сохраните данные в файле и поместите имя файла в таблицу. После завершения асинхронной загрузки в s3 установите для него значение null. Если вы используете файловую систему, оптимизированную для обработки больших объектов, это всегда будет быстрее, чем вставка в базу данных.
Как именно хранятся большие двоичные объекты, зависит не только от длины данных, но и от версии mysql, которую вы фактически используете. Удаленные строки всегда можно использовать повторно, а если последующие вставки не используют пространство повторно, их можно восстановить с помощью таблицы оптимизации. Но таблица оптимизации заблокирует эту таблицу. Значит, вы второй раз тормозите систему.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Медленный импорт большой базы данных Innodb в Amazon RDS с использованием mysqldump
- Mysql Innodb: объединение 3 таблиц в одну для быстрого поиска условных соединений
- Почему сообщаемый размер базы данных (на диске?) отличается от размера в памяти
- Используйте несколько меньших varchars вместо одного большого