Je peux stocker beaucoup de données (<= 4 Go) dans une colonne de table. Mais est-ce une bonne idée?

StackOverflow https://stackoverflow.com/questions/2091541

  •  21-09-2019
  •  | 
  •  

Question

Pour faire une histoire courte, une partie de la demande, je travaille sur les besoins pour stocker un volume assez important de données dans une base de données, pour une autre partie de l'application pour ramasser plus tard. Normalement, ce serait <2000 lignes, mais peut parfois dépasser 300.000 lignes. Les données doivent être stockées temporairement et peut être supprimé par la suite.

J'ai joué avec diverses idées et une chose vient à l'esprit aujourd'hui. Le type de données LONGTEXT peut stocker un maximum de 2 ^ 32 octets, ce qui équivaut à 4 Go. Maintenant, c'est beaucoup de choses à fourrer dans une ligne de table. Rappelez-vous, les données ne seront probablement pas dépasser 60-80 MB au plus. Mais ma question est, est-ce une bonne idée de faire en fait cela?

Les deux solutions que je suis toying actuellement avec l'aide sont quelque chose comme ceci:

  • Insertion toutes les données sous forme de lignes individuelles dans une table « temporaire » qui serait tronqué après la fin.
  • Insertion de l'ensemble des données sous forme de chaîne sérialisée dans une colonne de LONGTEXT dans une rangée qui serait supprimé après la fin.

Purement du point de vue de la performance, serait-il préférable de stocker les données potentiellement> 300 000 lignes individuelles, ou comme une entrée de LONGTEXT 60 Mo?

Si c'est un lavage, je vais probablement avec l'option LONGTEXT, car elle rendrait la partie de l'application qui capte les données plus faciles à écrire. Il serait également mieux attacher avec une autre partie, ce qui augmenterait la performance globale de l'application.

Je vous serais reconnaissant toute pensée à ce sujet.

Était-ce utile?

La solution

sérialisation toutes ces données dans un LONGTEXT ... blasphème !! :)

Plus sérieusement, il me se produit que si vous faites cela, vous auriez pas d'autre choix que de l'extraire en un seul, géant, pièce. Si vous étalez en lignes individuelles, d'autre part, vous pouvez avoir votre front-end en chercher des lots plus petits.

Au moins vous donner cette option semble la chose intelligente à faire. (Gardez à l'esprit que sous-estimer les exigences de taille future de données peuvent être une erreur fatale!)

Et si vous concevez vos tables droite, je doute fort que 60MiB de diffusion de données sur les lignes 300,000 serait moins efficace que la récupération 60MiB du texte et de l'analyse que sur le front-end.

En fin de compte, la question est: pensez-vous de votre front-end peut analyser le texte plus efficace que MySQL peut le chercher

?

Autres conseils

Cela devrait être bien aussi longtemps que vous utilisez un moteur de stockage de mémoire . Dans MySQL, cela signifie en utilisant le moteur de stockage de mémoire au lieu de InnoDB ou MyISAM. Sinon, l'utilisation du disque apportera votre application à ses genoux.

Quel type de données et comment il sera utilisé? Probablement ce sera beaucoup mieux pour stocker et traiter dans la mémoire de votre application. Au moins, il sera beaucoup plus rapide et ne se charge pas moteur DB.

Vous pouvez toujours stocker dans la base de données que le format 300 000 de ligne et utiliser memcached pour mettre en cache les données afin que vous ne devez pas le faire à nouveau. S'il vous plaît noter que les magasins memcached dans la mémoire de la machine donc si vous utilisez beaucoup de ces données, vous pouvez définir un moyen de faible expireront dessus. Mais Memcached accélère considérablement le temps de récupérer les données parce que vous n'avez pas à faire des requêtes chaque chargement de page.

Si vous allez être juste d'écrire un grand blob temporaire, vous pourriez envisager d'écrire dans un fichier temporaire sur un système de fichiers partagé à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top