【问题标题】:Best way to share a data structure between different instances of the same java application?在同一个java应用程序的不同实例之间共享数据结构的最佳方式?
【发布时间】:2015-12-01 08:01:07
【问题描述】:

目前,我正在开发一个基于 Spring Boot 的应用程序。其中一个要求是应用程序应该是实时的,并且我需要某种基于InvertedRadixTree 的独特数据结构(不完全是这个,但数据结构正在使用树来回答查询)。我为 crud 操作开发了一个管理 UI。 cruds的数量并没有那么多,基本上都会由OPs员工完成。我开发的数据结构是线程安全的,并由数据库(即 mongodb)同步,因为这是唯一使用此数据库的应用程序,所以我不担心其他应用程序会弄乱数据。我唯一的问题是,如果我们有这个应用程序的多个实例,其中一个在 mongodb 上执行一些 crud 操作;虽然这个实例的数据结构会被更新,但另一个实例不会被更新。我创建了一个调度程序,每 12 小时更新一次数据库中的数据结构,但我正在寻找另一种解决方案,例如在所有实例之间共享数据结构。我非常感谢每一个建议。

编辑:搜索后,我发现更新整个数据结构并不需要太多。我写了一些测试用例,并在 mongodb 中放入了大约一百万条我的班级记录并获取了整个集合。提取和数据结构创建花费了不到一秒钟的时间。所以我最终使用了这种方法,而不是使用一些复杂的方法来同步内存和数据库。

【问题讨论】:

  • 将数据结构声明为静态怎么样???
  • 你可以在数据库更新时收到推送更新:stackoverflow.com/questions/9691316/…,这会阻止你一直轮询它。
  • @HaseebAnser:举例来说,我并不是指“对象”与类。你可以考虑两个不同的服务器/机器/计算机运行相同的程序!
  • @PaulK。谢谢你。这不是我要找的。不过这个想法很有趣。
  • @HaseebAnser:就像我们有两个不同的服务器,每个服务器都有自己的 tomcat 服务器并运行相同的 war 文件。

标签: java spring spring-boot scheduling in-memory


【解决方案1】:

其中一个建议是您可以使用共享数据库。每次有任何APP更新时,都应该在数据库中更新。每次您必须使用数据时,您都必须从数据库中加载新数据。据我所知,这是最简单的方法想想..!!!

【讨论】:

    【解决方案2】:

    我会使用类似 redis http://redis.io/topics/pubsub 的东西,并监听为进行更改的实例触发的事件,如果数据不经常更新,则在每个实例上使用一些本地缓存

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2011-08-07
      相关资源
      最近更新 更多