Есть ли причина, по которой вы не создаете дочернюю таблицу, чтобы вы могли хранить одно значение с плавающей запятой на строку вместо массива?
Допустим, вы храните тысячу массивов по 300 элементов в день. Это 300 000 строк в день, или 109,5 миллионов в год. Нечего чихать, кроме возможностей MySQL или любой другой СУБД.
Re ваши комментарии:
Конечно, если заказ значительный, вы добавляете еще один столбец для заказа. Вот как я бы разработал таблицу:
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 вставок в секунду» в своей любимой поисковой системе, чтобы прочитать много статей и блогов, говорящих об этом.