这是Azure表中分区和行键的正确选择吗?

时间:2013-02-12 16:29:32

标签: azure database-design

我有一个存储用户在线状态的表。

columns(userid, IsOnline,date)

如果用户在线,则Isonline bool标志为true,如果它脱机,则IsOnline bool为false。通过这种方式,我可以看到用户在哪个时间和哪个时间在线。

选择partitionKey:userId会没关系, Rowkey:事件的日期和时间

用户无法同时打开和关闭,因此rowkey应该是唯一的。我喜欢它,它将用户的所有数据保存在同一个分区上。还选择日期作为rowId使排序更有效?

2 个答案:

答案 0 :(得分:7)

UserId是PartitionKey的好策略

关于RowKey,我建议使用格式化为最大位数的“DateTime.MaxValue.Ticks - dateOfEvent.Ticks”。

这将使您的RowKey始终按降序排列,从而允许您选择用户的最新状态,而无需从所有分区获取数据

答案 1 :(得分:0)

对我来说很合理。这会将给定用户的所有操作组合在一个分区中。然后,每个操作由具有密钥时间戳的单个行描绘。

您可能需要记住,Azure表存储中的每一行都有一个在创建/更新时自动填充的Timestamp列。您可以考虑将此列用于Timestamp,但搜索/排序会很慢,因为它是与Table Storage行关联的第三级数据集的一部分。