对于快速持久缓存,是否有任何已知的解决方案?

tom*_*asb 5 java caching persistent

我需要为我的网络抓取工具提供快速且持久的缓存.它不需要像Java中的ConcurrentSkipListSet一样快,但绝对不能使用基于哈希索引的表,我尝试过.在1m +记录之后,它需要80%的处理器时间.

有没有人知道或听说过这种情况有用的东西?
谢谢你的任何提示.

ska*_*man 6

试试EhCache.它主要是内存缓存,具有磁盘后备存储的溢出和持久性选项.已经存在多年,仍然积极发展,并且非常成熟.


小智 6

我是Terracotta的一名员工(不是工程师),但我想要增加一些清晰度,无论我的技能如何,都会使那些为这个帖子提供咨询的人有所帮助.

是的,Ehcache在缓存方面是一个很好用的选项,在国际上有超过500,000个部署,并且通常用于具有分布式缓存的小型集群.如果你的应用程序是基于Java的,那么Terracotta可以说是"BigData"提供了最大的性能提升,因为它为应用程序提供了内存速度和堆优势.

  1. 是的,BigMemory Go是免费的.它是一个32GB的免费增值产品,不要与开源混淆.它不能在分布式缓存中使用,该选项与BigMemory Max和gb限制相比要少得多.

  2. BigMemory持久化到磁盘.Terracotta服务器阵列(L2)与磁盘通信,以确保即使在灾难性电源故障时数据也不会丢失.兵马俑具有类似酸的特性,具有99.999%的数据耐久性.*Terracotta服务器阵列的这个概念通常会引起很多混乱,请参阅http://terracotta.org/documentation/terracotta-server-array/server-arrays以获取更多信息.

  3. BigMemory是一个非堆数据存储,完全不含垃圾收集.这是通过字节代码缓冲区完成的,并且此数据存储由自动资源控制主动管理.根据您的要求决定(即您想要在缓存中需要多少个对象,无论您想要立即或最终的吞吐量,对象的生存时间等),自动资源控制将为您完成此工作.这意味着没有GC,堆大小受服务器可用内存的限制,最重要的是,不需要调整.

  4. 知道你需要多大的缓存是猜测和检查方法,每个应用程序都是唯一的,因此我们无法自信地估计需要将多少数据放入内存.我怀疑任何供应商告诉你需要将"n"GB放入缓存以达到xyz的SLA ...

如果我在这里张贴道德规范或者有任何隐含的偏见,我提前道歉.希望这些信息能够增加一些清晰度,并对有关兵马俑的常见问题有所了解.