代码之家  ›  专栏  ›  技术社区  ›  Wim ten Brink

提高从Web服务加载列表的速度

  •  1
  • Wim ten Brink  · 技术社区  · 14 年前

    这是一个延续 this question :
    问题很简单。我需要从控制多个表的RESTWeb服务调用方法。一个表是一个快照表,其中包含带有大量XML文件的记录。每个XML文件基本上是另一个数据库的备份。然后,将此备份XML发送给在另一个产品中将数据用作只读信息的客户。基本上,XML中的数据是公司、产品、业务规则等的列表。不,这些客户大部分时间都在离线工作,因此他们无法实时获取数据。
    浏览快照列表很困难: XMLData.Snapshots.Skip(N).Take(1).First(); 但效果很好。这是前一个问题的答案。
    但是还有另外三个数据列表需要我浏览。这些称为更改、错误和消息。它们包含(1)对数据的更改,(2)修改数据时发生的错误和(3)一般消息。所有这些记录都链接到快照记录。因此,单个快照可以包含多个更改、错误和消息。
    我仍然无法访问服务器代码,但是由于有一个围绕实体框架的REST服务公开了大部分功能,所以我仍然可以使用该服务。(而且该服务只能通过内部网访问。这基本上就是我要做的。虽然更改、错误和消息的列表相对较小,但快照仍然很大。


    问题是,我现在想生成一个客户端的更改、错误和消息报告,但不需要按快照对它们进行分组!它们需要按日期分组。但是每一张记录也需要显示快照的标题,这会让我感到不可思议的头疼…
    在浏览(例如使用常规foreach指令进行更改)时,我可以使用 XMLData.LoadProperty(Change, "Snapshots"); 但由于快照记录本身通常约为300MB,所以这只会使整个过程变慢。(这些记录总共有数万条!)所以我需要一个更快的解决方案,而不需要修改服务器代码。

    有什么建议吗?

    是的,好的。修改服务器是正确的方法,但这是不可能的。它正在生产中,这个列表不太重要,不需要升级服务器。基本上,目前我不允许修改任何服务器代码。(但他们仍然想要这个列表。)


    一些额外的复杂性…我正在开发的应用程序只是需要每周或每月运行一次。但根据目前的记录数量,我估计要花两天多的时间才能完成。数据本身将在每个办公日更新几次,服务器上每周都会创建快照。当用户开始浏览维护数据的站点时,总是会产生错误,但一般情况下,每周会有大约50次更改和4次错误,当服务器再次停机或生成快照时,还会出现一些消息。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Daniel Dyson    14 年前

    一种选择是维护另一个客户端数据文件,该文件包含相同的数据,但按日期排序。这可以在单独的线程中异步生成和更新,以免影响主应用程序。每当用户想要生成RPort时,您需要检查数据文件是否可以读取,并可能对其进行锁定。

    这应该能够处理数万条记录。 但是你必须确保你输入了健壮的代码来保持两组数据的同步。 如果您不确定是否将来自服务器的数据视为“黄金拷贝”。

        2
  •  1
  •   onof    14 年前

    您可以让另一个Web服务从第一个缓存数据,还是访问同一个数据源?