Oracle Coherence快速完成空集群

时间:2014-06-24 07:27:59

标签: oracle-coherence

我遇到了缓存群集问题,无法清空所有缓存数据存储。

此群集有89个缓存存储,持续时间超过40分钟,可以完全卸载数据。

我正在使用此功能:

public void deleteAll() {
    try {
        getCache().clear();
    } catch (Exception e) {
        log.error("Error unloading cache",getCache().getCacheName());
    }
}

getCache方法检索CacheFactory的NamedCache。

public NamedCache getCache() {
    if (cache == null) {
        cache = com.tangosol.net.CacheFactory.getCache(this.idCacheFisica);
    }

    return cache;
}

有没有人找到其他方法更快地完成这项工作?

提前谢谢你,

2 个答案:

答案 0 :(得分:2)

很奇怪,这需要很长时间,但说实话,致电clear并不常见。

您可以尝试使用NamedCache.destroyCacheFactory.destroy(NamedCache)销毁缓存。

唯一的问题是它会使缓存中可能存在的任何引用无效,这需要通过另一个CacheFactory.getCache调用来重新获取。

答案 1 :(得分:0)

通常,像clear()这样的“批量操作”调用将作为批量操作一直传回支持映射,但在某些时候(服务器代码中的某个地方)将成为基于迭代的实现,这样就可以针对任何已注册的规则,触发器,事件监听器等评估要删除的每个条目,从而可以准确捕获备份。换句话说,为了保证分布式环境中的“正确性”,它会减慢操作速度并迫使它作为一些有序的子操作序列发生。

发生这种情况的一些原因:

  1. 您已为缓存配置了直读,直写和/或后写行为;
  2. 您有近缓存和/或连续查询(暗示听众);
  3. 您有索引(需要在数据消失时更新);
  4. 我会就如何提高速度提出一些建议。

    更新(2014年7月14日) - 是的,事实证明这是一个已知问题(即它可以被优化),但是为了保持“正确性”和向后兼容性,优化(这将是重大变化) )已被推迟,而clear()仍在后端以迭代方式完成。