Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器集群的缓存方法_Java_Caching_Jboss_Memcached_Distributed Caching - Fatal编程技术网

Java 服务器集群的缓存方法

Java 服务器集群的缓存方法,java,caching,jboss,memcached,distributed-caching,Java,Caching,Jboss,Memcached,Distributed Caching,我在JBossAS 5.1集群上部署了一个Java应用程序,它需要缓存大量(>3 GB)的数据。 现在服务器集群只有2个节点(单独的机器)。 具体要求如下: 两个节点都不应要求将数据加载到缓存中(即,应存在复制或缓存应位于单独的服务器上) 数据永远不会过期 以上两个要求对应用程序都非常重要。如果能在考虑这两方面的情况下提出建议,我将不胜感激。 我还要补充第三个要求: 易用性 应用程序最初使用Hashmap。我尝试用JBoss Cache 3.2.1替换hashmap,以实现其复制和线程安全特性。

我在JBossAS 5.1集群上部署了一个Java应用程序,它需要缓存大量(>3 GB)的数据。 现在服务器集群只有2个节点(单独的机器)。 具体要求如下:
  • 两个节点都不应要求将数据加载到缓存中(即,应存在复制或缓存应位于单独的服务器上)
  • 数据永远不会过期

    以上两个要求对应用程序都非常重要。如果能在考虑这两方面的情况下提出建议,我将不胜感激。 我还要补充第三个要求:
  • 易用性

    应用程序最初使用Hashmap。我尝试用JBoss Cache 3.2.1替换hashmap,以实现其复制和线程安全特性。但我对JBoss缓存的性能不是很满意。此外,当我将数据加载到缓存中时,8 Gig的RAM几乎全部被使用(大部分由缓存项使用)


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

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

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

    编辑:显然散列映射的概念已经被遗忘了。。。。HashMap的Java实现是否让人们相信这是唯一的方法?具有哈希函数和二进制排序的结构化数组集。。。。所有基本结构

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

    计算机科学-可能是第二年;-)


    再次编辑:我曾经在JDOM项目中描述过核心概念:

    您可以尝试使用GigaSpaces XAP datagrid作为复制缓存。它的性能非常好


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

    • 弹性的。只需添加节点。自动发现。自动负载平衡。没有数据丢失。不要打扰。每次添加节点时,都会获得更多的数据容量和吞吐量
    • 使用RAM和闪存。透明的。每个一致性节点可以轻松处理10s甚至100s的千兆字节(例如,每个物理服务器最多可处理1 TB或更多)
    • 自动高可用性(HA)。终止进程,不丢失数据。杀死服务器,不丢失数据
    • 数据中心连续可用性(CA)。杀死一个数据中心,没有数据丢失

    为了充分披露,我在甲骨文公司工作。这篇文章中表达的意见和观点是我自己的,不一定反映我雇主的意见或观点。

    我看到人们在看这个问题,但我还没有答案/建议。我不是要一个完整的解决方案,也许是一个好的建议。请告诉我提供更多细节是否有助于您的建议。您为什么不想使用memcached?@Perception:我对memcached没有太多经验,但负载增加时,memcached是否会根据LRU(或任何其他算法)使缓存中的数据过期?我试图避免这种情况,因为我需要一个不会自动使数据过期的持久存储。如果您认为memcached可以满足我的所有要求,请告诉我。在阅读了下面的答案后,我认为我也需要在上面的列表中添加“易用性”:)感谢您的提示,但根据应用程序设计,我需要一个键值存储,它支持复制到集群中的所有节点。性能和内存占用是一个大问题。我现在正在看Redis。将用我的发现更新此线程。关于使用数组,您有一个很好的观点。同样,我的需求的第一点是,我需要将缓存复制到集群中的所有节点。老实说,目前我并不真正担心Hashmap的性能。