Bezdepbonusu7Программирование: статьи и ответы

Вопрос

MySql освобождает пространство больших двоичных объектов с помощью InnoDB

Автор вопроса: AlexGadОтветов: 1

Мне нужно создать таблицу, которая будет содержать большой BLOB, который будет занимать 98% размера строки. Однако этот BLOB будет храниться в строке только временно и будет перемещен в другое место, а затем столбец BLOB будет установлен в NULL. Может ли MySQL повторно использовать это пространство или оно всегда будет частью строки? Если его нельзя повторно использовать автоматически, есть ли другой способ (например, таблица оптимизации), который я могу использовать, чтобы вручную освободить это пространство? В противном случае мне может потребоваться найти другое решение для обработки этого конкретного набора данных.

  • Можете ли вы хранить его вне MySQL, скажем, Redis или другого хранилища ключей / значений? Maxim Krizhanovsky 30.04.2012
  • Данные будут перемещены в другое хранилище (S3) с помощью пакетного асинхронного процесса. Первоначальная запись должна быть mysql для транзакционных целей. Я мог бы переместить его в другое хранилище, такое как Redis (или постоянная очередь сообщений) во время транзакции, но этот процесс должен быть быстрым, поэтому я не решаюсь добавлять другие движущиеся части. Вот почему я сосредоточен на том, можно ли / как освободить пространство после перемещения большого двоичного объекта на S3. Если нет абсолютно никакого способа восстановить, тогда Redis, вероятно, будет следующим вариантом. AlexGad 30.04.2012

innodb

Ответы

Ответ 1 · рейтинг 1 · e4c5

Похоже, вам определенно будет лучше использовать Redis или даже просто хранить свой blob в файловой системе. На самом деле это то, что я рекомендую; сохраните данные в файле и поместите имя файла в таблицу. После завершения асинхронной загрузки в s3 установите для него значение null. Если вы используете файловую систему, оптимизированную для обработки больших объектов, это всегда будет быстрее, чем вставка в базу данных.

Как именно хранятся большие двоичные объекты, зависит не только от длины данных, но и от версии mysql, которую вы фактически используете. Удаленные строки всегда можно использовать повторно, а если последующие вставки не используют пространство повторно, их можно восстановить с помощью таблицы оптимизации. Но таблица оптимизации заблокирует эту таблицу. Значит, вы второй раз тормозите систему.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы