我正在使用表存储在Windows Azure上设计移动服务。我正在存储类似tweet的对象以生成用户提要(再次,如下面的twitter)。考虑到我应该只查询分区键和行键,它们应该用于按时间顺序排序,只能获取用户所遵循的类似推文的对象?
作为奖励,我怎么能通过哈希标签搜索这些(再次知道我只限于分区键和行键)?
注意:我有一个下表来确定用户是否跟随另一个用户。
答案 0 :(得分:1)
由于PartitionKey / Row支持唯一的索引, the basic idea is to denormalize the data based on how you're going to search on that data
。这意味着您最终会在多个表中存储相同的数据。对于您要完成的任务,可能有许多设计可能。我概述了一个我能想到的:)。
我正在使用表存储在Windows Azure上设计移动服务。一世 我存储类似tweet的对象来生成用户提要(再次,像 推特跟随)。考虑到我应该只查询 分区键和行键,它们应该按时间顺序排列 只获取用户关注的类似推文的对象的提要?
假设系统中的每个用户都获得GUID作为唯一用户标识符。现在要完成你想要做的事情,可能会有很多方法。在所有方法中,您需要一个表来维护用户遵循的用户列表。我们将此表称为PeopleIFollow
。这个表有:
PartitionKey =用户的ID
RowKey =您关注的用户的ID
现在开始获取用户Feed:
拥有所有Feed的集中表:
要完成此操作,您需要一个存储所有Feed的表格。我们称之为Feeds
。由于您只对获取用户的最新供稿感兴趣,请参阅此表:
PartitionKey =以UTC为单位的Feed日期/时间精确到秒精度(您可以根据需要决定精度)
RowKey =发布的用户的ID。
然后,您将首先访问PeopleIFollow
并获取用户列表,然后进入此表以获取用户最近x
秒的Feed。
为每位用户提供一个Feed表:
在此方法中,每个用户Feed都会进入单独的表格。我们将此表命名为Feeds<UserId>
。在此表中,
PartitionKey =以UTC为单位的Feed日期/时间精确到秒精度(您可以根据需要决定精度)
RowKey = Feed的唯一标识符。
首先,您可以查看此表,找出用户关注的用户列表,然后针对每个用户,您将访问单个Feed表并获取最后x
秒的数据。
作为奖励,我怎么能通过哈希标签搜索这些(再次知道 我只限于分区键和行键?)
同样,您需要有一个表格,您可以将哈希标记与帖子相关联。因此,如果我们假设每个帖子都保存在一个名为Posts
的表中,并且PartitionKey =某个ID来识别帖子,那么您可以使用名为HashTags
的表格:
PartitionKey =哈希标记
RowKey =帖子的ID
在这种情况下,首先您会从HashTags
表中找到所有帖子ID,然后进入Posts
表以获取有关该帖子的详细信息。
显然,通过所有这些方法,您需要考虑如何跨多个表/分区保存数据(因此事务不在图片中)和其他事情。对于存储日期/时间值,您可能需要考虑以反向的时间顺序存储数据(使用DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks),以便最新的条目始终位于顶部。
希望这有帮助。