Xpages 在试图提高性能时,有没有理由说明FTSearch在XPage上的类型超前中不是DBColumn的合适替代品?

Xpages 在试图提高性能时,有没有理由说明FTSearch在XPage上的类型超前中不是DBColumn的合适替代品?,xpages,Xpages,在我当前的项目中,我有一个通用的要求,即使现有的XPage应用程序更快。我们研究的一件事是如何加快一些较慢的前置类型字段的速度,解决这个问题的一个方法似乎很快,就是使用FTSearch而不是我们最初使用的DBColumn来实现它。我想就这是否是一种可行的方法,或者是否有任何建议以不同的方式做我们需要的事情征求意见 背景: 虽然有许多因素会影响速度(如网络延迟、服务器操作系统、可用服务器内存等),但在使用8.5.3时,我们已经尽可能地优化了应用程序,利用IBM工具包查找问题区域,并使用IBM在8.

在我当前的项目中,我有一个通用的要求,即使现有的XPage应用程序更快。我们研究的一件事是如何加快一些较慢的前置类型字段的速度,解决这个问题的一个方法似乎很快,就是使用FTSearch而不是我们最初使用的DBColumn来实现它。我想就这是否是一种可行的方法,或者是否有任何建议以不同的方式做我们需要的事情征求意见

背景: 虽然有许多因素会影响速度(如网络延迟、服务器操作系统、可用服务器内存等),但在使用8.5.3时,我们已经尽可能地优化了应用程序,利用IBM工具包查找问题区域,并使用IBM在8.5.3中添加的功能来帮助解决这一问题(例如,部分执行,使用优化的JS和CSS选项等)。不幸的是,我们的服务器在32位Windows操作系统上运行,内存为3.5Gb,接下来的几个月将一直无法正常运行

响应速度最慢的元素之一是引用大量文档的某些类型标题。最差的元素平均在建议列表出现前5秒或6秒左右(对于启用了“提前键入”的字段)。 它使用SSJS调用java类来执行dbcolumn调用(使用Ferry Kranenburg的XPages)以从视图中获取唯一列表,然后在SSJS中循环遍历数组以检查每个条目是否包含搜索键值,如果找到,则添加一个突出显示(粗体)在word中搜索文本周围添加html标记,然后将格式化列表返回到浏览器。 我添加了一个print语句来输出运行代码所需的时间,而今天在我们的dev服务器上平均大约是3250毫秒

我尝试了一些方法,以了解如何加快这一过程:

  • 添加了一个Java类来完成所有处理(因此不使用SSJS)。这只节省了平均100ms的时间

  • 使用视图范围的托管Bean,我在加载页面时将唯一的查找列表加载到内存中,但我怀疑这是一种非常糟糕的处理大型数据集的方法,如果有多个用户访问应用程序,这可能会真正影响通用服务器。我试图找到关于什么是大型对象的信息,但找不到任何关于内存中存储多少太多的指导或建议(我搜索了JSF和XPage网站)。有人对此有什么建议吗

  • 仍然在Java类中-我没有执行dblookup来获取要搜索的所有值的“列表”,而是让代码运行FT搜索来获取文档集合,然后循环每个文档来提取我想要的字段值,并将它们添加到“SortedSet”(自动不允许重复),然后循环排序集,在搜索词周围插入粗体标记,并将其返回到浏览器。这平均需要100毫秒-这很好,几乎不值得注意。这种方法有缺点吗?或者我不应该这样做的原因是什么

  • 感谢您对此的任何反馈或建议。 潘

    更新日期:2013年8月14日:我尝试了另一种方法(受IBM/Tony McGuckin Insights应用程序的启发),因为公司的搜索类型是使用托管bean,并且可以快速跨越大量数据

    4.尽管Insights应用程序处理跨多个数据库拆分的数据,但前面的类型原理类似。我无法使用带有getAllEntriesByKey的视图,因为我也需要在文本中搜索字符串,而不仅仅是在条目的开头。我尝试基于视图FTSearch创建ViewEntryCollection,但由于我们在列中有很多重复的名称,这并没有给出我想要的唯一列表。然后我尝试在分类视图上使用NotesViewNavigator,并在其中循环。这产生了我需要的唯一列表,但它比上面的任何其他方法都慢。(我实现了ViewNavigator性能提示)从我的观点来看,每个Domino应用程序(不仅仅是XPages)所包含的许多层中的任何一层都可能会影响。 从顶级浏览器(DOM、JS、CSS、HTML…),网络(延迟、DNS、SSO…),到应用层(有效算法、缓存),数据库/API(数据量、索引、读卡器名称…)和操作系统/硬件(磁盘、内存…)

    根据您测试的内容:

  • 这是相互测试,但可以预料:SSJS是缓存的,并且可能使用较低级别的API来获取数据(NAPI)
  • 对于您的环境(32位/3.5G RAM-我想您的声明大约有350万个是打字错误),我不建议缓存大列表,尤其是当您将其作为一种模式应用于许多字段/表单/应用程序时。不过,WeakHashMap中的缓存可能更稳定
  • 使用FT搜索是非常好的,除非你需要经常更新的数据。FT索引需要一些时间和资源来更新
  • 我的建议是:如果FT能解决您的问题,请选择它。当然,首先要在服务器上进行一些繁重的性能测试,测试FT性能。

    (我无法评论,因为我的声誉很低)

    我最近一直在处理一个类似的问题。以下是一些需要考虑的补充问题:

      >P>视图中是否存在许多重复关键字?考虑对@ dBase.</P> 进行分类视图。 我相信,f>查找一个视图通常比数据库慢,参见.<代码> db .ftScript()/>代码>并细化您的FT查询以包含视图的选择@公式,如果可能的话.

    • FT索引可以使用
      db.updateFTIndex()
      以编程方式更新。如果很少添加关键字,但需要立即可用,则可以在关键字文档的QuerySave事件(或类似事件)中执行索引更新。当关键字存储在不同的