首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存添加到(DynamoDB)的大型数据的最佳方法

缓存添加到(DynamoDB)的大型数据的最佳方法
EN

Stack Overflow用户
提问于 2021-03-25 23:08:18
回答 1查看 483关注 0票数 0

我目前正在处理大量存储在DynamoDB中的数据。一旦数据进入数据库,它就不会改变,但是新的数据会持续地流入数据库。我的问题是如何执行数据缓存(如果可能的话使用DAX )来限制我必须直接查询数据库的数据量。

例如,如果我希望从上午10点到11:00之间的数据,那么我可以使用以下参数进行查询:

start_time =上午10:00,end_time = 11:00

来自此查询的响应将在DAX中缓存,以供以后使用。我的问题是,当我在上午10:00到下午1:00之间获取数据时,我必须查询缓存中已经存在的数据(这是因为缓存是基于参数的,而且我有新的参数)。

我的第一个想法是将数据缓存在小部分中,只需进行许多查询。例如:

请求10-10:15 AM数据和缓存,然后请求10 :15-10:30 AM数据,然后缓存等等。通过这样做,我可以进行许多较小的查询,但缓存中不会有重叠的数据。这是最好的方法还是我应该缓存重叠的数据。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 03:24:55

如果我理解正确的话:

代码语言:javascript
复制
start_time = 10:00 AM, end_time = 11:00 AM ( Cache has no data, hits DynamoDB )
start_time = 10:00 AM, end_time = 11:00 AM ( Cache has this data, doesn't hit DynamoDB )
start_time = 10:00 AM, end_time = 10:30 AM ( Difference in cache keys, hits DynamoDB )

基本上,您可以在缓存中拥有一组完整的数据,但是除非您使用相同的缓存键(这有助于缓存命中),否则缓存将永远不会明智地返回来自Cache的完整数据的“子集”。

DynamoDB DAX项缓存

DyanmoDB DAX带来了Item Cache,其中存储单个项并从DAX返回。然而,Item Cache仅限于GetItemBatchGetItem

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.concepts.html#DAX.concepts.item-cache

分段DDB查询

如果DynamoDB DAX是不可能的,或者需要QueryScan操作。然后,下一个更好的最小侵入性技术是将DDB查询分段/分区为“较小的”查询,这样就会产生更多的缓存命中。

例如:

代码语言:javascript
复制
start_time = 10:00 AM, end_time = 10:15 AM
start_time = 10:15 AM, end_time = 10:30 AM
start_time = 10:30 AM, end_time = 10:45 AM

很少有好的第三方应用程序库可以用于划分查询键,并且可以选择从15 minute blocks1 minute blocks甚至seconds block的粒度,这适合您的性能需求。

但是这种技术并不是没有Cons的,显然它现在需要考虑的额外的跳数/查询数。

应用ORM

解决像这样的问题是应用程序ORMs真正擅长的,例如在Java开发中的Hibernate (但我最后一次检查,Hibernate还没有完全支持DynamoDB,尽管扩展和构建自定义策略是可能的)

您可以检查应用程序ORM是否支持DynamoDB

https://www.baeldung.com/hibernate-second-level-cache

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66808815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档