2011-08-20 131 views
4

我需要真正快速和持久的缓存为我的网络爬虫。它不需要像Java中的ConcurrentSkipListSet一样快,但绝对不能是具有基于散列索引的表的MySQL,我尝试过。在1m +的记录之后,它需要80%的处理器时间。

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

快速持久缓存是否有很好的解决方案?

+0

当然可以留在的ConcurrentSkipListSet比赛作为1级,即时寻找什么是2级的东西 – tomasb

+0

卡桑德拉怎么样?许多属性都适合我的场景。它快吗? – tomasb

回答

6

尝试EhCache。这是一个主要内存缓存,带有用于溢出和持久化到磁盘后备存储的选项。多年来,仍然积极发展,并且非常成熟。

+0

谢谢,生病了试试看,可惜BigMemory不是免费的 – tomasb

+1

我最近开始看EHCache,我猜BigMemory不是持久的。 – Gevorg

+0

我想也是这样,但是它保留了堆外存储的GC,这很好,jvm可以保持较小以便GC运行更快 – tomasb

5

我是Terracotta(不是工程师)的员工,但我想增加一些清晰度,无论我的技能如何,都会让那些已经咨询过本文的人获得答案。

是的,Ehcache在缓存方面是一个很好的选择,在全球范围内部署超过500,000次,常用于带有分布式缓存的小型群集。如果你的应用程序是基于Java的,Terracotta将可以提供与“BigData”相比最大的性能提升,因为它使应用程序在内存速度上具有堆栈优势。

  1. 是的,BigMemory Go是免费的。它的32GB免费增值服务,不要与开源混淆。它不能用于分布式缓存,该选项与BigMemory Max和gb限制相比要少得多。

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

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

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

我提前道歉,如果我通过张贴在打破道德守则这里或那里有任何暗示的偏见。希望这些信息能够增加一些清晰度,并阐明关于兵马俑的常见问题。

+0

“是的,BigMemory Go是免费的。”...我所看到的全部是“免费试用版”。 –

3

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

持久性现在被添加,并将在两周内提供预览和测试。我预计它在五周内会非常稳定。当然,cache2k的实现并不像EHCache那样成熟,然而,所有发布的内容都被用在我们自己的应用程序中,并在生产环境中证明自己。

更新:“两个星期”很乐观,因为整个锁定概念最终需要重写,细致的检查...你可以跟踪持久性支持目前出现在github

相关问题