全局二级索引vs非规范化



我有一个这样的消息表:

From  |  To   |         timestamp       |      Message
------|-------|-------------------------|------------------
john  | Mark  | 2014-04-28T07:53:29.000Z|"Some message1"
john  | Mark  | 2014-04-28T08:53:29.000Z|"Some message2"
john  | Mary  | 2014-04-28T09:53:29.000Z|"Some message3"
mary  | Kevin | 2014-04-28T07:53:29.000Z|"Some message4"
jane  | John  | 2014-04-28T07:53:29.000Z|"Some message5"

我需要能够选择所有消息FROM [user]按日期(最新的第一个)排序,这将导致分页(一次10条消息)。

我还需要能够选择发送的所有消息[用户]再次按日期(最新的第一个)排序,这将导致分页(一次10条消息)。

我首先想到的是创建两个表:

FROM table (FROM = PK, Timestamp = Range)和TO table (TO= PK, Timestamp = Range).

创建消息时,它需要同时发送到FROM和to表(数据复制)。然后,如果我需要从用户获取消息,我可以查询FROM表,当我需要获取发送给用户的消息时,我可以查询to表。

我的第二个想法是使用全局二级索引。据我所知,对全局二级索引没有限制。这样,我就可以让表具有PK = FROM和RANGE = Timestamp。然后,我将创建一个全局二级索引PK = TO和RANGE = Timestamp。这样做的唯一好处是我不会有重复的数据。如果我要使用全局二级索引,而不是在性能、限制或其他方面对表进行规范化,那么有什么缺点或"注意事项"吗?

对于您的用例,全局二级索引是非常自然的选择。成本将保持不变,而您节省了复制数据的时间。

简短地说——没有,没有具体的性能或限制问题。全局二级索引的行为就像它们是独立的表一样,例如,它们有自己的读/写吞吐量。

查看此文档以获取详细信息:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html GSI.Writes

最新更新