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

Hvilken kolonnetype skal bruges til at gemme serialiserede data i en mysql db?

For at svare:tekst er forældet i mange DBMS ser det ud til, så det er bedre at bruge enten en blob eller en varchar med en høj grænse (og med blob får du ingen kodningsproblemer, hvilket er et stort besvær med varchar og tekst) .

Også som påpeget i denne tråd i MySQL-foraene , harddiske er billigere end software, så du må hellere først designe din software og få den til at fungere, og først derefter, hvis pladsen bliver et problem, vil du måske optimere det aspekt. Så prøv ikke at overoptimere størrelsen af ​​din kolonne for tidligt. Indstil hellere størrelsen større i starten (plus dette vil undgå sikkerhedsproblemer).

Om de forskellige kommentarer:For meget SQL-fanatisme her. På trods af at jeg er meget glad for SQL og relationelle modeller, har de også deres faldgruber.

Lagring af serialiserede data i databasen som de er (såsom lagring af JSON- eller XML-formaterede data) har et par fordele:

  • Du kan have et mere fleksibelt format for dine data:tilføjelse og fjernelse af felter i farten, ændring af specifikationerne for felterne undervejs, osv...
  • Mindre impedansmismatch med objektmodellen:du gemmer og henter dataene, ligesom de er i dit program, sammenlignet med at hente dataene og derefter skulle behandle og konvertere dem mellem dine programobjekters strukturer og din relationelle databases strukturer .

Og der er mange flere andre fordele, så venligst ingen fanboyisme:relationelle databaser er et fantastisk værktøj, men lad os ikke diske op med de andre værktøjer, vi kan få. Flere værktøjer, jo bedre.

Med hensyn til et konkret eksempel på brug, har jeg en tendens til at tilføje et JSON-felt i min database for at gemme ekstra parametre for en post, hvor kolonnerne (egenskaberne) af JSON-dataene aldrig vil blive SELECT'd individuelt, men kun brugt, når den rigtige post er allerede valgt. I dette tilfælde kan jeg stadig skelne mine poster med de relationelle kolonner, og når den rigtige post er valgt, kan jeg bare bruge de ekstra parametre til det formål, jeg ønsker.

Så mit råd til at bevare det bedste fra begge verdener (hastighed, serialiserbarhed og strukturel fleksibilitet), brug bare nogle få standard relationelle kolonner til at tjene som unikke nøgler til at skelne mellem dine rækker, og brug derefter en blob/varchar kolonne, hvor dine serialiserede data vil blive indsat. Normalt kræves der kun to/tre kolonner til en unik nøgle, så dette vil ikke være en større overhead.

Du kan også være interesseret i PostgreSQL, som nu har en JSON-datatype, og PostSQL-projektet at behandle JSON-felter direkte som relationelle kolonner.



  1. grupper efter første og sidste forekomst

  2. Giver script timeout overført ved databaseimport

  3. Indsættelse af data i Oracle-database ved hjælp af php

  4. Databasestruktur, der involverer dynamiske felter