通过 API 请求向客户端发送大型数据集的好方法是什么?

ElH*_*aix 7 sql-server rest azure

客户的系统将通过 API 连接到我们的系统以进行数据拉取。目前,这些数据将存储在数据集市中,假设每个请求存储 50,000 条记录。

我想知道传递源自 SQL Azure 数据库的有效负载的最有效方法。

API 请求将是 RESTful。收到请求后,我认为将从数据库中检索有效负载,将其转换为 JSON,然后通过 HTTP 进行 GZIP 编码/传输回客户端。

我担心处理这个问题可能需要许多连接的客户端提取大量数据。

最好以明文形式将直接结果返回给客户端吗?

欢迎提出建议。

- 更新 -

需要澄清的是,这不是正在连接的 Web 客户端。该连接是由另一个应用程序建立的,用于接收一次性的每日数据转储,因此没有分页。

数据主要由带有一个二进制字段的文本组成。

Gar*_*ker 3

评论有点长,所以......

最好的方法很可能是那些“视情况而定”的答案之一。

是 Azure 上的数据库,还是 Azure 上的整个托管。我自己从未在 Azure 上做过任何制作。

您想优化什么——总回合响应时间、总服务器 CPU 时间,或者其他时间?

例如,如果您的数据库服务器是天蓝色的,但是您的 Web 服务器是本地的,那么您可能可以简单地优化数据库请求,并根据需要通过多个 Web 服务器进行扩展。

如果数据随每个请求而变化,那么如果您试图优化服务器 CPU 负载,则永远不应该压缩它,但如果您试图优化带宽使用,则应该压缩它 - 两者都可能是您的瓶颈/昂贵的资源。

对于 50K 记录,即使 JSON 也可能有点冗长。如果您的数据是单个表,则通过使用 CSV 之类的内容可能会节省大量数据(如果没有其他情况,包括第一行作为完整性检查的记录标题)。如果您的结果是连接多个表(即分层)的结果,则建议使用 JSON,以避免滚动您自己的分层表示的复杂性。

您是否使用 SSL 或您的网络服务器,如果是的话 SSL 可能是您的瓶颈(除非这是通过其他硬件处理的)

您发送的数据的性质是什么?主要是文本、数字、图像吗?文本通常压缩得很好,数字则较差,图像则较差(通常)。既然你建议使用 JSON,我希望你几乎没有二进制数据。

如果压缩 JSON,它可能是一种非常有效的格式,因为重复的字段名称大部分会从结果中压缩出来。XML 同样(但标签成对出现)

添加

如果您事先知道客户端将获取什么并且可以提前准备数据包数据,请务必这样做(除非存储准备好的数据是一个问题)。您可以在非高峰时间运行它,将其创建为静态 .gz 文件,并让 IIS 在需要时直接提供服务。您的 API 可以简单地分为两部分: 1) 检索客户端可用的静态 .gz 文件列表 2) 确认对所述文件的处理,以便您可以删除它们。

想必您知道 JSON 和 XML 不像 CSV 那样脆弱,即,从 API 添加或删除字段通常很简单。因此,如果您可以压缩文件,那么您绝对应该使用 JSON 或 XML —— XML 对于某些客户端来说更容易解析,而且说实话,如果您使用 Json.NET 或类似工具,您可以从同一组中生成其中之一定义和信息,所以保持灵活性是很好的。就我个人而言,我非常喜欢Json.NET,简单、快速。