Azure Tables,PartitionKeys和RowKeys功能

时间:2012-06-21 16:06:26

标签: asp.net-mvc-3 razor azure-table-storage

所以刚刚开始使用Azure表 - 之前没有玩过它们,所以想要查看它。

我的理解是,我应该将其视为对象存储,而不是数据库,这很酷。但我对几点感到困惑......

首先,如果我有一对多的对象关系,那么根对象的分区键应该是什么样的?例如,假设我有一个University对象,它是Student对象的一对多,并且说Student对象是一对多的Classes。对于一个新学生,它的分区键应该是'universityId'吗?还是'universityId + studentId'?我在msdn文档中读到RowKey应该是我正在添加的项目的特定ID,这听起来像studentId。

那么新大学的partitionkey和rowkey都只是大学吗?

我还读到Azure表不用于存储列表 - 我认为它不是指存储包含List的对象......?

任何人都有使用asp mvc 3或4和razor与azure表的代码示例的链接?这是我的最终目标,看看真正知道自己在做什么的人会很酷:)

谢谢!

1 个答案:

答案 0 :(得分:2)

对于Azure Tables而言,与数据库相比,Azure Table更接近于对象存储。您确实有能力查询非键列,并在查询中执行逻辑。但是,您不应该计划将这些功能用于任何性能关键任务。

因为查询只有在指定至少一个PartitionKey(最好是RowKey或范围或RowKeys)时才会很快,因为这会严重影响您布置表的方式。您在开始时做出的决定将在以后产生重大影响。作为一个粗略的类比,我喜欢把它们想象成一个主键为(PartitionKey + RowKey)的SQL Server表,它永远不会有另一个索引。这不完全准确,但它会让你思考正确的方向。

  

首先,如果我有一对多的对象关系,那么根对象的分区键应该是什么样的?

我可能会使用UniversityId作为PartitionKey。这通常是一个安全的起点。

  

对于新生,其分区键应该是'universityId'吗?还是'universityId + studentId'?

您打算如何查询学生?如果你总是想要他们的UniversityId& StudentId我可能会分别让他们成为PartitionKey和RowKey。如果您基本上要基于StudentId进行查询,我会将其用作PartitionKey。

  

新大学的partitionkey和rowkey都是universityId吗?

这是一个可行的选择。你也可以为RowKey使用一个常量值(例如“大学”),如果你真的没有别的东西放在那里。

  

我还读到Azure表不用于存储列表 - 我认为它不是指存储包含List的对象......?

我不完全确定这意味着什么。显然,您可以将一组对象存储在一个表中,这就是它们的用途。您无法直接在实体属性中存储列表。因此,如果您的学生具有typee List属性,则无法直接存储。但是你可以将它序列化为XML或二进制文件,然后存储它。

遗憾的是,我没有任何代码示例。这可能是将数据逻辑抽象到自己的层中的好时机,而不是将其放入MVC控制器中。我们发现,抽象良好的数据层可以使单元测试逻辑非常简单。如果为表创建一些接口,使用List和一些LINQ创建模拟对象非常容易。