存储和获取对象列表的有效方法

Posted

技术标签:

【中文标题】存储和获取对象列表的有效方法【英文标题】:Efficient way to store and fetch a list of objects 【发布时间】:2019-10-09 11:59:00 【问题描述】:

我在 Spring Boot 中有一个处理自定义请求的应用程序。 并且存在每 30 秒运行一次的计划作业,它从 db 获取对象列表并执行某些操作。 我吓坏了,以为我需要每 30 秒查询一次数据库,而我可以将这些对象保存在数据结构中。 有其他 API 可以添加、删除或编辑这些对象的属性,因此,我需要处理这些对象的更新 在数据结构中也是如此。我应该采用哪种方法?

对象的大小可以在 100 - 10000 之间。我使用 Postgres 作为我的数据库。

【问题讨论】:

试着看看这个并在内存数据库中找到一些好的:***.com/questions/439958/… 如果您将 ORM 集成到您的项目中,这将是一项简单的任务。那么你可以使用二级缓存。 您的查询有多大?当您考虑到数据库每秒执行数千个事务时,担心每 30 秒会命中一次数据库听起来有些夸张。 这是一个简单的选择语句,类似于“SELECT distinct(name, id) from table”。可能我只是在这里偏执 【参考方案1】:

我认为您不需要将数据保存到自定义数据结构中,相反,您可以查看 Hibernate 的实体和查询的二级缓存。

通过适当的设置,Hibernate 将缓存您正在使用的数据和查询。

There 是 Baeldung 上关于二级缓存的好文章,可以帮助您入门。

【讨论】:

我的应用程序中没有使用 Hibernate,而是使用 JDBCTemplate。 对不起,我假设在 Spring Boot 中使用 Hibernate,但我认为无论如何在 EHCache 依赖项中都有 JDBC 缓存的实现 - 你可以看看,它应该在类似的时尚。【参考方案2】:

我认为您应该编写一个数据库侦听器来侦听 DB 记录更改事件,然后获取您选择的数据结构中的记录,然后缓存要使用的记录以防 DB 更改事件未触发

这是一个很好的article,关于如何在 java 中实现 db listener

【讨论】:

以上是关于存储和获取对象列表的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Web 应用程序中所有 HttpSession 对象的列表?

获取运行命令时修改的文件列表的有效方法是啥?

当您在 LAMP 服务器上拥有数百万用户时,存储和获取图像的最快和最有效的方法是啥?

从 Django Queryset 获取值列表的最有效方法

如何获取存储在列表中的对象的属性

使用存储过程获取应用用户角色、有效用户登录名