MySQL Blob vs. Disk для «видеокадров» - PullRequest
2 голосов
/ 02 марта 2011

У меня есть приложение на c ++, которое генерирует 6x сравнительно небольших целочисленных массивов изображений в секунду. Данные представляют собой 64x48x2-мерное целое (т. Е. Сетка из 64x48 двумерных векторов, каждый из которых состоит из двух чисел с плавающей запятой). Это работает до ~ 26 КБ на изображение. Приложение также генерирует временную метку и некоторые функции, описывающие данные. Я хочу сохранить метку времени и функции в столбце БД MySQL, для каждого кадра. Мне также нужно хранить исходный массив в виде двоичных данных, либо в файле на диске, либо в виде поля большого двоичного объекта в базе данных. Предположим, что приложение будет работать более или менее без перерыва, и что я придумаю способ архивирования данных старше определенного возраста, чтобы хранение не стало проблемой.

Какие здесь компромиссы для больших двоичных объектов, файлов на диске или других методов, о которых я даже не думаю? Мне не нужно запрашивать двоичные данные, но мне нужно запрашивать другие метаданные / функции в таблице (у меня определенно будет индекс, построенный по временной метке) и извлекать двоичные данные. Изменится ли уравнение, если я сохраню несколько кадров в одном файле на диске по сравнению с одним кадром на файл?

Да, я прочитал Бинарное хранилище MySQL с использованием файловой системы BLOB VS OS: большие файлы, большие объемы, большие проблемы и Делать или не делать: Хранить изображения в базе данных , но я думаю, что мой вопрос отличается, потому что в этом случае будут миллионы бинарных файлов одинакового размера. Я не уверен, как производительность влияет на поддержание такого большого количества маленьких файлов в файловой системе по сравнению с хранением такого количества файлов в столбцах BLB BLOB. Любая перспектива будет оценена.

1 Ответ

2 голосов
/ 28 января 2012

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

Но! В предоставленной вами ссылке не упоминались объектные базы данных, которые могут хранить описанные вами данные таким образом, чтобы вы могли получить к ним доступ очень быстро и, возможно, возвращать их в собственном формате. Для обсуждения перейдите по ссылке или просто поищите в Google, там много обсуждений:

Хранение изображений в магазинах NoSQL

Я бы тоже заглянул в HBase.

Я подумал, так как вы не были уверены, что использовать в первую очередь (и не было ответов), альтернативное решение может быть уместным.

...