5

私は最近、プロトコルバッファについて知り、それらを私の特定の問題に適用できるかどうか疑問に思っていました。

基本的に、いくつかのファイルは数ギガであるため、ストレージ用にさらにコンパクトな形式に変換する必要があるいくつかのCSVデータがあります。

CSVの各フィールドにはヘッダーがあり、文字列と小数の2つのタイプしかありません(有効数字がたくさんあり、すべての数値を同じ方法で処理する必要があるため)。ただし、ファイルごとにフィールドごとに異なる列名が付けられます。

元のCSVデータをキャプチャするだけでなく、保存する前にファイルに追加情報を追加できるようにする必要があります。そして、私はさまざまなファイルバージョンを処理することによって、この将来の証拠を作ることを望んでいました。

では、プロトコルバッファを使用して、CSVファイルのようにランダムに名前が付けられたデータの列をランダムにキャプチャすることは可能ですか?

4

2 に答える 2

5

まあ、それは確かに代表的です。何かのようなもの:

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)
}

それがどれほどの利益をもたらすかはわかりませんが、あなたは確かに情報を追加することができます(CsvFileメッセージに追加します)。将来の校正は「通常のPB方法」で行われます-オプションのフィールドのみを追加するなど

于 2008-12-16T14:38:07.373 に答える
1

まあ、protobuf-net (私のバージョン) は通常の .NET 型に基づいているので、そうではありません (常にさまざまなスキーマに対応できないため)。しかし、Jon のバージョンでは動的型が許可される場合があります。個人的には、CSV を使用して GZipStream を介して実行するだけです。目的には問題ないと思います。


編集:実際、私は忘れていました:protobuf-netは拡張可能なオブジェクトをサポートしていますが、少し注意する必要があります...完全なコンテキストに依存すると思います。

さらに、ネストされたデータに対するJonのアプローチもおそらく機能します。

于 2008-12-16T14:32:19.147 に答える