1

我在 JBoss AS 5.1 集群上部署了一个 Java 应用程序,它需要缓存大量(> 3 GB)数据。现在服务器集群只有 2 个节点(独立的机器)。以下是具体要求:

  • 两个节点都不应要求将数据加载到缓存中(即,应该有复制或缓存应该驻留在单独的服务器上)
  • 数据不应过期。

    上述两个要求对于应用程序都非常重要。如果在提出建议时牢记这两点,我将不胜感激。 我还应该添加第三个要求:

  • 使用方便

    该应用程序最初使用 Hashmap。我尝试用 JBoss Cache 3.2.1 替换 hashmap,因为它的复制和线程安全特性。但我对 JBoss Cache 的性能并不满意。此外,当我在缓存中加载数据时,几乎完全使用了 8 Gig 的 RAM(其中大部分由缓存条目使用)。

    我想听听那些自己处理过这种缓存场景的人的经验。提前感谢您的时间。

  • 4

    3 回答 3

    2

    您可以尝试使用 GigaSpaces XAP 数据网格是一个复制缓存。它的性能非常高。

    http://www.gigaspaces.com/datagrid

    于 2012-05-20T17:04:08.123 回答
    0

    如果您想要一个提供 Java HashMap 接口并且可以轻松支持千兆字节缓存数据且不会过期的缓存,请查看 Oracle Coherence。这将使用 Coherence “分布式缓存”选项(这是默认配置)。有关详细信息,请参阅:http ://coherence.oracle.com/

    • 松紧带。只需添加节点。自动发现。自动负载平衡。没有数据丢失。没有中断。每次添加一个节点,您都会获得更多的数据容量和更高的吞吐量。
    • 同时使用 RAM 和闪存。透明地。每个 Coherence 节点轻松处理 10 甚至 100 千兆字节(例如,每个物理服务器高达 1 TB 或更多)。
    • 自动高可用性 (HA)。杀死一个进程,没有数据丢失。杀死一个服务器,没有数据丢失。
    • 数据中心持续可用性 (CA)。杀死一个数据中心,没有数据丢失。

    为了全面披露,我在 Oracle 工作。这篇文章中表达的观点和观点是我自己的,并不一定反映我雇主的观点或观点。

    于 2013-08-12T13:45:28.643 回答
    -2

    我之前已经“解决”了这个问题(工作代码,无法显示)......但是,我可以告诉你这么多:

    • 对于大容量,HashMaps 的开销会使用大量内存。
    • 您可以通过使用数组的智能使用替换 java.util.* 类来节省大量内存。
    • 每次分配内存时,您还必须在 GC 中扫描/收集该内存,因此节省内存也可以提高性能。

    尽可能使用数组....

    编辑:显然 Hash Maps 的概念已被遗忘.... HashMap 的 Java 实现是否让人们相信它是唯一的方法?一组结构化的数组,具有哈希函数和二进制排序......所有基本结构...... http://en.wikipedia.org/wiki/Hash_table

    一个要添加键的数组。用于存储值的并行数组,以及用于快速查找键数组的基于 int 的哈希表...

    计算机科学 - 也许是第二年 ;-)

    再次编辑:我曾经在这里的 JDOM 项目中描述过核心概念:https ://github.com/hunterhacker/jdom/blob/master/core/src/java/org/jdom2/StringBin.java

    于 2012-05-19T00:10:41.630 回答