【问题标题】: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 作为我的数据库。

【问题讨论】:

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

标签: java database spring-boot data-structures postgresql-9.4


【解决方案1】:

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

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

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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-19
    • 2012-12-24
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2015-08-11
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多