sql >> Database >  >> RDS >> Mysql

BLOB vs. VARCHAR voor het opslaan van arrays in een MySQL-tabel

Is er een reden waarom u geen onderliggende tabel maakt, zodat u één drijvende-kommawaarde per rij kunt opslaan in plaats van een array?

Stel dat u duizend arrays van 300 elementen per dag opslaat. Dat zijn 300.000 rijen per dag, of 109,5 miljoen per jaar. Niets om naar te niezen, maar binnen de mogelijkheden van MySQL of een ander RDBMS.

Over uw opmerkingen:

Natuurlijk, als de bestelling significant is, voegt u een andere kolom toe voor de bestelling. Zo zou ik de tafel ontwerpen:

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)
);
  • Totale ruimte voor een rij vectorgegevens:300x(4+2+2+4) =3600 bytes. Plus InnoDB record directory (interne dingen) van 16 bytes.

  • Totale ruimte als u een Java-array van 300 floats =1227 bytes serialiseert?

U bespaart dus ongeveer 2400 bytes, of 67% van de ruimte door de array op te slaan. Maar stel dat je 100 GB aan ruimte hebt om de database op te slaan. Door een geserialiseerde array op te slaan, kunt u 87,5 miljoen vectoren opslaan, terwijl u met het genormaliseerde ontwerp slechts 29,8 miljoen vectoren kunt opslaan.

Je zei dat je een paar honderd vectoren per dag opslaat, dus je vult die 100 GB-partitie in slechts 81 jaar in plaats van 239 jaar.

Re uw commentaar:Prestaties van INSERT is een belangrijk punt, maar je slaat maar een paar honderd vectoren per dag op.

De meeste MySQL-applicaties kunnen honderden of duizenden invoegingen per seconde zonder overdreven tovenarij.

Als je optimale prestaties nodig hebt, zijn hier enkele dingen om naar te kijken:

  • Expliciete transacties
  • INSERT-syntaxis met meerdere rijen
  • VOEG UITGESTELD IN (als u nog steeds MyISAM gebruikt)
  • LAAD DATA INFILE
  • WIJZIG TABEL UITSCHAKELEN SLEUTELS, doe de inserts, WIJZIG TABEL INSCHAKELEN SLEUTELS

Zoek naar de zin "mysql voegt per seconde in" op uw favoriete zoekmachine om veel artikelen en blogs te lezen die hierover gaan.



  1. Nieuwe Oracle-compatibiliteitsfuncties in PostgresPlus Advanced Server 9.3Beta

  2. MySQL-query vindt waarden in een door komma's gescheiden tekenreeks

  3. Verleen machtigingen aan de gebruiker voor alle nieuwe tabellen die zijn gemaakt in postgresql

  4. Laravel Eenvoudige maandselectie