2016-09-14 62 views
1

这里是我的设置:删除Azure Table中存储一个非常大的数量的条目

我跑,一个Node.js的Web应用程序在Azure中被使用Azure的表存储(非SQL)。要使用表格存储,我使用了azure-storage npm模块。

我想要做的事:

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

添加事件很简单;在发生时一次添加一个。

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

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

可以使用批处理来创建大批量的删除操作;但我刚刚发现每批有100个操作的上限。

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

SQL中的同样的事情会被删除* WHERE deviceId ='xxxxxxxx'

当然,肯定有比这更好的方法!

回答

3

在SQL同样的事情会删除*其中的DeviceID =“XXXXXXXX”

当然必须有比这更好的办法!

可悲的是,没有:)。您必须根据您的要求提取实体,然后删除它们(分批或单独)。

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

+0

甚至没有使用通配符的方法吗?将RowKey设置为*或什么?这似乎是一个荒谬的执行他们的一部分。 – Mitch

+0

不幸的是没有。然而,我会捍卫他们这样设计表格存储的决定。 –

+0

请问原因为什么?目前,在处理大型数据集时似乎是一个巨大的不便。 – Mitch