分区键和行键最适合类似tweet的数据?

时间:2013-06-29 05:28:13

标签: azure nosql schema

我正在使用表存储在Windows Azure上设计移动服务。我正在存储类似tweet的对象以生成用户提要(再次,如下面的twitter)。考虑到我应该只查询分区键和行键,它们应该用于按时间顺序排序,只能获取用户所遵循的类似推文的对象?

作为奖励,我怎么能通过哈希标签搜索这些(再次知道我只限于分区键和行键)?

注意:我有一个下表来确定用户是否跟随另一个用户。

1 个答案:

答案 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),以便最新的条目始终位于顶部。

希望这有帮助。