2017-02-18 3 views
0

Si vous avez travaillé avec postgresql, vous pouvez savoir qu'il stocke diverses statistiques dans les vues internes. Je veux obtenir des statistiques avec un certain intervalle et le stocker dans un fichier binaire. Je le vois de la façon suivante:Écrire structure avec différentes tailles dans le fichier binaire et le lire

  1. lire les stats avec PQexec() de libpq.
  2. En utilisant les informations sur le nombre de lignes et de colonnes du résultat, allouez un tableau de pointeurs 3D.
  3. résultat de vente au tableau 3d (ce qui est déjà une partie de struct)
  4. struct écriture avec tableau 3D dans un fichier binaire
  5. passez à l'étape 1 et répéter

Ensuite, il est possible de lire ce fichier binaire, lire struct dans le tableau 3d similaire, puis trier les valeurs, afficher et ainsi de suite. Et tout va bien, jusqu'à ce que le nombre de lignes soit constant, mais dans postgresql il y a des vues où le nombre de lignes est changé de façon permanente. Ainsi, les tailles des structures écrites seront toujours différentes et je ne sais pas comment lire correctement ces structures à partir du fichier (car j'ai besoin de connaître la taille de la structure).

Pourriez-vous me conseiller ou proposer un meilleur moyen de le faire?

+0

Il semble que vous ayez juste besoin d'écrire des métadonnées en tant qu'en-tête dans votre fichier avant les données réelles. Vous n'aurez alors aucun problème pour encoder les tailles d'éléments. –

+0

oui, je pensais à l'en-tête et il y a un moment qui me confond - Header est dans le fichier a ** fixé ** taille, donc nous pouvons mettre dans le fichier un nombre limité de snapshots de statistiques. Il est peut-être préférable d'utiliser l'en-tête dédié à l'utilisateur pour chaque accrochage aux statistiques. Et d'abord lire l'en-tête de ligne (où la taille est située), puis lire la date. – lesovsky

Répondre

1

Fondamentalement, vous devez adopter un format de fichier. Le format le plus basique pour quelque chose comme ceci serait d'écrire la taille d'abord, puis les données. Ensuite, le lecteur lisait la taille, allouait la mémoire et lisait ensuite les données.

0

Vous aurez besoin d'une variante sur TLV - Type, Length, Value - encodage. Vous stockez (taille fixe) des informations sur les données de longueur variable qui vient ensuite. Lors de la lecture, vous lisez les informations de taille fixe et l'utilisez pour allouer l'espace adéquat pour lire les données qui suivent.