Има ли причина да не създавате дъщерна таблица, за да можете да съхранявате една стойност с плаваща запетая на ред вместо масив?
Да речем, че съхранявате хиляда масива от по 300 елемента всеки ден. Това са 300 000 реда на ден или 109,5 милиона на година. Нищо за кихане, но в рамките на възможностите на MySQL или всяка друга RDBMS.
Отново вашите коментари:
Разбира се, ако поръчката е значима, добавяте друга колона за поръчката. Ето как бих проектирал таблицата:
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 float =1227 байта?
Така спестявате около 2400 байта, или 67% от пространството, като съхранявате масива. Но да предположим, че имате 100 GB място за съхранение на базата данни. Съхраняването на сериализиран масив ви позволява да съхранявате 87,5 милиона вектора, докато нормализираният дизайн ви позволява да съхранявате само 29,8 милиона вектора.
Казахте, че съхранявате няколкостотин вектора на ден, така че ще попълните този дял от 100 GB само за 81 години, вместо за 239 години.
Относно вашия коментар:Ефективност на INSERT е важен проблем, но вие съхранявате само няколкостотин вектора на ден.
Повечето MySQL приложения могат да постигнат стотици или хиляди вмъквания в секунда без прекомерно магьосничество.
Ако имате нужда от оптимална производителност, ето някои неща, които трябва да разгледате:
- Изрични транзакции
- Многоредов синтаксис INSERT
- ВЪВЕТЕ ОТЛОЖЕНО (ако все още използвате MyISAM)
- ЗАРЕЖДАНЕ НА ИНФАЙЛ С ДАННИ
- ALTER TABLE ИЗКЛЮЧИ КЛЮЧОВЕ, направете вмъкванията, ALTER TABLE АКТИВИРАТЕ КЛЮЧОВЕ
Потърсете фразата „mysql вмъквания в секунда“ в любимата си търсачка, за да прочетете много статии и блогове, които говорят за това.