Java 使用hashmap还是H2数据库?

Java 使用hashmap还是H2数据库?,java,jakarta-ee,h2,Java,Jakarta Ee,H2,我正在开发一个web应用程序,其中需要存储会话、用户消息等。我正在考虑使用HashMap或H2数据库 请让我知道哪种方法在性能和内存利用率方面更好。该网站必须支持10000名用户 谢谢。像往常一样,如果您知道这是一个问题,我会担心性能 10000个用户并不是很多可以保存在内存中的数据。我可能会从一个标准Java集合开始,当您预测它将给您带来痛苦时,再看看它的性能 抽象出对该Java集合的访问权限,这样当您替换它时,所需的重构是本地化的(并且可能使其可配置,这样您就可以轻松地使用不同的解决方案(H

我正在开发一个web应用程序,其中需要存储会话、用户消息等。我正在考虑使用HashMap或H2数据库

请让我知道哪种方法在性能和内存利用率方面更好。该网站必须支持10000名用户


谢谢。

像往常一样,如果您知道这是一个问题,我会担心性能

10000个用户并不是很多可以保存在内存中的数据。我可能会从一个标准Java集合开始,当您预测它将给您带来痛苦时,再看看它的性能


抽象出对该Java集合的访问权限,这样当您替换它时,所需的重构是本地化的(并且可能使其可配置,这样您就可以轻松地使用不同的解决方案(H2、Derby、Oracle等)执行性能测试之前/之后)

如果您的会话对象不是太大的话(应该是这样的),不需要将它们保存在数据库中

如果只需要几行代码,那么使用数据库会增加很多复杂性。因此,不要使用数据库,只需将它们存储在LIGHT内存结构中(例如HashMap)


如果您不想在用户长时间离开时将会话保留在内存中,则可能需要实现一种清理HashMap的方法。有许多解决方案可用(最简单的方法是让后台线程不时删除太旧的会话)。请注意,清理哈希映射通常比清理数据库更容易。

H2和哈希映射都会将数据保存在内存中(因此从空间角度来看,它们几乎是相同的)

如果查找像键值一样简单,那么在哈希映射中查找会更快

如果必须进行比较,如键<100等,请使用H2


事实上,10K用户信息并不是一个很高的数字。

如果您不需要保存用户消息,请使用集合。但是如果消息需要保存,请确保使用数据库。因为重新启动后,您会丢失所有数据。

使用
HashMap
存储对象的问题是,当您的站点对于一台服务器来说变得太大,需要群集才能随需求扩展。然后,您将面临如何在不同服务器上同步
HashMap
实例的问题

一种可能的替代方法是使用键值存储,因为您不需要数据库的结构,甚至不需要使用分布式缓存之类的功能