sql >> Database teknologi >  >> RDS >> Mysql

BLOB vs. VARCHAR til lagring af arrays i en MySQL-tabel

Er der en grund til, at du ikke opretter en undertabel, så du kan gemme én flydende kommaværdi pr. række i stedet for et array?

Lad os sige, at du gemmer tusinde arrays med 300 elementer hver om dagen. Det er 300.000 rækker om dagen eller 109,5 millioner om året. Intet at nyse af, men inden for mulighederne for MySQL eller enhver anden RDBMS.

Vedrørende dine kommentarer:

Selvfølgelig, hvis ordren er signifikant, tilføjer du endnu en kolonne til ordren. Sådan vil jeg designe bordet:

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)
);
  • Samlet plads til en række vektordata:300x(4+2+2+4) =3600 bytes. Plus InnoDB record bibliotek (interne ting) på 16 bytes.

  • Samlet plads, hvis du serialiserer et Java-array på 300 floats =1227 bytes?

Så du sparer omkring 2400 bytes eller 67% af pladsen ved at gemme arrayet. Men antag, at du har 100 GB plads til at gemme databasen. Lagring af et serialiseret array giver dig mulighed for at gemme 87,5 millioner vektorer, hvorimod det normaliserede design kun tillader dig at gemme 29,8 millioner vektorer.

Du sagde, at du gemmer et par hundrede vektorer om dagen, så du vil fylde den 100 GB partition op på kun 81 år i stedet for 239 år.

Om din kommentar:Ydeevne af INSERT er et vigtigt emne, men du gemmer kun et par hundrede vektorer om dagen.

De fleste MySQL-applikationer kan opnå hundredvis eller tusindvis af indsættelser pr. sekund uden overdreven trolddom.

Hvis du har brug for optimal ydeevne, er her nogle ting at se nærmere på:

  • Eksplicitte transaktioner
  • Indsæt syntaks med flere rækker
  • INDSÆT FORSINKET (hvis du stadig bruger MyISAM)
  • INDLÆS DATAINFIL
  • ÆNDR TABEL DEAKTIVER NØGLER, gør indsættelserne, ÆNDRING TABEL AKTIVER NØGLER

Søg efter udtrykket "mysql-indsættelser pr. sekund" på din yndlingssøgemaskine for at læse mange artikler og blogs, der taler om dette.



  1. kørende gennemsnit i mysql

  2. Sådan aktiveres INNODB i mysql

  3. De 9 mest almindelige databasedesignfejl

  4. Materialiseret visning i mysql