我正在使用AWS DynamoDB存储Web应用程序的用户会话记录。
每个记录的格式如下:
uuid timestamp type
其中
uuid
是用户ID和分区键timestamp
是Unix时间戳和排序键type
是“已连接”或“已断开连接” 在我们的管理员仪表板中,我想显示一个表,其中包含最新的XX个会话,而最新的会话在前。
问题::如何使用AWS DynamoDB以排序的顺序并定义了限制来查询全部 sessions
?
使用Query指定一个partition key
Scan不会按排序顺序返回结果
我所看到的所有解决方案似乎都有些“ hacky”,而且我怀疑我误解了一些东西,因为这种用例一定很常见。
我知道此黑客解决方案:
我不是DynamoDB的专家,但是此解决方案似乎是一种破解,并且与DynamoDB架构相反。
答案 0 :(得分:1)
您有很多选择可以在dynamo中实现此目的,所有这些选择似乎都是很棘手的,因为您的仪表板用例不是dynamoDB的优化之选。
以下是一些选择:
存储另一个分区键为“ activesessions”的记录。这个 记录包含活动会话的分区键数组。一条dynamo记录可以存储400kb的数据,因此您可以在此一条记录中存储数千个活动会话密钥(并在需要时分页) 你需要更多)。缺点是您必须在添加和删除会话时维护此“ activesessions”记录。
扫描-您说记录没有排序,但是从dynamo检索后,可以在代码中对它们进行排序。这实际上是dynamo对过滤器表达式所做的:
已读取各项之后应用FilterExpression; 过滤过程不会消耗任何额外的读取容量 单位。
扫描的缺点-无法缩放,并且使用大量读取容量。如果您保证总会话数很少(最多几千次),则只会使用此选项。
您建议的选项将起作用,但是您仍应尝试为记录提供尽可能唯一的密钥。与其仅仅使用相同的分区键来存储它们,不如通过使用诸如“ samevalue-todaysdate”之类的格式使其更具唯一性。这样,您的查询将能够在特定的一天中找到会话,这比在每个会话中进行搜索要快得多。
请勿使用dynamodb-使用AWS RDS:mySQL,SQL Server等。