2016-10-11 2 views
0

Donc, j'ai regardé un certain nombre de ressources sur les problèmes de performance entourant l'écriture dans un fichier. J'ai rencontré la notion d'ajouter des fichiers et des journaux de transactions. Ce que je n'ai pas trouvé sont des formats typiques, ou des formats efficaces pour ce genre de fichiers.Quels sont les formats de fichiers utilisés lors de l'écriture d'un fichier append?

Je peux me tromper, mais il semblerait que l'on puisse lire et écrire dans le même fichier en même temps, mais je n'ai trouvé aucun exemple d'implémentation simple. Il semble que l'auteur devrait laisser derrière lui des détails sur les données trouvées dans le fichier, ou peut-être un format entièrement descriptif qui peut être analysé.

Existe-t-il de bonnes références pour implémenter un journal de transactions ou ajouter uniquement une implémentation de fichier? Peut-être même mieux: les descriptions de formats utilisés dans append seuls les fichiers implemntation?

Répondre

0

Votre question est très vaste et il est difficile de recommander une approche unique. Mais puisque vous regardez une option append-only, vous aurez besoin d'un format qui ne nécessite pas de pied de page. Par exemple. vous ne pouvez pas utiliser XML, car XML doit avoir des balises de fermeture et vous ne devez pas simplement ajouter des données.

Une option évidente est un format de fichier délimité, qu'il s'agisse d'un onglet ou d'un texte délimité par des virgules. Ils sont pratiquement universels et bien définis. Ils sont aussi assez compacts, juste un caractère pour délimiter les champs. Cependant, ils ne sont pas bons pour les données qui changent ligne par ligne. Par exemple. une ligne a des valeurs pour les champs A, B, C mais une autre ligne contient des valeurs pour les champs A, D et E. Dans ce cas, vous aurez peut-être besoin d'un format définissant le type de données dans un enregistrement par enregistrement. Un exemple d'un tel format est HL7 (https://en.wikipedia.org/wiki/Health_Level_7). C'est un format délimité mais chaque ligne a un "en-tête" indiquant le type d'enregistrement. Si vous cherchez une option plus performante, vous pouvez créer votre propre format en fonction de vos données, et même le stocker en format binaire, et même utiliser la compression (Voir DéflateStream https://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream(v=vs.110).aspx) pour réduire le fichier I/O. Cela rendra les opérations d'écriture un peu plus gourmandes en ressources processeur mais les E/S sont généralement plus lentes, donc dans l'ensemble, d'autant plus que le texte se compresse vraiment bien, vous pourriez vous retrouver avec des gains de performance. Vous devrez faire un benchmark pour être sûr de votre cas d'utilisation. Enfin, vous voudriez une classe capable de gérer l'écriture (écriture en cache/en file d'attente, conserver le gestionnaire de fichiers, etc.) afin que le code d'appel puisse être simplifié et synchronisé en un seul endroit. Vous pouvez faire cela asynchrone, si l'appelant peut continuer son travail et que votre script s'assurera que les données l'intègrent, ou synchrone s'il s'agit d'un "journal des transactions", ce qui signifie que la perte est inacceptable et que l'appelant doit s'assurer réellement arrivé.

Encore une fois, il s'agit d'informations de très haut niveau puisque votre demande est tout aussi vague et de haut niveau. Si vous venez avec plus de détails, peut-être que nous pouvons mieux vous aider.