Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Que tipo de coluna deve ser usado para armazenar dados serializados em um banco de dados mysql?


Para responder:o texto está obsoleto em muitos DBMS, parece, então é melhor usar um blob ou um varchar com um limite alto (e com o blob você não terá problemas de codificação, o que é um grande problema com varchar e texto) .

Também conforme apontado em este tópico nos fóruns do MySQL , discos rígidos são mais baratos que software, então é melhor você primeiro projetar seu software e fazê-lo funcionar, e só então se o espaço se tornar um problema, você pode querer otimizar esse aspecto. Portanto, não tente otimizar demais o tamanho da sua coluna muito cedo, é melhor definir o tamanho maior no início (além disso, isso evitará problemas de segurança).

Sobre os vários comentários:Muito fanatismo por SQL aqui. Apesar do fato de eu gostar muito de SQL e modelos relacionais, eles também têm suas armadilhas.

Armazenar dados serializados no banco de dados como está (como armazenar dados formatados em JSON ou XML) tem algumas vantagens:
  • Você pode ter um formato mais flexível para seus dados:adicionar e remover campos dinamicamente, alterar a especificação dos campos dinamicamente etc...
  • Menos incompatibilidade de impedância com o modelo de objeto:você armazena e busca os dados exatamente como estão em seu programa, em comparação com buscar os dados e depois ter que processá-los e convertê-los entre as estruturas dos objetos do programa e as estruturas do banco de dados relacional .

E há muito mais outras vantagens, então, por favor, sem fanatismo:bancos de dados relacionais são uma ótima ferramenta, mas não vamos desmerecer as outras ferramentas que podemos obter. Mais ferramentas, melhor.

Quanto a um exemplo concreto de uso, costumo adicionar um campo JSON no meu banco de dados para armazenar parâmetros extras de um registro onde as colunas (propriedades) dos dados JSON nunca serão SELECT'd individualmente, mas usadas apenas quando o registro correto já está selecionado. Nesse caso, ainda posso discriminar meus registros com as colunas relacionais e, quando o registro correto é selecionado, posso usar apenas os parâmetros extras para qualquer finalidade que desejar.

Portanto, meu conselho para manter o melhor dos dois mundos (velocidade, serialização e flexibilidade estrutural), basta usar algumas colunas relacionais padrão para servir como chaves exclusivas para discriminar entre suas linhas e, em seguida, usar uma coluna blob/varchar onde seus dados serializados serão ser inserido. Normalmente, apenas duas/três colunas são necessárias para uma chave exclusiva, portanto, isso não será uma sobrecarga importante.

Além disso, você pode se interessar pelo PostgreSQL, que agora tem um tipo de dados JSON e pelo projeto PostSQL para processar campos JSON diretamente como colunas relacionais.