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

这是Azure表中分区和行键的正确选择吗?,azure,database-design,Azure,Database Design,我有一个存储用户联机状态的表 columns(userid, IsOnline,date) 如果用户在线,则Isonline bool标志为真;如果用户离线,则Isonline bool标志为假。通过这种方式,我可以看到用户在线的时间间隔 选择partitionKey:userId是否合适, Rowkey:事件的日期和时间 ? 用户不能同时打开和关闭,因此rowkey应该是唯一的。我喜欢这样,它将用户的所有数据保存在同一个分区上。选择日期作为rowId是否也会提高排序效率 听起来很合理。这将给

我有一个存储用户联机状态的表

columns(userid, IsOnline,date)
如果用户在线,则Isonline bool标志为真;如果用户离线,则Isonline bool标志为假。通过这种方式,我可以看到用户在线的时间间隔

选择partitionKey:userId是否合适, Rowkey:事件的日期和时间

?


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

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


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

< P> USEID是分区键

的一个好策略。 关于RowKey,我建议使用“DateTime.MaxValue.Ticks-dateOfEvent.Ticks”格式的最大位数


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

我刚刚看到这篇文章,我对这个建议很感兴趣。您能否详细说明为什么在这种情况下,按降序排列数据是有益的?事件的日期/时间不是仍然按降序排列吗?Azure表存储的工作方式是,您不能让它在检索数据时更改排序。以升序PK/RK方式存储。要检索的第一行是给定PK的最小RK。如果要查找用户的最新状态,并且RK是按ASC顺序存储的时间戳,则第一行将是最早的状态,因此数据使用者必须在查找最新状态之前检索所有行。这有用吗?