使用hashmap还是H2数据库?

时间:2012-08-21 09:38:16

标签: java java-ee h2

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

请告诉我哪种方法在性能和内存利用方面更好。该网站必须支持10,000名用户。

感谢。

5 个答案:

答案 0 :(得分:2)

与往常一样,当我知道这是一个问题时,我会担心表现。

10000个用户不是要在内存中保存的大量数据。我可能会从标准的Java集合开始,当你预测它会让你感到悲伤时,看一下性能。

摘要对此Java集合的访问,以便在您替换它时,所需的重构是本地化的(并且可能使其可配置,以便您可以在使用您的性能测试之前/之后轻松执行不同的解决方案-H2,Derby,Oracle等等。)

答案 1 :(得分:1)

如果您的会话对象不是太大(应该是这种情况),则无需将它们保存在数据库中。

在您开始使用几行代码的情况下,使用数据库会增加很多复杂性。所以不要使用数据库,只需将它们存储在一个内存结构(例如HashMap)中。

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

答案 2 :(得分:0)

H2和Hash Map都会将数据保存在内存中(所以从空间的角度来看它们几乎是一样的)。

如果查找起来像KEY VALUE一样简单,那么在Hash Map中查找会更快。

如果你必须进行比较,例如KEY< 100等使用H2。

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

答案 3 :(得分:0)

如果您不需要保存用户消息 - 请使用集合。但是如果要保存消息,请务必使用数据库。因为重启后你丢失了所有数据。

答案 4 :(得分:0)

使用HashMap存储对象的问题是,当您的网站对于一台服务器来说太大而需要进行群集以便按需扩展时,您会遇到问题。然后,您将面临如何在不同服务器上同步HashMap实例的问题。

一种可能的替代方法是使用像Redis这样的键值存储,因为您不需要数据库的结构,甚至不需要像EHCache