我们正在使用“小型”仅内存 Aerospike 服务器来存储最近一小时的网站分析。最后一小时的数据大小约为 10 Gb。
我们尝试从 Aerospike 上的单独服务器(基于 Java 的客户端)执行一些聚合查询,如下所示(在 LUA 中):
stream : aggregate( map(), complex_aggregate_function ) : reduce( simple_reduce_function )
根据文档,所有聚合都在 Aerospike 节点(在我们的例子中是单个节点)上完成,并在客户端上减少。
事实证明,aggregate() 函数只处理小批量数据,即 10-16 条记录。之后聚合结果被发送到客户端,由 reduce() 处理。
由于 reduce() 操作是在客户端执行的,这意味着服务器将至少向客户端发送 1/16 大小的数据。即数百兆字节的数据。谈论性能。
是否可以更改记录流聚合的“缓冲区大小”或“队列大小”或“任何大小”?即是否可以“调整” Aerospike 以每个节点仅调用一次 reduce() 函数?