2.14. 代码执行和数据处理
分布式缓存的一个优点是,您可以利用每个主机的计算资源来更有效地执行大规模数据处理。通过在 Data Grid 上直接执行您的处理逻辑,您可以将工作负载分散到多个 JVM 实例上。您的代码还在数据网格存储数据的同一内存空间中运行,这意味着您可以更快地迭代条目。
在对数据网格部署的性能影响方面,完全取决于您的代码执行。更复杂的处理操作性能更高,因此您应该谨慎规划在数据网格集群中运行任何代码。首先,测试您的代码并在较小的样本数据集中执行多次执行。收集一些指标后,您可以开始识别优化并了解您正在运行的代码的性能影响。
一个无限的考虑因素是,长时间运行的进程可能会对正常的读写操作造成负面影响。因此,您必须持续监控部署并持续评估性能。
嵌入缓存
通过使用嵌入式缓存,数据网格提供两个 API,可让您在与数据相同的内存空间中执行代码。
- ClusterExecutorAPI
- 允许您使用 Cache Manager 执行任何操作,包括迭代一个或多个缓存的条目,并基于数据网格节点进行处理。
- CacheStreamAPI
- 可让您对集合执行操作,并根据数据进行处理。
如果要在单一节点、一组节点或特定地区中的所有节点上运行操作,那么您应该使用集群执行。如果要运行可保证对整个数据集的正确结果的操作,那么使用分布式流是一个更有效的选项。
集群执行
CacheStream
Map<Object, String> jbossValues =
cache.entrySet().stream()
     .filter(e -> e.getValue().contains("JBoss"))
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Map<Object, String> jbossValues =
cache.entrySet().stream()
     .filter(e -> e.getValue().contains("JBoss"))
     .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));远程缓存
				对于远程缓存,Data Grid 提供了一个 ServerTask API,它可让您使用 Data Grid Server 注册自定义 Java 实施,并通过调用 Hot Rod 或使用 Data Grid Command Line Interface (CLI)来编程执行任务。您可以在一个数据网格服务器实例或集群中所有服务器实例上执行任务。