2.14. 代码执行和数据处理
分布式缓存的一个优点是,您可以利用各个主机的计算资源来更有效地执行大规模数据处理。通过在 Data Grid 上直接执行您的处理逻辑,您可以将工作负载分散到多个 JVM 实例中。您的代码还在 Data Grid 存储数据的相同内存空间中运行,这意味着您可以更快地迭代条目。
在对数据网格部署的性能影响方面,这完全取决于您的代码执行。更复杂的处理操作性能较低,因此您应该在 Data Grid 集群中运行的任何代码,并仔细规划。首先测试您的代码,并执行在较小的、示例数据集上运行的多个执行。收集一些指标后,您可以开始识别优化并了解您正在运行代码的性能影响。
一个确定的考虑是,长时间运行的进程可能会开始对正常读写操作产生负面影响。因此,您可以随时监控部署并持续评估性能。
嵌入式缓存
借助嵌入式缓存,Data Grid 提供两个 API,可让您在与数据相同的内存空间中执行代码。
ClusterExecutorAPI- 允许您使用 Cache Manager 执行任何操作,包括迭代一个或多个缓存的条目,并为您提供基于 Data Grid 节点的处理。
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 服务器注册自定义 Java 实现,并通过通过 Hot Rod 调用 execute () 方法或使用 Data Grid 命令行界面(CLI)来以编程方式执行任务。您只能对一个 Data Grid 服务器实例或集群中的所有服务器实例执行任务。