管理 WSO2 DSS 中创建的数据服务中包含的"select query"的 2000+ 个结果行



我在WSO2 DSS 3.0.1中创建了一个数据服务,这个DS从DB中调用一个选择操作。

问题是结果记录超过2000条,DS无法处理那么多的结果记录。

我们如何管理WSO2 DSS中的大量结果?

我如何得到结果行,例如,200 × 200?

首先,我不太确定您在检索2000多条记录时使用了哪些测试场景导致DSS失败。因为,通常,如果您只使用一个特定的服务来测试此场景,并且如果为DSS实例配置了足够的内存(建议用于生产使用-至少2GB),那么每个数据服务调用检索2000条记录(例如记录大小可能为10KB?),我想说,除非您使用非常高的并发性,否则不应该是一个沉重的负载。但是,我知道这很容易受到记录大小、并发性、多个服务请求的存在等的影响。

无论如何,一般来说,解决这个问题的理想方法是根据您喜欢的标准对结果集进行分页。例如,如果每次数据服务调用需要提取200条记录,那么理想情况下需要配置下面调用的数据服务查询,以便为您分页数据。换句话说,如果您使用的是RDBMS数据源,则可以在查询配置中使用LIMIT等关键字(如果您正在使用的RDBMS不支持该关键字,则可以使用类似的关键字)来限制每次数据服务调用返回的数据。

DSS中的另一个概念是"流",它可以帮助您有效地检索大块数据。显然,在将特定结果集作为web服务响应发送之前,我们要进行XML处理来转换它。因此,在存在大型结果集的情况下,在内存中构建XML响应时可能会消耗一定数量的内存。最终响应的大小可能是返回的原始数据集大小的两倍,因为在作为web服务响应发送之前,将添加大量XML来包装结果集,这取决于查询配置等。然而,作为"流"引入的功能将确保在发送响应之前没有在服务器端完全构建完整的结果集,而是在记录可用时将其流式传输到客户端。这将帮助您避免数据堆积在服务器端,这可能会导致OOM问题等,特别是当存在大型数据集时。这种机制的唯一缺陷是,很难处理错误,因为我们无法控制数据流的过程。

欢呼,Prabath

最新更新