Amazon dynamodb 使用dynamodb或docuemntdb为带有嵌入式集合的invite模式建模
我正在调查是否使用AWS DynamoDb、Azure DocumentDb或google cloud来提高我的应用程序的价格和简单性,我想知道对于典型的邀请模式,最好的方法是什么 邀请已经结束Amazon dynamodb 使用dynamodb或docuemntdb为带有嵌入式集合的invite模式建模,amazon-dynamodb,google-cloud-datastore,azure-cosmosdb,Amazon Dynamodb,Google Cloud Datastore,Azure Cosmosdb,我正在调查是否使用AWS DynamoDb、Azure DocumentDb或google cloud来提高我的应用程序的价格和简单性,我想知道对于典型的邀请模式,最好的方法是什么 邀请已经结束 userId:key(谁创建了邀请) gameId:key 邀请列表:用户ID的集合 我将运行的查询是 获取邀请,其中userId==me 在邀请列表中我的用户ID所在的位置获取邀请 在Mongo中,我只需在嵌入式邀请列表上设置一个索引,在SQL中,我将设置gameId和邀请用户ID的连接表 使用d
- userId:key(谁创建了邀请)
- gameId:key
- 邀请列表:用户ID的集合
- 被邀请者:钥匙
- 配子:集合
{
"id" : "gameKey+invitingUserKey",
"gameKey" : "someGameKey",
"invitingUserId": "key",
"invites": ["inviteKey1", "inviteKey2"]
}
这是基于用户/游戏密钥的有限数量邀请。然而,在不知道查询模式的情况下,很难确定结构。我发现查询模式通常决定文档结构 与hslriksen的回答类似,如果满足某些标准,我建议您将所有这些内容反规范化为一个文档。这些标准是:
{
gameId: <some game key>,
userId: <some user id>,
invitationList: [<user id 1>, <user id 2>, ...]
}
{
配子体:,
用户ID:,
邀请者:[,…]
}
您还可以决定在游戏中使用内置的id
字段,在这种情况下,上面的名称是错误的
我的建议与hslriksen的关键区别在于,邀请列表是一个纯外键数组。这将允许索引用于查询中的ARRAY_CONTAINS子句
注意,在DocumentDB中,您倾向于将所有实体类型存储在同一个大存储桶中,只需使用字符串
type
字段或稍好一点的字段来区分它们。我已经更新了问题,以包括典型的查询。在这种情况下,我将如何运行查询以获取所有邀请我参加的游戏?我不能对invitedUserId进行索引,对吗?基于此,我将为invitedUserId使用普通数组。我已经更新了我的答案。它或多或少与Larry的相同。ARRAY_CONTAINS子句是否有效,因为它将使用索引?还是必须扫描整个表?ARRAY_CONTAINS将使用索引,因此它应该是有效的。这就是我改变hslriksen建议的主要原因。是否所有嵌入数组都在documentdb中默认索引,还是必须显式设置?