【问题标题】:Azure table storage store multiple typesAzure 表存储存储多种类型
【发布时间】:2013-08-29 08:06:25
【问题描述】:

在以下情况下你有什么建议:

我有一个名为 Users 的天蓝色表,其中列是:

  • 主键
  • 行键
  • 时间戳
  • 名字
  • 姓氏
  • 电子邮件
  • 电话

那么每个用户都有不同类型的任务,我们称它们为 TaskType1 和 TaskType2。

两种任务类型都有共同的列,但也有像这样的类型特定列:

  • PrimaryKey(这与用户 PrimaryKey 相同,用于查找属于一个用户的所有任务)
  • 行键
  • 时间戳
  • 姓名
  • 截止日期
  • 说明
  • 优先级

那么 TaskType1 有额外的列:

  • EstimationCompletionDate
  • 可行

TaskType2 有它自己的特定列:

  • 估计成本

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

如果我对 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 笔交易对吗?

那么我是否理解正确,如果我将任务存储在不同的表中,我会有更多的事务..?

【问题讨论】:

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


    【解决方案1】:

    你的理解是完全正确的。将任务拆分为 2 个单独的表意味着 2 个单独的查询因此 2 个事务(让我们暂时不考虑 1000 多个实体)。尽管交易成本是将它们放在同一张表中的原因之一,但还有其他原因:

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

    我会给出的一个建议是在您的任务表中添加一个“TaskType”属性。这样您也可以更轻松地按任务进行过滤。

    【讨论】:

    • 谢谢高拉夫!我还认为最好将它们存储在一张桌子上,但想得到一些意见!再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2020-10-31
    • 1970-01-01
    • 2015-08-16
    • 2018-06-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多