【问题标题】:Torquebox Infinispan Cache - Too many open filesTorquebox Infinispan 缓存 - 打开的文件太多
【发布时间】:2014-04-22 01:04:35
【问题描述】:

我环顾四周,显然 Infinispan 在将数据保存到 FileStore 时可以存储的密钥数量有限制。我收到“打开的文件太多”异常。

我喜欢 Torquebox 的想法,并且急于缩小堆栈并只使用 Infinispan 而不是 Redis。我有一个需要缓存数据分配的应用程序。查询的计算量很大,需要每天重新计算(电话和呼叫中心代理的其他生产力指标)。

虽然我知道如果我至少运行一个应用程序,缓存会持续存在,但我没有运行集群。我宁愿保留缓存。有没有人遇到过这个问题并有解决方法?

【问题讨论】:

    标签: ruby caching jboss7.x infinispan torquebox


    【解决方案1】:

    我还在实时应用程序中使用infinispan 缓存。

    基本上,我们将数据库查询及其结果存储在缓存中,用于存储不可更新且数据量较小的表。

    有两种设计方法:

    • 以查询为键,以数据为值

      当有这么多不同的查询放入其中时,会导致缓存中的条目过多。

    • 使用xyz 作为键,Map 作为值(Map 包含查询作为键,其数据作为值)

      每当需要从此缓存(我称之为查询缓存)中获取数据时,它会导致缓存中的单个条目首先使用键 xyz 检索 Map,然后在 Map 本身中找到查询。

    我们正在使用第二种方法。

    【讨论】:

    • 有趣。我只是缓存了一个预定的早晨作业,该作业使用命名空间键和值作为 json 序列化字符串来输入键/值。例如key :"phones:123456:mar-w1-2014" value [{employeeid:123456,callshandled:10,handletime:3600,week:'MAR-W1-2014'}..]
    • 对不起,我没听懂。有什么问题?
    【解决方案2】:

    是的,Infinispan 的 FileCacheStore 曾经存在打开过多文件的问题。 5.3.x 中的新 SingleFileStore 解决了这个问题,但 Torquebox 似乎仍在使用 Infinispan 5.1.x (https://github.com/torquebox/torquebox/blob/master/pom.xml#L277)。

    【讨论】:

    • 谢谢,丹!我使用的是 Torquebox 的 JBoss 灌输,而不是包装器。猜猜我可以只安装 JBoss complete,它应该具有当前版本的 Infinispan,并改用 Torquebox 包装器。尽管它生成了这么多文件,但您知道这对我来说很奇怪。猜猜我只是习惯了Redis。猜猜这个限制被解除了,但它仍然会生成那么多文件?我想保留大量的密钥缓存。感谢您的回复!
    • 嗯,如果您有很多条目,即使使用新的 SingleFileStore,您也可能会遇到一些问题,因为它将所有内容都存储在一个文件中,但会将所有键保存在内存中。当您无法将所有键都保存在内存中时,我们推荐的解决方案是使用 LevelDB 存储(也仅在 5.3.x 中可用)。
    • 很高兴知道。我是一个 Ruby 人,因此是 torquebox api 的奴隶。我将进行房屋清洁工作以删除我不需要的密钥,或者只是使计时器上的缓存无效。 Othewrise 我将不得不用一些 j2ee 刷新自己并弄脏我的手:)
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 2012-05-09
    • 2011-07-18
    • 2019-10-30
    • 2011-01-03
    • 2011-08-05
    • 2014-03-31
    相关资源
    最近更新 更多