6

バックグラウンド

必要のない大量のデータと必要な少量のデータを含むCSVデータファイルをクライアントから受信しています。将来、そのデータにアクセスする必要があるかもしれません。元のデータファイルをアーカイブしていますが、クエリが少し簡単になることを望んでいました。データファイルが同じ形式のままであるという意味ではない解決策を望んでいました。つまり、クライアントが列を追加/削除する可能性があり、実装が不足しているデータを救済したり、追加データのアーカイブに失敗したりしたくないのです。

Azureでアプリケーションを構築しているとき、Azureテーブルストレージは私には正しいように見えました。データファイルを読み取ってから、読み取ったキーと値のペアをデータストアに格納できました。

アップショット

Dictionary<K, V>またはHashtableまたはその他のキーと値のペアをAzureに格納する方法を知りたいのですが。

4

1 に答える 1

10

TableEntityから派生したクラスのReadEntityメソッドとWriteEntityメソッドをオーバーライドすることにより、追加のプロパティを格納できます。

これが私の素朴な実装です

public class TestEntity : TableEntity {

    public TestEntity(string a, string b) {
        PartitionKey = a;
        RowKey = b;
        DataItems = new Dictionary<string, string>();
    }

    public Dictionary<string, string> DataItems { get; set; }

    public override IDictionary<string, EntityProperty> WriteEntity(OperationContext operationContext) {
        var results = base.WriteEntity(operationContext);
        foreach (var item in DataItems) {
            results.Add("D_" + item.Key, new EntityProperty(item.Value));
        }
        return results;
    }

    public override void ReadEntity(IDictionary<string, EntityProperty> properties, OperationContext operationContext) {
        base.ReadEntity(properties, operationContext);

        DataItems = new Dictionary<string, string>();

        foreach (var item in properties) {
            if (item.Key.StartsWith("D_")) {
                string realKey = item.Key.Substring(2);
                ItemData[realKey] = item.Value.StringValue;
            }
        }
    }
}

Azureテーブルストレージは合計255のキーと値のペアのみを格納できます。PartitionKeyなどを考慮に入れると252のカスタムペアしか格納できないため、これもどこかで処理する必要があります。

于 2013-01-30T02:02:32.853 に答える