Amazon web services 用于分页和排序DynamoDB结果集的选项?

Amazon web services 用于分页和排序DynamoDB结果集的选项?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,我正在着手一个新项目,将使用DynamoDB作为主要数据源。它所做的很多工作都能完美地满足需求,只有几个例外 这些是UI的排序和分页需求。用户可以按8-10个不同列中的任意位置对数据进行排序,20-30k+行的结果集应该分页 从我对DynamoDB的了解可以看出,按照所有这些列进行排序的唯一方法是通过各种附加索引公开许多排序键,这似乎是对这些概念的滥用。如果我不打算用DynamoDb查询对数据进行排序,我也不能在那里分页 所以我的问题是,一旦我有了数据分页和排序,最快的方法是什么?我是否应该将结

我正在着手一个新项目,将使用DynamoDB作为主要数据源。它所做的很多工作都能完美地满足需求,只有几个例外

这些是UI的排序和分页需求。用户可以按8-10个不同列中的任意位置对数据进行排序,20-30k+行的结果集应该分页

从我对DynamoDB的了解可以看出,按照所有这些列进行排序的唯一方法是通过各种附加索引公开许多排序键,这似乎是对这些概念的滥用。如果我不打算用DynamoDb查询对数据进行排序,我也不能在那里分页


所以我的问题是,一旦我有了数据分页和排序,最快的方法是什么?我是否应该将结果集移动到Aurora中,然后使用SQL进行排序和分页?我曾考虑过导出到S3,然后利用类似Athena的东西进行分页和排序,但该工具似乎真的适合于比这大得多的数据集。其他选项有哪些?

一个选项是复制数据并为每个排序选项存储一次,每个版本的记录在排序键中有不同的数据。如果您认为最终的一致性可能会延迟一点,那么您可以通过一个lambda来实现这一点,该lambda从DynamoDB流中读取数据,并在插入/更新/删除主记录时插入/更新/删除已排序的记录。

一个选项是复制数据,并为每个排序选项存储一次数据,每个版本的记录在排序键中具有不同的数据。如果您对最终的一致性(可能会延迟一点)感到满意,您可以通过使用lambda来完成这一点,该lambda从DynamoDB流中读取数据,并在插入/更新/删除主记录时插入/更新/删除已排序的记录。

排序、分页和返回20-30K记录不是Dynamo的强项

为什么不首先将数据存储在Aurora中

根据数据,Elasticsearch可能是更好的选择。甚至可以看看红移

编辑
如果你以前没见过这个。。。
排序、分页和返回20-30K记录不是迪纳摩的强项

为什么不首先将数据存储在Aurora中

根据数据,Elasticsearch可能是更好的选择。甚至可以看看红移

编辑
如果你以前没见过这个。。。

我真的很喜欢这个主意。是否有理由使用流并将其写回lambda,而不仅仅是使用不同的排序键值多次执行初始插入/更新/删除操作?从我目前有限的理解来看,一开始只做更多的写操作似乎并不是很大的资源负担。它可以使管理只管理主记录的代码变得更容易,并且消除了处理事务(有限的事务)的需要。在简单的情况下,您可以同时完成所有工作,但我更喜欢一个更健壮的解决方案。基于流的方法意味着您不必在任何有修改表中黄金数据的客户机代码的地方复制创建副本的逻辑。我真的很喜欢这个想法。是否有理由使用流并将其写回lambda,而不仅仅是使用不同的排序键值多次执行初始插入/更新/删除操作?从我目前有限的理解来看,一开始只做更多的写操作似乎并不是很大的资源负担。它可以使管理只管理主记录的代码变得更容易,并且消除了处理事务(有限的事务)的需要。在简单的情况下,您可以同时完成这一切,但我更喜欢一个更健壮的解决方案。基于流的方法意味着您不必在任何有修改表中黄金数据的客户端代码的地方复制创建副本的逻辑。目前,一致的写/更新性能是DynamoDb的主要吸引力,但我肯定也考虑过极光。挂钩DynamoDb流将数据推送到Elasticsearch非常有意义。我也会研究一下。你没有提到数据,但如果RDS兼容,并且你已经观看了极光的深度潜水,我强烈建议你这样做。令人印象深刻。目前,一致的写入/更新性能是DynamoDb的主要吸引力,但我肯定也考虑过Aurora。挂钩DynamoDb流将数据推送到Elasticsearch非常有意义。我也会研究一下。你没有提到数据,但如果RDS兼容,并且你已经观看了极光的深度潜水,我强烈建议你这样做。令人印象深刻。