Czy istnieje powód, dla którego nie tworzysz tabeli podrzędnej, aby móc przechowywać jedną wartość zmiennoprzecinkową na wiersz zamiast tablicy?
Załóżmy, że każdego dnia przechowujesz tysiące tablic po 300 elementów. To 300 000 wierszy dziennie lub 109,5 miliona rocznie. Nie ma na co kichać, ale w ramach możliwości MySQL lub dowolnego innego RDBMS.
Odpowiedz na swoje komentarze:
Oczywiście, jeśli zamówienie jest znaczące, dodajesz kolejną kolumnę do zamówienia. Oto jak zaprojektowałbym stół:
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)
);
-
Całkowite miejsce na wiersz danych wektorowych:300x(4+2+2+4) =3600 bajtów. Plus katalog rekordów InnoDB (wewnętrzne rzeczy) 16 bajtów.
-
Całkowite miejsce w przypadku serializacji tablicy Java zawierającej 300 elementów zmiennoprzecinkowych =1227 bajtów?
Oszczędzasz więc około 2400 bajtów, czyli 67% miejsca, przechowując tablicę. Załóżmy jednak, że masz 100 GB miejsca na przechowywanie bazy danych. Przechowywanie zserializowanej tablicy umożliwia przechowywanie 87,5 miliona wektorów, podczas gdy znormalizowany projekt umożliwia przechowywanie tylko 29,8 miliona wektorów.
Powiedziałeś, że przechowujesz kilkaset wektorów dziennie, więc zapełnisz tę partycję 100 GB w zaledwie 81 lat zamiast 239 lat.
Odpowiedz na swój komentarz:Wydajność INSERT to ważna kwestia, ale przechowujesz tylko kilkaset wektorów dziennie.
Większość aplikacji MySQL może osiągnąć setki lub tysiące wstawek na sekundę bez nadmiernej magii.
Jeśli potrzebujesz optymalnej wydajności, oto kilka rzeczy, którymi warto się przyjrzeć:
- Jawne transakcje
- Wielorzędowa składnia INSERT
- WSTAWIĆ OPÓŹNIONY (jeśli nadal używasz MyISAM)
- WCZYTAJ PLIK DANYCH
- ZMIEŃ KLAWISZE WYŁĄCZ TABELĘ, wykonaj wstawki, ZMIEŃ KLAWISZE WŁĄCZ TABELĘ
Wyszukaj wyrażenie „mysql wstawia na sekundę” w swojej ulubionej wyszukiwarce, aby przeczytać wiele artykułów i blogów na ten temat.