0

我正在设计一个包含一个非常大的数据源的 Web 服务,如果我的设计是合适的,或者我错过了一些更好的东西,我将非常感激。

所以问题来了:我们有几个数据源,它们都提供相同的接口,其中“最重要”的方法是RowIterator select(Table table, String where). 现在,从功能上讲,我们所有的实现一切都很好,但问题是我们需要包装其中一个源的 Web 服务会(在一个幼稚的实现中)在接收到查询时

  1. 等待包装的数据源返回整个结果集
  2. 在将整个结果集发送到客户端之前对其进行编组
  3. 在客户端解组整个结果集,然后将其返回给调用者

只有在这个序列之后,调用者才能看到第一行。这是一个非常令人失望的行为,因为调用者必须不必要地等待整个结果集两次。相反,我想要一些流水线。当服务仍在发送行时,调用者必须能够看到第一个结果。现在我计划通过实现某种封装在客户端行迭代器中的分页来克服这个问题。该服务将维护一个会话 ID(带有超时),该 ID 在接收到查询时创建,可用于获取数据块。在将实际查询发送到包装数据源之前,可能已经返回了会话 ID。客户端然后将获取块(页面),直到块为空或小于预期(=请求)块大小。

因此,在此设计中,调用者将能够在服务仍在发送行时看到第一个结果。但是,我想知道是否有一种方法可以使用 SOAP Web 服务在每行的基础上有效地传递结果?

此外,是否可以将结果返回给调用者而不重复要求更多结果?

4

1 回答 1

0

最后,我使用 MTOM 以二进制形式传输数据,并在客户端和服务器上使用阻塞队列来实现所需的并行性。我在这里画了这个:流式传输大型 SOAP 附件

于 2014-11-09T07:08:21.670 回答