Azure表存储存储多种类型

时间:2013-08-26 18:42:01

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

在以下情况中,您推荐什么:

我有一个名为Users的azure表,其中列为:

  • 的PrimaryKey
  • RowKey
  • 时间戳
  • 名字
  • 电子邮件
  • 电话

然后每个用户都有不同类型的任务,我们称之为TaskType1和TaskType2。

这两种任务类型都有公共列,但是也有类型的特定列:

  • PrimaryKey(这与用户PrimaryKey相同,以查找属于一个用户的所有任务)
  • RowKey
  • 时间戳
  • 名称
  • DUEDATE
  • 描述
  • 优先级

然后TaskType1有其他列:

  • EstimationCompletionDate
  • IsFeasible

和TaskType2拥有自己的特定列:

  • EstimatedCosts

我知道我可以将两种类型存储在同一个表中,我的问题是:

如果我对TaskType1和TaskType2使用不同的表,那么对交易成本的影响是什么?我猜想如果我为每个任务类型都有2个表,那么我将发出一个类似于get me all tasks where the task Primarykey is equal to a specific user from Users table PrimaryKey的查询,然后我将为每种类型运行2个查询(因为用户可以同时拥有两种任务类型),这意味着更多事务...相反,如果两个任务都在同一个表中,那么它将像1个查询(在分页事务后的限制为1000),因为我将获得PartitionKey是用户PartitionKey的所有行,因此分区不会被分割这意味着1个交易对吗?

如果我将任务存储在不同的表中,那么我理解我会有更多的交易吗?

1 个答案:

答案 0 :(得分:6)

您的理解完全正确。将任务拆分为2个单独的表将意味着2个单独的查询因此2个事务(让我们暂时保留超过1000个实体的等式)。虽然交易成本是将它们保存在同一个表中的一个原因,但还有其他原因:

  • 通过将它们保存在同一个表中,您将充分利用Azure表存储的无模式特性。
  • 2个表表示2个网络电话。尽管该服务具有高可用性,但您需要考虑到第1个表的调用成功时的情况,但是对第2个表的调用失败。您的应用程序在该场景中的行为如何?你也丢弃了第一张桌子的结果吗?通过将它们保存在一个表中,可以使您远离这种情况。
  • 假设您的应用程序中有一个场景,用户可以同时订阅任务1和2。如果将它们保存在同一个表中,则可以使用Entity Group Transaction,因为两个实体(一个用于任务1,另一个用于任务2)将具有相同的PartitionKey(即用户ID)。如果将它们保存在单独的表中,则无法利用实体组事务。

我要给出的一个建议是在Tasks表中有一个“TaskType”属性。这样你就可以更轻松地按任务过滤。