我有一个存储用户在线状态的表。
columns(userid, IsOnline,date)
如果用户在线,则Isonline bool标志为true,如果它脱机,则IsOnline bool为false。通过这种方式,我可以看到用户在哪个时间和哪个时间在线。
选择partitionKey:userId会没关系, Rowkey:事件的日期和时间
用户无法同时打开和关闭,因此rowkey应该是唯一的。我喜欢它,它将用户的所有数据保存在同一个分区上。还选择日期作为rowId使排序更有效?
答案 0 :(得分:7)
UserId是PartitionKey的好策略
关于RowKey,我建议使用格式化为最大位数的“DateTime.MaxValue.Ticks - dateOfEvent.Ticks”。
这将使您的RowKey始终按降序排列,从而允许您选择用户的最新状态,而无需从所有分区获取数据
答案 1 :(得分:0)
对我来说很合理。这会将给定用户的所有操作组合在一个分区中。然后,每个操作由具有密钥时间戳的单个行描绘。
您可能需要记住,Azure表存储中的每一行都有一个在创建/更新时自动填充的Timestamp列。您可以考虑将此列用于Timestamp,但搜索/排序会很慢,因为它是与Table Storage行关联的第三级数据集的一部分。