Azure 表删除模式 - 删除旧项目

标签 azure azure-storage azure-table-storage

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

  1. 分区键 - 域名
  2. 行键 - 网页地址
  3. 有效期至(日期时间) - 在此日期之后,记录将被删除。
  4. 此处还有其他重要数据...

这些列将存储在名为网站地址的表中(例如“cnn.com”)。

我有两个主要用例(从高到低): 1. 检查 URL“x”是否在表中 - 通过分区键和行键组合查找 - 非常高效。 2. 删除旧数据——删除所有过期数据(根据“有效期至”栏)。此操作在每个午夜进行,可能会删除数百万行 - 非常繁重。

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

我还担心制作“热点”,这会使我的性能降低。这是因为分区键。我预计在几个小时内,我将查询特定领域的更多问题。这将使该分区成为热点并影响我的性能。为了避免这种情况,我想使用哈希函数(在 URL 上),结果将是“分区键”。这是个好主意吗?

我也考虑过其他实现方式,看起来他们有一些问题:

  • 存储以删除日期命名的表中的行(例如“cnn.com-1-1-2016”)。这为我们提供了出色的删除性能。但是,搜索体验很差(该行可以存在于多个表中。例如“cnn.com-1-1-2016”或“cnn.com-2-1-2016”...)。

解决我的问题的正确方法是什么?

最佳答案

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

关于Azure 表删除模式 - 删除旧项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38026563/

相关文章:

azure - 在Azure中,我应该在哪里存储需要由辅助角色访问的物理文件?

c# - 如何在不使用表上下文的情况下忽略表存储资源未找到异常?

c# - 如何保证 CosmosDB 数据与 ServiceBus 保持同步,不被死信消息覆盖

c# - 天蓝色表存储不添加新字段

c# - 使用 ImageMagick 将图像压缩为 azure blob

azure - AKS BAD Gateway 502 访问网关 IP 时出错

Azure CloudBlobContainer.CreateIfNotExists() 在本地开发中抛出 Forbidden (403)

Azure Databricks - 成本优化

azure - if() 函数如何在 Azure 资源管理器模板中执行

azure - 使用 VPN 连接到 Azure SQL 数据库(点到站点)