Oracle 一致性是否支持批量删除操作?

本文关键字:删除 操作 一致性 是否 支持 Oracle | 更新日期: 2023-09-27 18:36:47

现在我按顺序向 Coherence 服务器发送 10,000 个删除操作。因此,有 10,000 次网络往返。有没有办法将 1 个批量操作中的所有删除操作发送到 Coherence 以避免这种往返?

我研究了文档,发现有一种方法可以批量执行命令,但只能在运行 coherence.sh 时执行命令(通过 bin/coherence.sh"@batch batchfile.txt"),但不确定如何通过他们的 C# API 和/或缓存配置文件执行此操作。

有没有人有关于如何通过 C#(而不是 java)执行此操作的示例?

Oracle 一致性是否支持批量删除操作?

我想你想要AbstractCacheStore.eraseAll(Collection colKeys)

从文档中:

如果要实现读/写缓存,则必须扩展com.tangosol.net.cache.AbstractCacheStore(或实现接口com.tangosol.net.cache.CacheStore),这将添加以下方法:

public void erase(Object oKey);
public void eraseAll(Collection colKeys);
public void store(Object oKey, Object oValue);
public void storeAll(Map mapEntries);

方法erase()应从外部数据源中删除指定的键。方法store()应更新数据源中的指定项(如果存在),如果当前不存在,则应插入它。

实现CacheLoader/CacheStore后,可以通过相干cache-config.xml文件进行连接。

根据本文档,这是满足您需求的 C# 接口

AbstractCacheStore.EraseAll 方法:

从基础存储中删除指定的密钥(如果存在)。

命名空间

Tangosol.Net.Cache Assembly: Coherence (in Coherence.dll) 版: 12.1.2.0 (12.1.2.0) 折叠图像语法

公共无效擦除全部(ICollection键)

此方法的实现为每个键调用 Erase(Object) 提供的 ICollection。成功擦除后,密钥将被删除 从ICollection(如果可能的话)。注意:对于许多类型的持久性 存储,单个擦除操作与批量擦除一样昂贵 操作;因此,子类应重写此方法,如果 可能。

看起来即使是擦除整个集合的基础 API 也是通过对每个值调用Erase来实现的。不过,Oracle Coherence 是一个内存缓存,因此它实际上并没有通过线路 10,000 次来擦除密钥,而是在内存中访问它。

cache.InvokeAll(filter, new ConditionalRemove(AlwaysFilter.INSTANCE));  

cache.InvokeAll(colKeys, new ConditionalRemove(AlwaysFilter.INSTANCE));