Мне нужно создать таблицу, которая будет содержать большой BLOB, который будет занимать 98% размера строки. Однако этот BLOB будет храниться в строке только временно и будет перемещен в другое место, а затем столбец BLOB будет установлен в NULL. Может ли MySQL повторно использовать это пространство или оно всегда будет частью строки? Если его нельзя повторно использовать автоматически, есть ли другой способ (например, таблица оптимизации), который я могу использовать, чтобы вручную освободить это пространство? В противном случае мне может потребоваться найти другое решение для обработки этого конкретного набора данных.
MySql освобождает пространство больших двоичных объектов с помощью InnoDB
Ответы (1)
Похоже, вам определенно будет лучше использовать Redis или даже просто хранить свой blob в файловой системе. На самом деле это то, что я рекомендую; сохраните данные в файле и поместите имя файла в таблицу. После завершения асинхронной загрузки в s3 установите для него значение null. Если вы используете файловую систему, оптимизированную для обработки больших объектов, это всегда будет быстрее, чем вставка в базу данных.
Как именно хранятся большие двоичные объекты, зависит не только от длины данных, но и от версии mysql, которую вы фактически используете. Удаленные строки всегда можно использовать повторно, а если последующие вставки не используют пространство повторно, их можно восстановить с помощью таблицы оптимизации. Но таблица оптимизации заблокирует эту таблицу. Значит, вы второй раз тормозите систему.