2009-05-19 8 views
0

Quelle est la meilleure façon (correcte, standard, etc.) de conserver un journal des données acquises à un débit défini (toutes les minutes, toutes les 5 secondes, toutes les 10ms, etc.) dans une base de données Oracle?Enregistrement de données avec Oracle (ou RDBMS)

Il semble inefficace de stocker la valeur DATE de 7 octets pour chaque point de données (en particulier lorsque la fréquence augmente). Toutefois, l'intégration des données dans un format brut rend les statistiques et autres calculs sur les données plus difficiles.

Je suppose que cette question est assez générale pour s'appliquer à n'importe quel SGBDR, mais dans ce cas j'utilise Oracle.

Répondre

2

Combien coûte un téraoctet de disque, et le compactage de ces 7 octets en vaut-il vraiment la peine? Si vous souhaitez calculer les statistiques et les rapports sur les journaux en fonction du temps, il sera très difficile de décomposer la date à utiliser dans les requêtes SQL. Avec Oracle, consignez simplement les données dans une table. Essayez de ne pas trop vous connecter ou d'avoir trop d'index sur la table de journal. Assurez-vous que votre table de journalisation est partitionnée du premier jour à des tailles gérables - cela peut être une partition par jour, semaine ou mois en fonction de la quantité de données que vous générez. Concevez votre politique d'entretien du jour 1 aussi. Lorsque vous ajoutez une nouvelle partition à la fin de votre 'période' lorsque les données commencent à entrer dans la nouvelle partition, vous pouvez envisager d'utiliser 'alter partition move compr' pour compresser les données afin de les stocker en ligne dans moins d'espace. .

Il y a beaucoup d'options, vous avez juste besoin de réfléchir aux exigences que vous avez pour essayer de trouver la meilleure solution. En fonction de ce que vous faites, la connexion à un fichier peut aussi être une option - mais méfiez-vous des milliers et des milliers de fichiers dans un seul répertoire qui peuvent aussi causer des problèmes.

0

Étant donné que chaque ligne de données collectées doit être autonome, vous devez utiliser l'espace pour enregistrer la valeur DATE complète, sauf si vous choisissez d'utiliser quelque chose comme un horodatage Unix (nombre entier secondes depuis 1970-01-01 00 : 00: 00Z, ou une autre époque ou un point de référence approprié). Cela correspond à 4 octets pour donner une période de 68 ans de chaque côté de l'époque (en supposant des entiers 32 bits signés). Ce n'est peut-être pas aussi pratique, mais relativement compact.

+0

Pourquoi s'embêter? C'est une petite quantité d'économies d'espace. "ne pas être aussi pratique" me semble un euphémisme. L'utilisation de l'une des fonctions de date SQL nécessite désormais des conversions manuelles et nécessite des stratégies d'indexation spéciales. – RussellH

+0

Je ne voudrais pas déranger non plus, mais je ne suis pas la personne qui pose la question, qui semble être préoccupé par l'espace. Stocker une quantité plus petite économise de l'espace disque; Même avec des téraoctets de disque, si vous avez suffisamment de données, une surcharge de 3 octets sur une taille de ligne suffisamment petite peut s'additionner. Si les informations consignées sont suffisamment importantes pour que l'enregistrement sur 3 octets soit négligeable, alors oui, utilisez le type DATE complet. –

+0

L'interrogation ne doit pas être intolérablement difficile avec des fonctions appropriées en place. Cela dépend de ce que Oracle fournit de toute façon, et je ne suis pas suffisamment au fait des tenants et aboutissants des fonctions date/heure d'Oracle pour donner une réponse détaillée. –

Questions connexes