在我的测试项目中,我正在尝试模拟一个允许用户发布个人状态消息的小型社交网络。
我会将DynamoDB用于状态消息,并将MySQL用于用户友谊。 我的疑问是:如何设计我的发电机表来存储状态信息并仅获取朋友用户的状态?
例如,我需要从Dynamo获取按创建日期排序的朋友的所有状态。我想到了一个包含这些索引的表:
但是,我可以只在这张桌子上过滤我朋友的状态吗?
答案 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
中的批量获取项目希望有所帮助。