Есть ли причина, по которой вы не создаете дочернюю таблицу, чтобы вы могли хранить одно значение с плавающей запятой в строке вместо массива?
Скажем, вы храните тысячу массивов по 300 элементов каждый день. Это 300 000 строк в день или 109,5 млн в год. Не на что чихать, но в пределах возможностей MySQL или любой другой СУБД.
Повторите ваши комментарии:
Конечно, если порядок значителен, вы добавляете еще один столбец для порядка. Вот как я бы спроектировал таблицу:
CREATE TABLE VectorData (
trial_id INT NOT NULL,
vector_no SMALLINT UNSIGNED NOT NULL,
order_no SMALLINT UNSIGNED NOT NULL,
element FLOAT NOT NULL,
PRIMARY KEY (trial_id, vector_no),
FOREIGN KEY (trial_id) REFERENCES Trials (trial_id)
);
Общее пространство для строки векторных данных: 300x(4+2+2+4) = 3600 байт. Плюс каталог записей InnoDB (внутренние вещи) размером 16 байт.
Общее пространство, если вы сериализуете массив Java из 300 чисел с плавающей запятой = 1227 байт?
Таким образом, вы экономите около 2400 байт, или 67% пространства, сохраняя массив. Но предположим, что у вас есть 100 ГБ места для хранения базы данных. Хранение сериализованного массива позволяет хранить 87,5 миллионов векторов, тогда как нормализованный дизайн позволяет хранить только 29,8 миллионов векторов.
Вы сказали, что храните несколько сотен векторов в день, поэтому вы заполните этот 100-гигабайтный раздел всего за 81 год вместо 239 лет.
По поводу вашего комментария: производительность INSERT является важным проблема, но вы храните только несколько сотен векторов в день.
Большинство приложений MySQL могут выполнять сотни или тысячи вставок в секунду без чрезмерного волшебства.
Если вам нужна оптимальная производительность, обратите внимание на следующие моменты:
- Явные транзакции
- Синтаксис многострочного INSERT
- INSERT DELAYED (если вы все еще используете MyISAM)
- ЗАГРУЗИТЬ ФАЙЛ ДАННЫХ
- ALTER TABLE DISABLE KEYS, сделать вставки, ALTER TABLE ENABLE KEYS
Найдите фразу «mysql вставляет в секунду» в своей любимой поисковой системе, чтобы прочитать множество статей и блогов, говорящих об этом.
person
Bill Karwin
schedule
24.06.2010