【问题标题】:REST Service - poor performance issueREST 服务 - 性能不佳问题
【发布时间】:2012-11-16 10:58:45
【问题描述】:

我在 XPage (XAgent) 中使用 REST 服务控件,但遇到性能缓慢的问题..

代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xe:restService id="byNameFirst" pathInfo="Read">
        <xe:this.service>
            <xe:viewItemFileService var="entry" defaultColumns="true"
                count="3000">
                <xe:this.viewName><![CDATA[#{javascript:context.getUrl().getParameter("view")}]]></xe:this.viewName>
            </xe:viewItemFileService>
        </xe:this.service>
    </xe:restService>
</xp:view>

XAgent 使用以下命令调用: 服务器/dbpath/xRestService.xsp/Read?view=lookupREST

服务器是带有 UP1 的 Domino 8.5.3 视图 (lookupREST) 是 FTIndexed,有 15 个非计算列。 我已经尝试设置计数(返回的行数)。

  • 设置count为10,60ms内返回数据(平均20个请求)
  • 设置count为100,2s内返回数据(平均20个请求)(!)
  • 设置count为1000,2s内返回数据(平均20次请求)
  • 将计数设置为 3000,数据在 5.5 秒内返回(20 次请求的平均值)(!)

结果:返回 10 很快,100 很慢,1000 很慢,3000 很慢..

我希望它更快。我应该期望比这更快的响应吗? 我已经用其他 xpage、表单、页面等测试了整体服务器 http 性能,我觉得它很好。

我还使用 viewJsonService 进行了测试。我觉得比较慢。使用 3000 作为计数平均大约需要 10 秒。

那么,问题是我应该期望比这更快的响应时间吗?这种缓慢的性能可能是什么原因? 还是按预期执行?

任何信息/提示将不胜感激微笑

问候, 彼得·克杰伦

【问题讨论】:

  • Petter - 您是否计算了页面上出现的速度 - 或服务器的响应速度?使用 Firebug 或 Chrome 开发工具,您可以查看响应时间和下载时间——它们之间的关系如何?了解这有助于识别问题
  • 您也可以尝试使用 Domino 数据服务www-10.lotus.com/ldd/ddwiki.nsf/…。如果您只想从视图中获取 JSON 输出,它可能会更快。
  • @MarkyRoden - 是的,这已经使用萤火虫进行了测试。等待时间平均为5.5秒左右。 (以 3000 为计数)连接约 30 毫秒,接收约 280 毫秒。
  • @EgorMargineanu - 感谢您的提示。我会调查的。
  • @EgorMargineanu - 我现在已经使用 Domino 数据服务进行了测试。不幸的是它更慢。我在大约 9-10 秒内返回了 3000 个文档(平均 20 次尝试)

标签: xpages


【解决方案1】:

您需要先将其与服务器的基线进行比较。由于您使用的是视图,因此您可以使用

http://yourserver/yourdb.nsf/viewName?ReadViewEntries&OutputFormat=JSON&Count=1000

这为您提供了原始服务器性能(您需要调整服务器设置以一次获得超过 1000 个)。如果结果相差不大,则观察您的服务器 I/O (DiskQueue) 以识别瓶颈

【讨论】:

  • @Stephan - 是的,我也试过你的方法,而且速度更快。 3 秒内返回 3000 个文档(大约是一半的时间。)但是,我还需要在服务器端进行排序和过滤的能力。只是为了获取数据,这是一个很好的解决方案。
  • 排序是可用的,在某种程度上过滤也是可用的。检查 URL 命令 doku
  • 是的,ResortAscending=column number 或者ResortDecending=column number 可以用来排序。过滤是更棘手的想法..