Azure表存储存储多种类型

Dav*_*ury 4 azure azure-storage azure-table-storage

您在以下场景中推荐什么:

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

  • 首要的关键
  • RowKey
  • 时间戳
  • 名字
  • 电子邮件
  • 电话

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

两种任务类型都有公共列,但是也有类型特定的列,如下所示:

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

然后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个事务权限?

所以我理解正确的是,如果我将任务存储在不同的表中,我会有更多的交易.

Gau*_*tri 6

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

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

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