为什么使用数据库而不是单例 Bean 字段



我的用例是一个实时的Spring MVC应用程序,它处理少量快速"搅动"的非关键数据。数据由大约 20 个键值字符串对组成。它按计划从外部 API 拉入,可由与 Web 应用交互的最终用户修改,并用于按计划在 POST 中向另一个外部 API 生成参数。

这可能非常明显,也许太明显了,以至于我在任何地方都找不到答案,但基本上为什么我要将数据保存在数据库中,而不是使用具有线程安全字段(如 ConcurrentHashMap)的专用单例类,然后将其注入到任何需要它的@Services中?我最初的感觉是,像这样的类甚至比内存中的数据库允许更快的读/写,但我看到的每个示例都依赖于"适当的"DB:

@Repository
public class DataStore{
  private Map data = new ConcurrentHashMap<String, String>();
  //...getters and setters etc..
}

感谢您的任何想法!

您可以使用ConcurrentMap将键/值对存储在内存中,没有任何问题。但是"适当的"数据库主要为您提供持久性,当您重新启动应用程序时,数据将仍然存在。DB还为您提供了原子性,而Map本身没有(但是可以通过简单的锁定来添加)。

这基本上取决于你想要它的可靠性。番石榴缓存可能也值得考虑。请注意,此解决方案无法扩展 - 您将无法部署多个实例,因为每个实例都有隔离的"数据存储"单一实例。你也可以想到memcached或类似的东西。

最新更新