Azure表:如何管理类版本

时间:2013-09-16 09:35:49

标签: azure azure-storage azure-table-storage

我正在尝试使用Azure表。我了解到Azure表存储了特定类的对象。你能不能告诉我桌子如何容纳课堂的精心设计?

假设有一个带有属性p1的A类,并且说我们已经将类型A的对象o1和o2存储到表T中。让我们稍后说我们将另一个属性p2添加到A.现在,将会出现什么样的行为当我们使用A的新定义来检索o1和o2时,我们得到了什么?它会抛出一些错误吗?如果没有,那么当检索到对象时,p2的值是多少?

或者开发人员是否负责管理其应用程序中的不同类定义?

2 个答案:

答案 0 :(得分:4)

非常重要的说明:不要将Azure表视为object store!可以将其视为具有非固定架构的key-value store

为你举个特例。当您从o1存储o2class A时,表格中会有2行:

  • PartitionKey_1,RowKey_1,p1_1
  • PartitionKey_2,RowKey_2,p1_2

然后向该类添加新属性并存储该对象。结果将是第三行:

  • PartitionKey_3,RowKey_3,p_3,p2_1

稍后您可以检索所需的所有数据,并将其映射到具有与表列对应的属性名称的类的实例!

如果您尝试将前两个记录提取到最新的A类中,您只需为NULL属性获取p2(或值类型的默认值)。

如果您尝试将第3行提取到早期的A类中,则只能获得p1属性值。 (最终您可能会看到错误,但不是关键错误,您仍然可以将P1列从表格映射到对象的P1属性。)

作为参考,Understanding Table Service data model对您来说是非常好的起点。

刚开始时,我还建议您浏览Windows Azure Storage Client library 2.0 - Tables Deep Dive。本文详细介绍了如何从Azure表中保存和获取数据。

答案 1 :(得分:0)

准确地说,当您检索前三个对象时,它们只会在没有p2的情况下出现。如果使用类TableEntity的默认反序列化方法,则对象将使p2为null。