什么是用于存储多种文档类型的最佳DynamoDB架构?

时间:2018-01-22 13:58:11

标签: amazon-web-services amazon-dynamodb

阅读Amazon DynamoDB文档我仍然无法理解将其用于最常见任务的最佳方式 - 拥有多种类型的文档(例如,' user',&# 39;事件','新闻')都有独特的ID。 据我所知,由于DynamoDB仅对文档主键表示限制,因此我们可以在其中存储任何具有一个主键的数据。因此,最自然的解决方案如下:

- partion key 'type' is document type - 'user', 'event' etc
- sort key is uuid

但这与官方文件相矛盾,根据它,更好的是:

- partition key 'id' is just uuid
- sort key is type - 'user', 'event'

但由于关键名称,这与常识相矛盾。 最后,我们可以为用户,事件和新闻创建3个不同的DynamoDB实例,所有这些实例都具有uuid作为partiton键而没有排序键。 哪种解决方案是DynamoDB使用的最佳或常见做法?

2 个答案:

答案 0 :(得分:2)

这是一个主观问题,但我会采取一些措施并给你一些理由。

1)您可以使用“uuid:type”作为主要ID。您不应该使用type作为分区ID的原因是因为您的所有数据都将在每个类型的单个分区上结束。分区是Dynamo和S3如何提供并行化。如果你这样做,你将极大地限制摄取和查询速度。

2)出于定价原因,我个人赞成每种类型的一张桌子。您支付每表读/写容量。使用单个表,您可以更少地跟踪和管理。调整一个表的容量比三个容易。

3)在这种情况下我不会使用排序键。

答案 1 :(得分:1)

确定性陈述需要具体细节,但对数据的含义做出一些假设:

- partion key 'type' is document type - 'user', 'event' etc
- sort key is uuid

以上观点几乎肯定是一个糟糕的设计。最终会出现一些大型分区,从而导致性能问题。另外我建议你最终会对查询进行扫描。

- partition key 'id' is just uuid
- sort key is type - 'user', 'event'

以上想法可能是一个糟糕的设计。排序键不会给您带来任何实际好处。假设您需要单独访问用户或事件等,您最终将执行扫描。

用户,活动等的极有可能的单独表格将是最好的。这些表中的键实际上只取决于您的数据。 UUID可能是一个不错的选择,但它取决于您想要如何查询数据。基于日期的属性,特别是对于事件,通常会产生良好的排序键。

我建议您结帐this answer这是对大致相同问题的更长答案。