Question

J'ai récemment découvert des tampons de protocole et je me demandais si elles pouvaient être appliquées à mon problème spécifique.

En fait, j'avoir des données CSV que je dois convertir en un format plus compact pour le stockage que certains fichiers sont plusieurs gig.

Chaque champ dans le CSV a un en-tête, et il n'y a que deux types, les chaînes et les décimales (parce que parfois il y a beaucoup de chiffres significatifs et je dois gérer tous les numéros de la même façon). Mais chaque fichier aura différents noms de colonnes pour chaque champ.

ainsi que la capture des données CSV d'origine que je dois être en mesure d'ajouter des informations supplémentaires dans le fichier avant de l'enregistrer. Et en manipulant différentes versions de fichiers que j'espérais faire cette preuve future.

Alors, est-il possible d'utiliser des tampons de protocole pour capturer un nombre aléatoire de colonnes nommées au hasard de données, comme un fichier CSV?

Était-ce utile?

La solution

Eh bien, il est certainement représentable. Quelque chose comme:

message CsvFile {
    repeated CsvHeader header = 1;
    repeated CsvRow row = 2;
}

message CsvHeader {
    require string name = 1;
    require ColumnType type = 2;
}

enum ColumnType {
    DECIMAL = 1;
    STRING = 2;
}

message CsvRow {
    repeated CsvValue value = 1;
}

// Note that the column is implicit based on position within row    
message CsvValue {
    optional string string_value = 1;
    optional Decimal decimal_value = 2;
}

message Decimal {
    // However you want to represent it (there are various options here)
}

Je ne sais pas à quel point il fournira avantage, vous l'esprit ... Vous pouvez certainement ajouter plus d'informations (ajouter au message CsvFile) et Évolutivité est dans la « voie normale PB » - ajouter uniquement les champs facultatifs, etc.

Autres conseils

Eh bien, protobuf-net (ma version) est basée sur les types .NET réguliers, donc pas (car il ne sera pas faire face à différents schémas tout le temps). Mais la version de Jon pourrait permettre à des types dynamiques. Personnellement, je venais d'utiliser CSV et l'exécuter à travers GZipStream -. Je pense que ce sera très bien pour la fin


Edit: En fait, j'ai oublié: protobuf-net ne supporte des objets extensibles, mais vous devez être prudent ... cela dépend du contexte complet, je me attends

.

De plus l'approche de Jon des données imbriquées serait probablement trop.

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