sql >> Databáze >  >> RDS >> Mysql

Jaký typ sloupce by se měl použít k ukládání serializovaných dat v databázi mysql?

Odpověď:Zdá se, že text je v mnoha DBMS zastaralý, takže je lepší použít buď blob nebo varchar s vysokým limitem (a s blobem nebudete mít žádné problémy s kódováním, což je hlavní problém s varcharem a textem) .

Jak je také uvedeno v tomto vláknu na fórech MySQL Pevné disky jsou levnější než software, takže raději nejprve navrhněte svůj software a zprovozněte jej, a teprve poté, pokud bude problém s místem, možná budete chtít tento aspekt optimalizovat. Nepokoušejte se tedy příliš brzy přeoptimalizovat velikost sloupce, raději nejprve nastavte velikost větší (a navíc se tím vyhnete bezpečnostním problémům).

O různých komentářích:Příliš mnoho SQL fanatismu. Přestože mám SQL a relační modely velmi rád, mají také svá úskalí.

Ukládání serializovaných dat do databáze tak, jak jsou (jako je ukládání dat ve formátu JSON nebo XML) má několik výhod:

  • Můžete mít flexibilnější formát dat:přidávat a odebírat pole za běhu, měnit specifikaci polí za běhu atd...
  • Menší nesoulad impedance s objektovým modelem:data ukládáte a načítáte přesně tak, jak jsou ve vašem programu, ve srovnání s načítáním dat a jejich následným zpracováním a převodem mezi strukturami vašich programových objektů a strukturami vaší relační databáze .

A existuje mnohem více dalších výhod, takže prosím žádný fanboyismus:relační databáze jsou skvělý nástroj, ale nezavrhujme další nástroje, které můžeme získat. Čím více nástrojů, tím lépe.

Pokud jde o konkrétní příklad použití, mám tendenci přidávat pole JSON do své databáze pro ukládání dalších parametrů záznamu, kde sloupce (vlastnosti) dat JSON nikdy nebudou SELECT' jednotlivě, ale pouze v případě správného záznamu. je již vybráno. V tomto případě mohu stále rozlišovat své záznamy podle relačních sloupců, a když je vybrán správný záznam, mohu použít další parametry pro jakýkoli účel.

Takže moje rada, abyste zachovali to nejlepší z obou světů (rychlost, serializovatelnost a strukturální flexibilitu), stačí použít několik standardních relačních sloupců, které budou sloužit jako jedinečné klíče k rozlišení mezi vašimi řádky, a poté použít sloupec blob/varchar, kde budou vaše serializovaná data být vložen. Obvykle jsou pro jedinečný klíč vyžadovány pouze dva/tři sloupce, takže to nebude velká režie.

Také by vás mohl zajímat PostgreSQL, který má nyní datový typ JSON, a projekt PostSQL přímo zpracovávat pole JSON stejně jako relační sloupce.



  1. Oracle SQL, zřetězit více sloupců + přidat text

  2. Zkontrolujte, zda je objekt tabulkou, zobrazením nebo uloženou procedurou na serveru SQL pomocí funkce OBJECTPROPERTY()

  3. Jak obnovit databázi SQL Server na Macu pomocí Azure Data Studio

  4. Testování připojení k databázi Entity Framework