2

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

columns(userid, IsOnline,date)

如果用户在线,则 Isonline bool 标志为 true,如果用户离线,则 IsOnline bool 为 false。这样我就可以看到用户在线的时间和时间。

选择 partitionKey: userId, Rowkey: 事件的日期和时间会不会很好

?

用户不能同时开启和关闭,所以rowkey应该是唯一的。我喜欢这样,它将用户的所有数据保存在同一个分区上。选择日期作为 rowId 是否也会使排序更有效率?

4

2 回答 2

7

UserId 是一个很好的 PartitionKey 策略

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

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

于 2013-02-12T17:58:57.833 回答
0

对我来说听起来很合理。这将给定用户的所有操作组合在一个分区中。然后,每个操作都由带有键的时间戳的单独行来描述。

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

于 2013-02-12T17:36:01.847 回答