Spring Data DynamoDB分页问题

时间:2019-03-05 23:28:24

标签: spring spring-data-jpa spring-data amazon-dynamodb

Spring数据dynamoDB没有使用Page对象从dynamoDB获取结果。 Spring数据将数据加载到内存中,然后处理其中的页面并提供所需的页面结果。

这里是未解决的问题: https://github.com/derjust/spring-data-dynamodb/issues/232

DynamoDB不支持访问随机页面结果。它只能提供顺序访问。

尽管我需要分页,但由于上述原因,我无法使用Spring数据,因为我不知道Spring从dynamoDB加载到内存中的数据量(KB / MB数)。一次加载的数据越多,dynamoDB将使用更多的RCU。

我需要有关 Spring将多少数据读入内存的信息?这样一来,我想重新评估是否要使用Spring数据。

谢谢。

2 个答案:

答案 0 :(得分:0)

这实际上取决于DynamoDB映射器配置。据我所知,对查询或扫描的所有DynamoDBMapper结果进行了分页。请参见以下摘录:

“ DynamoDBMapperConfig.PaginationLoadingStrategy枚举值-控制映射器实例如何处理数据的分页列表,例如查询或扫描的结果:

LAZY_LOADING-映射器实例在可能的情况下加载数据,并将所有加载的结果保存在内存中。

EAGER_LOADING-列表初始化后,映射器实例就会加载数据。

ITERATION_ONLY-您只能使用Iterator从列表中读取。在迭代过程中,该列表将清除所有先前的结果,然后再加载下一页,以便该列表将已加载结果的最多一页保留在内存中。这也意味着该列表只能被迭代一次。建议在处理大型项目时使用此策略,以减少内存开销。

如果您未为映射器实例指定分页加载策略,则默认值为LAZY_LOADING。“

在此处查看完整的文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptionalConfig.html

答案 1 :(得分:0)

我已经探索了有关DynamoDB和Spring数据的更多细节。

当请求分页以获取Spring-data-dynamoBD时(假设您的策略是以下策略之一:LAZY_LOADING,ITERATION_ONLY):

  • Spring将一页数据加载到内存中
  • 页面大小为1MB。
  • 对于LAZY_LOADING策略,它首先加载1MB的数据,如果该数据没有您请求的记录页面,则对另外1MB的记录进行春季更新请求,依此类推...但是,之前加载的记录进入内存并没有被丢弃。
  • 在ITERATION_ONLY中,与LAZY_LOADING不同,它会从内存中丢弃先前加载的记录。这样,您就不会加载内存并陷入性能问题。

知道Spring数据加载了1 MB数据有助于我前进。