Azure表删除模式 - 删除旧项

时间:2016-06-25 08:33:19

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

我正在使用Azure Table(存储)来存储有关我正在使用的网站的信息。所以,我计划了这个结构:

  1. 分区键 - 域名
  2. 行键 - 网页地址
  3. 有效期至(日期时间) - 此日期之后,该记录将被删除。
  4. 此处的其他重要数据......
  5. 这些列将存储在一个名为网站地址的表格中(例如" cnn.com")。

    我有两个主要用例(从高到低):  1.检查URL" x"在表中 - 通过分区键和行键的组合查找 - 非常有效。  2.删除旧数据 - 删除所有过期数据(根据"有效期至"列)。这项操作每隔一个中午进行,可能会删除数百万行 - 非常重。

    因此,我们的第一个任务(检查URL是否存在)是使用此数据模型以高效方式实现的。 第二项任务,不是。我想避免批量删除。

    我也担心制作"热点",这会让我性能低下。这是因为分区键。我希望在几个小时内,我会查询特定域名的更多问题。这将使这个分区成为热点并达到我的性能。为了避免这种情况,我想使用哈希函数(在URL上),结果将是"分区键"。这是个好主意吗?

    我还考虑过其他实现方式,看起来他们遇到了一些问题:

    • 将表中的行存储在以删除日期命名的行中(例如" cnn.com-1-1-2016")。这为我们提供了很好的删除性能但是,糟糕的搜索体验(该行可能存在于多个表中。例如" cnn.com-1-1-2016"或者" cnn.com-2-1-2016&#34 ; ...)。

    对我的问题有什么正确的解决方案?

2 个答案:

答案 0 :(得分:0)

你见过Azure Table Storage Design Guide吗?它描述了大规模设计表解决方案的原则和模式。对于热点,请查看前置/附加反模式以获取一些额外信息。这是您在单个分区中进行所有操作的地方,这会阻止添加其他资源。对于这些类型的场景,如果您可以跨分区分发操作,则可以获得更好的扩展。

答案 1 :(得分:0)

  1. 假设您有一个网站https://www.yahoo.com/news/death-omar-al-shishani-could-mean-war-against-203132664.html?nhp=1。您可以将PK保留为domainName +" / news /" + 2个页面地址,摘要https://www.yahoo.com/news/de。 RK - 完整地址的其他部分。这将在近1000个分区上拆分域分区。如果这还不够 - 在PK中使用3个第一个字母。

  2. 每15分钟删除一次过时的数据(为其创建单独的服务)。你的数百万人将变成数万人。或者保留较少的数据(2周而不是月份for.ex.)。并且不要忘记优化删除(仅获取PK和RK,将ETag更新为" *",如果可能,删除为DynamicTableEntity,批量处理。)