我在 WSO2 DSS 3.0.1 中创建了一个数据服务,这个 DS 从数据库中调用一个选择操作。
问题是结果记录超过 2000 条,而 DS 无法处理这么多的结果记录。
我们如何管理 WSO2 DSS 中的大量结果?
如何获得结果行,例如 200 x 200?
我在 WSO2 DSS 3.0.1 中创建了一个数据服务,这个 DS 从数据库中调用一个选择操作。
问题是结果记录超过 2000 条,而 DS 无法处理这么多的结果记录。
我们如何管理 WSO2 DSS 中的大量结果?
如何获得结果行,例如 200 x 200?
好吧,首先,我不太确定您在检索 2000 多条记录时使用了哪些测试方案导致 DSS 失败。因为,通常情况下,如果您只使用一项特定服务来测试此场景,并且如果为 DSS 实例配置了足够的内存(建议用于生产用途 - 最少 2GB),则检索 2000 条记录(比如记录大小可能为 10KB?)我会说,每个数据服务调用不应该是一个沉重的负载,除非您使用非常高的并发性等。但是,我知道这很好地受到记录大小、并发性、多个服务的存在的影响服务请求等
无论如何,一般来说,解决这个问题的理想方法是根据您的偏好标准对结果集进行分页。例如,如果您需要在每次数据服务调用中提取 200 条记录,那么理想情况下,您需要配置在下面调用的数据服务查询,以便为您对数据进行分页。换句话说,如果您使用的是 RDBMS 数据源,您可能可以在查询配置中使用 LIMIT 等关键字(如果您使用的 RDBMS 不支持该关键字,则使用等效关键字)来限制数据每次数据服务调用返回。
DSS 中另一个可以帮助您有效检索大量数据的概念是“流式传输”。显然,我们进行 XML 处理以在将特定结果集作为 Web 服务响应发送之前对其进行转换。因此,在存在大型结果集的情况下,在内存中构建 XML 响应时可能会消耗一些内存。也许最终响应的大小将是返回的原始数据集大小的两倍,因为在作为 Web 服务响应发送之前,将添加大量 XML 来包装结果集,具体取决于查询配置等。但是,作为“流媒体”引入的功能 将确保在发送响应之前未在服务器端完全构建完整的结果集,但记录在可用时会流式传输到客户端。这将帮助您避免数据堆积在服务器端,这可能会导致 OOM 问题等,特别是在存在大型数据集的情况下。这种机制的唯一问题是,很难处理错误,因为我们无法控制数据流的过程。
干杯,普拉巴斯