Amazon DynamoDB - 基于友谊设计表

时间:2014-01-22 14:58:30

标签: mysql database amazon-web-services nosql amazon-dynamodb

在我的测试项目中,我正在尝试模拟一个允许用户发布个人状态消息的小型社交网络。

我会将DynamoDB用于状态消息,并将MySQL用于用户友谊。 我的疑问是:如何设计我的发电机表来存储状态信息并仅获取朋友用户的状态?

例如,我需要从Dynamo获取按创建日期排序的朋友的所有状态。我想到了一个包含这些索引的表:

  • HashKey:user_id
  • RangeKey:creation_date
  • 属性1:消息
  • 属性2:....

但是,我可以只在这张桌子上过滤我朋友的状态吗?

2 个答案:

答案 0 :(得分:1)

问题是,用户可以拥有朋友列表。给定用户,我们希望得到他/她的所有朋友(姓名+在线/离线状态)。我们如何在DynamoDB中执行此操作?

首先为每个用户分配一个user_id。这将是该用户的唯一标识符,换句话说,是指针。

您可以使用哈希范围表来存储友谊数据。该表的散列键和范围键都是user_id。在DynamoDB中,每个哈希键可以有多个范围键。哈希键将是一个用户,我们可以将她所有朋友的用户ID存储在范围键中。

假设user_1是user_2和user_3的朋友

"Friendship table in DynamoDB"
HashKey   RangeKey
user_1    user_2
user_1    user_3
user_2    user_1
user_3    user_1

您可以拥有另一个存储用户信息的表

"User table in DynamoDB"
HashKey   name    isLoggedin
user_1    J       true
user_2    swaggyp false
user_3    furion  false

现在你想得到user_1的朋友。您可以使用hash_key等于user_1执行DynamoDB查询。在上面的示例中,您将获得2行:

(user_1,user_2)(uiser_1,user_3)。

现在您知道user_2和user_3是user_1的朋友。您可以使用用户表来获取user_2和user_3的在线状态。

答案 1 :(得分:0)

让我们说你的MySql返回用户的朋友的ID:

例如。 1,2,3
现在你将调用dynamoDB表并在 Batchgetitem * 的帮助下通过传递从SQl获得的id数组来获取所有项目

DynamoDB架构:

hash:user_id
范围:日期和时间
其他属性

默认情况下,DynamoDB会对范围字段进行排序(您可以将其设置为升序/降序),这样您就可以获得所要求的密钥的所有数据。

*您可以参考http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html

中的批量获取项目

希望有所帮助。