2016-09-14 106 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