我正在开发一个 Web 应用程序,我需要在其中存储会话、用户消息等。我正在考虑使用 HashMap 或 H2 数据库。
请让我知道在性能和内存利用率方面哪种方法更好。该网站必须支持 10,000 个用户。
谢谢。
我正在开发一个 Web 应用程序,我需要在其中存储会话、用户消息等。我正在考虑使用 HashMap 或 H2 数据库。
请让我知道在性能和内存利用率方面哪种方法更好。该网站必须支持 10,000 个用户。
谢谢。
与这些问题一样,当您知道这是一个问题时,我会担心性能。
10000 个用户在内存中存储的数据并不多。我可能会从一个标准的 Java 集合开始,并在您预测它会导致您悲伤时查看性能。
抽象出对这个 Java 集合的访问,这样当您替换它时,所需的重构是本地化的(并且可能使其可配置,以便您可以使用不同的解决方案(H2、Derby、Oracle 等)轻松地在性能测试之前/之后执行。 ETC。)
如果您的会话对象不是太大(应该是这种情况),则无需将它们保存在数据库中。
在您可以从几行代码开始的情况下,为此使用数据库会增加很多复杂性。所以不要使用数据库,只需将它们存储在一个轻量级的内存结构中(例如 HashMap)。
如果您不想在用户长时间离开时将会话保留在内存中,则可能需要实现一种方法来清理 HashMap。有许多解决方案可用(最简单的方法就是让后台线程不时删除太旧的会话)。请注意,清理哈希图通常比清理数据库更容易。
H2 和 Hash Map 都将数据保存在内存中(因此从空间的角度来看,它们几乎相同)。
如果查找像 KEY VALUE 这样简单,那么在 Hash Map 中查找会更快。
如果您必须进行 KEY < 100 等比较,请使用 H2。
事实上,10K 用户信息并不是一个很高的数字。
如果您不需要保存用户消息 - 使用集合。但如果要保存消息,请务必使用数据库。因为重启后你丢失了所有数据。
使用 aHashMap
来存储对象的问题在于,当您的站点对于一台服务器来说太大并且需要集群化以便随需求扩展时,您会遇到问题。然后,您将面临如何同步HashMap
不同服务器上的实例的问题。
一种可能的替代方法是使用像Redis这样的键值存储,因为您不需要数据库的结构,甚至不需要像EHCache这样的分布式缓存功能