如何在 Azure 表存储中存储任意键值对



Background

我从客户端接收 CSV 数据文件,其中包含大量我不需要的数据和少量我需要的数据。将来我可能需要访问该数据,尽管我正在存档原始数据文件,但我希望查询更容易一些。我希望有一个解决方案,并不意味着数据文件保持相同的格式 - 即客户端可能会添加/删除列,我不希望我的实现挽救丢失的数据或无法存档其他数据。

当我在 Azure 中构建应用程序时,Azure 表存储对我来说是正确的 - 我可以读取数据文件,然后将我读取的任何键/值对存储到数据存储中。

结果

我想知道如何在 Azure 中存储Dictionary<K, V>Hashtable或其他一些键/值对。

通过重写从 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 个键/值对 - 或者在考虑分区键等后存储 252 个自定义键/值对,因此也必须在某个地方处理。

相关内容

  • 没有找到相关文章

最新更新