【问题标题】:Best way to store a variable size list in Azure Storage Table在 Azure 存储表中存储可变大小列表的最佳方式
【发布时间】:2014-07-08 20:20:42
【问题描述】:

我需要在 Azure 表存储中存储可变大小的列表。假设它是一个列表 GUID,每个列表可以有数万个 GUID(例如,用户撰写的帖子的 ID)。

我在这里考虑两种方法:

  1. 以高效的二进制格式(如 protobuf)序列化列表并将结果存储在 blob 中
    • 优点:我可以在一次操作中获取完整列表
    • 缺点:我需要在内存中管理整个列表,甚至访问一个范围或单个项目!
  2. 将列表存储在表中,列表 ID 为分区键,每个 GUID 为行键
    • 优点:我可以随机访问每个 GUID,并且可以“分页”范围查询(取 20,然后用 RK 取 20 > 上一个范围的最后一项...)
    • 缺点:提取需要完整的分区扫描,我认为这与跨流一样糟糕

基本上,我正在寻找关于选项 2 缺点的确认:即使我限制检索到的实体数量 (.Take(x)) 并且我可以选择对 RK 设置约束,分区扫描是否如此糟糕?

此外,欢迎使用其他在 Azure Tables 中有效存储此类列表的方法,尽管我认为选项有限!

谢谢

【问题讨论】:

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


    【解决方案1】:

    您是对的,如果您需要获取所有帖子,您需要扫描整个分区。但是,如果您可以在 RowKey 中存储一些有意义的内容,那么您就不需要每次都获取所有帖子。例如,如果您通常显示最新的帖子,您可以让 RowKey 按日期降序,然后大部分时间您只需要获取前几行。

    【讨论】:

    • 确实,这一切都归结为您必须执行的查询类型(在 NoSQL 中通常如此)。不过,您知道获取分区的前 x 行是否比完整分区扫描更有效吗?换句话说,是否必须扫描整个分区才能找到前 20 行,还是索引直接只返回 x 行? (我想这对于 MS 实施 Table Storage 的人来说是个问题!)
    • 数据是按row key索引的,所以按一定范围的row key取数据肯定比取整个partition好。
    • 我的意思是分区内的数据。
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多