2009-05-12 10 views
0

Je stocke des données de temps et de température dans une base de données, qui est en fait uniquement des données CSV. La première colonne est le temps en secondes, à partir de zéro, de ce qui suit (un ou plusieurs) colonne (s) étant la température:Stockage des données de temps et de température dans la base de données

0,197.5,202.4 
1,196.0,201.5 
2,194.0,206.5 
3,192.0,208.1 ....etc 

Chaque parcelle représente environ 2000 secondes. Actuellement, je compresse les données avant de les stocker dans un champ output_profile longtext. Cela aide un peu ... Je peux compresser un tracé de 10 Ko de texte brut à environ 2,5 Ko. Il n'y a aucune recherche ou indexation nécessaire sur ces données puisqu'elle est simplement référencée dans une autre table.

Ma question: Y at-il un autre moyen de stocker ces données? Je ne pense pas à ce qui est le plus efficace en termes d'espace de stockage?

Répondre

3

Y a-t-il une raison de penser que l'espace de stockage sera une contrainte limitante pour votre application? J'essaierai d'être sûr que c'est le cas avant d'accorder une plus grande priorité à cela, par rapport à la facilité d'accès et d'utilisation; Dans ce but, il semble que ce que vous avez est satisfaisant.

+0

Comme mon grand-pappy l'habitude de dire, l'espace disque est bon marché –

+0

Probablement un autre cas de moi essayant d'optimiser prématurément. Mais, je voulais voir s'il y avait quelque chose d'autre que je manquais complètement ou que je ne pensais pas. Merci. – brianz

1

En fait, je ne comprends pas très bien ce que vous entendez par "compression de l'intrigue". Signifie que vous comprimez 2000 mesures ou que vous compressez chaque ligne?

De toute façon, l'espace est bon marché. Je le ferais de la manière traditionnelle, c'est-à-dire deux colonnes, une entrée pour chaque mesure.

Si pour une raison quelconque cela ne fonctionne pas et si vous voulez enregistrer 2000 mesures en un seul enregistrement, vous pouvez le faire beaucoup mieux.

. Créez un fichier csv avec vos mesures. . zip le (gzip -9 vous donne la compression maximale) . l'enregistrer comme un blob (ou LONGBLOB selon la DB que vous utilisez) pas comme longtext

Ensuite, il suffit enregistrez à la DB.

Cela vous donnera une compression maximale.

0

PostgreSQL a un grand espace de stockage car chaque tuple (une pré-représentation d'une ligne dans une table) est de 28 octets sans les données (PostgreSQL 8.3). Il existe des entiers de 2, 4 et 8 octets et un horodatage de 8 octets. Les flotteurs sont de 8 octets, je pense. Ainsi, stocker 1 000 000 000 de lignes dans PostgreSQL nécessitera plus de stockage de GiB que MySQL (en fonction de l'engin de stockage que vous utilisez dans MySQL). Mais PostgreSQL est également idéal pour gérer d'énormes données par rapport à MySQL. Essayez d'exécuter certaines requêtes DDL sur une énorme table MySQL et vous verrez ce que je veux dire. Mais cette simple donnée que vous stockez devrait probablement être facile à partitionner, donc maby un simple MySQL peut très bien gérer le travail. Mais, comme je le dis toujours, si vous n'êtes pas vraiment sûr d'avoir besoin d'une fonctionnalité MySQL spécifique, vous devriez opter pour PostgreSQL.

Je limite cette publication à MySQL et à PostgreSQL car cette question est étiquetée avec seulement ces deux bases de données. Edit: Désolé, je n'ai pas vu que vous stocke réellement le CSV dans la DB.

Questions connexes