2013-02-12 44 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,但由于搜索/排序是与表存储行关联的第三级数据集的一部分,因此搜索/排序会很慢。

相关问题