【发布时间】:2014-06-03 22:33:00
【问题描述】:
我有一个非常 - 对我来说 - 神秘的效果:
在我的 Xpage 中,我有一个小的 java bean,我在其中循环访问一个条目集合,使用 getallentriesbykey(username) 构建(获得大约 200 个条目。
viewA 有 2 个排好序的列:用户名 + 客户 ID,
viewB 有 2 个排好序的列:用户名 + 交付周数(文本)
使用 viewA 循环需要不到一秒, 但是对于 viewB,循环需要超过 10 秒! 真正疯狂的是(对我来说):当我将带有 customerID 的列放在 viewB 中的 weeknumber 后面并对其进行排序时,循环又快了!
ViewEntryCollection mycoll = myview.getAllEntriesByKey(myuser);
myentry = mycoll.getFirstEntry();
System.out.println("Start loop");
while (myentry != null) {
/* of course I do sth here, but the effect is the same
with nothing in, like in this example*/
tmpentry = mycoll.getNextEntry();
myentry.recycle();
myentry = tmpentry;
// tmpentry.recycle();
}
System.out.println("End loop");
我真的很困惑...也许有人可以带来一些光明...? 在此先感谢,Uwe
更新:
它保持神秘:
myview.getAllEntriesByKey(myuser,key1) 给了我 200 个条目 - 循环非常快。 myview.getAllEntriesByKey(myuser,key2) 只给我 50 个条目 - 循环需要 6 倍的时间。
数据库有 20.000 个文档,都带有阅读器字段。因此(我是 xpages 的新手,而不是 lotus notes ... ;-))我首先通过“myuser”收集它们,所有视图在第一个排序列中都有多值阅读器项目。据我了解,这些集合仅包含允许用户查看的文档。所以我看不出 beetwen (myuser,key1)- 和 (myuser,key2)-collection 的区别。
【问题讨论】:
-
可能会在调用 getNextEntry 时进行某种数据库查找,查找中的不同列会根据索引等产生不同的结果。
-
查找速度非常快,在这两种情况下,视图索引都是由排序的列构建的。视图看起来几乎相同,只是排序的列不同
-
我想我会更多地关注视图。这个数字栏的论坛是什么?视图的选择公式是什么?你确定他们一样吗? “在继承中显示响应文档”是否相同?如果您实际上删除了坏视图并从头开始重建它会怎样?有什么区别吗?
-
大卫,这也是我的第一个猜测,该视图是“不知何故 kaputt”。 --- 所以我新建了它:它只是“好”的副本,我改变的只是排序列:为第 2 列(客户 ID)禁用它,为第 6 列(周数)启用它。在这两种情况下,查找 (getentriesbykey) 都很快,而循环很慢。
-
初始化视图时,最好调用setAutoUpdate(false)。否则,视图索引更新可能会意外影响性能。这是 OpenNTF Domino API 可以提供开箱即用的好处之一