3

我们正在使用“小型”仅内存 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() 函数?

4

1 回答 1

1

这个问题有两个方面 - 查询批量大小和查询缓冲区大小。

查询批处理大小决定了查询在单个批处理中返回的记录数。假设,如果您的查询为您提供 1000 条记录并且您的查询批量大小为 1000,则所有结果都将在单个响应中返回。如果您的查询批处理大小为 100,则需要 10 个批处理才能返回整个结果集。

有关详细信息,请参阅http://www.aerospike.com/docs/operations/manage/queries/

同样,您可以增加 query-buf-size 以增加缓冲区的大小。较大的缓冲区大小将导致较低的批次计数。

于 2014-12-11T10:57:52.350 回答