4

我目前正在为我们的客户开发一些网络服务。在我们将其提供给他们之前,我们希望优化数据库调用的性能,因为可能会返回非常大量的数据。(可能是数万个对象,可能是数百万个对象,每个对象包含大约 12 个其他对象列表)

我们不想给我们的服务器带来压力,也不想不必要地限制网络服务。

Web 服务方法之一返回指定日期范围内的所有数据,我在想如果返回的数据量大于设定的量,则返回一条消息,如下所示:

“数据太大,请缩小日期范围”

像这样限制用户的范围是个好主意吗?

我必须限制我们的客户一次可以检索的数据量,但仍然尽可能方便他们。我的意思是,他们也是程序员,所以它不必太简单,但足够简单易用。

通过 Web 服务返回大量数据有哪些好的做法?

谢谢!

4

4 回答 4

4

您可能能够适应在列表或网格中显示的分页数据的常用技术。对数据库的调用指定要返回的记录数和页码。

因此,例如,如果他们在一个页面上显示 10 条记录,则只会返回 10 条记录以供显示。第 1 页返回记录 1 - 10(或 0 - 9,如果您愿意),第 2 页返回 11 - 20,依此类推。

还经常返回可用记录的总数。

这样,用户可以继续滚动浏览大量记录,或者他们可以选择细化他们的搜索条件以产生更小的结果集。

您可以为您的 Web 服务考虑这种分页或分块方法。Web 服务调用提供要在每个块中发送的记录数,以及“页面”或“块”编号。Web 服务返回请求的记录以及可用记录的总数。

使用这种方法,使用 Web 服务的开发人员仍然可以控制。

调用代码可以放置在一个循环中,以便它继续请求块,如果该行为是可取的。如果有人真的想要一卡车的记录,他们可以将记录数参数设置为一个非常大的数字(或者您可以将其设为可选参数,如果它为空、零、空则返回所有内容)。

于 2012-04-17T16:03:13.007 回答
2

这真的取决于你的需求。对我来说,这似乎更像是一个设计问题而不是编码问题,但在我们的系统中,我们有两种方法。我将分享它们给你一些想法来考虑。

  • 在第一个中,我们是提供数据的人。我们允许客户在他们的账户上下载交易数据,对于一些客户来说,这可能是相当大的数据量。我们将它们限制为 X 天的数据,他们对此很好。

  • 在第二个中,我们使用来自已建立供应商的 Web 服务的数据,该供应商跟踪车辆位置数据,以及我们的调度员和管理人员感兴趣的其他数据。我们车队中的每辆卡车都会定期更新其地理位置以及其他数据(装载/卸载/司机休息等)

    • 在这些 Web 服务中,我们请求一个日期范围,并且该服务返回一组记录限制(每次调用 1000 条记录)。
    • 除了传入日期范围之外,我们还传入一个“位置”整数字段。在第一次调用时,“位置”设置为零。
    • Web 服务返回“更多数据存在”布尔字段。
    • 如果“更多数据存在”=true,那么我们再次调用 Web 服务,并增加“位置”参数,并重复直到“更多数据存在”=false(这是我们代码中的一个简单的 while 循环)

我认为第一个对于程序员或最终用户来说都很棒。第二个在与程序员打交道时效果很好。

于 2012-04-17T16:05:18.177 回答
1

这听起来像是 Web 服务的潜在大量数据。

但这里有一个来自 MSDN 的页面,它讨论了设置服务器以发送/接收“大量”数据:http: //msdn.microsoft.com/en-us/library/aa528822.aspx

于 2012-04-17T16:02:44.877 回答
0

您可以每次给他们一大块数据,例如 (1000 obj) 他们必须指定他们想要的起始索引和数据量,您只需使用它来提取数据。在 SQL 中有 TAKE 和 Skip 可以很容易地做到这一点。

于 2012-04-17T16:03:32.623 回答