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

时间:2011-08-20 15:34:00

标签: java caching persistent

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

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:6)

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

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

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

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

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

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

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

答案 2 :(得分:2)

我正在研究cache2k,并研究最近的缓存逐出策略,使其成为最快的java缓存,请参阅cache2k benchmarks

现在添加持久性,可在两周内进行预览和测试。我希望它能在五周内保持稳定。当然,cache2k实现并不像EHCache那样成熟,但是,所有发布的内容都在我们自己的应用程序中使用,并在生产环境中得到证明。

更新:"两周"非常乐观,因为整个锁定概念最终需要重写和仔细检查......您可以跟踪github上正在出现的持久性支持