2013-02-12 43 views
2

我有一個表存儲用戶的在線狀態。這是Azure表中分區和行鍵的正確選擇嗎?

columns(userid, IsOnline,date) 

如果用戶在線,則Isonline布爾標誌爲true,如果它離線,則IsOnline布爾值爲false。這樣我就可以看到用戶在哪個時間和哪個時間在線。

難道是精細選擇partitionKey:用戶id, Rowkey:事件

的日期和時間?

用戶不能同時開關,所以rowkey應該是唯一的。我喜歡這個功能,它可以將用戶的所有數據保存在同一個分區上。還選擇日期rowId使排序更有效?

回答

7

用戶ID是爲PartitionKey

一個很好的策略,對於RowKey,我會建議使用「DateTime.MaxValue.Ticks - dateOfEvent.Ticks」格式化爲數字最大數量。

這會讓你的RowKey始終處於降序排列,從而允許您選擇的用戶的最新狀態,而不從所有他的獲取數據分區

+0

我只是碰到這個帖子來了,我很感興趣在這個建議中。你能詳細說明爲什麼在這種情況下降序數據有利嗎?活動的日期/時間是否仍然按降序排列? – BenjiFB 2014-03-14 01:06:53

+2

Azure表存儲的工作方式是在檢索數據時不能使其更改排序。它以上升的PK/RK方式存儲。要檢索的第一行是給定PK的最小RK。如果想知道用戶的最新狀態,並且RK是以ASC順序存儲的時間戳,則第一行將是最早的狀態,因此在查找最新狀態之前,數據的使用者將不得不檢索所有的行。這有幫助嗎? – Igorek 2014-03-14 03:05:51

+0

是的,這有幫助!謝謝... – BenjiFB 2014-03-14 12:44:07

0

聽起來對我來說很合理。這將給定用戶的所有操作組合在一個分區中。然後每個行動由具有密鑰時間戳的單獨行劃定。

您可能想要記住,Azure表存儲中的每一行都有一個時間戳列,該列在創建/更新時自動填充。您可以考慮將此列用作Timestamp,但由於搜索/排序是與表存儲行關聯的第三級數據集的一部分,因此搜索/排序會很慢。

相關問題