【问题标题】:Delete a very large number of entries in Azure Table Storage删除 Azure 表存储中的大量条目
【发布时间】:2016-09-14 21:42:34
【问题描述】:

这是我的设置:

我在 Azure 中运行一个 Node.js Web 应用程序,它使用 Azure 表存储(非 SQL)。为了使用表存储,我使用了 azure-storage npm 模块。

我想做的事:

所以我有一个跟踪设备事件的系统。在存储中,我将 PartitionKey 设置为 deviceId,并将 RowKey 设置为 eventId。

添加事件很简单;出现时一次添加一个。

使用查询结构很容易检索它们。

但是,删除大量条目似乎很痛苦。看来您一次只能删除一个实体。似乎没有基于查询的实现。

可以选择使用批量创建大批量删除操作;但我刚刚发现每批操作的上限为 100 次。

所以我正在尝试删除单个设备的所有事件;在我目前的情况下,我有大约 5000 个事件。因此,为了实现这一点,我首先必须使用 GET 请求查询我的所有事件(并使用延续令牌连接它们),然后将它们分成 100 个批次,然后发送 50 个大请求以删除所有条目...

SQL 中的相同内容是 DELETE * WHERE deviceId='xxxxxxxx'

肯定有比这更好的方法!

【问题讨论】:

    标签: javascript node.js azure azure-table-storage


    【解决方案1】:

    SQL 中的相同内容是 DELETE * WHERE deviceId='xxxxxxxx'

    肯定有比这更好的方法!

    遗憾的是,没有:)。您必须根据您的要求获取实体,然后删除它们(批量或单独)。

    但是,您可以通过仅从表中获取 PartitionKeyRowKey 而不是所有属性来优化获取过程,因为您只需要这两个属性来删除实体。

    【讨论】:

    • 难道连使用通配符的方法都没有吗?将 RowKey 设置为 * 还是什么?这对他们来说似乎是一个荒谬的实现。
    • 很遗憾没有。但是,我会捍卫他们以这种方式设计表存储的决定。
    • 请问是什么原因?目前,处理大型数据集似乎很不方便。
    • 我不会在这里详细介绍(但如果您愿意,我们可以将其离线)但最大的原因是您将表存储作为一种服务,正如他们在 X-Files 中所说的那样 - "你并不孤单” :) (对不起,无法抗拒:P)。此外,它是一个经典的 NoSQL 数据存储,其引擎的智能程度低于常规关系数据存储。
    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 2016-06-11
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2016-09-09
    相关资源
    最近更新 更多