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