Mysql
 sql >> Baza danych >  >> RDS >> Mysql

BLOB vs. VARCHAR do przechowywania tablic w tabeli MySQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakiś sposób na uniknięcie sortowania plików, gdy kolejność według jest inna niż klauzula where?

  2. Błąd MySQL — niezsynchronizowane polecenia; nie możesz teraz uruchomić tego polecenia

  3. Jak mogę użyć mysqli_fetch_array() dwa razy?

  4. Zrzuć wszystkie tabele w formacie CSV, używając „mysqldump”

  5. Jak mogę zobaczyć konkretną wartość sql_mode?