Lotus查询方法慢的要死,谁来帮帮我!!!
问题是这样的: 我做的是OA办公的,由于公司比较大数据量比较多,我用的是dbSearch方法searchFormula$="select Form = 'DocIndexForm' & (( StTaskStart > '" + docCurr.StToDate(0) + "' & StTaskStart < '" + docCurr.GetFirstItem("StNextToDate").text + "') | ( StTaskEnd > '" + docCurr.StToDate(0) + "' & StTaskEnd < '" +docCurr.GetFirstItem("StNextToDate").text + "') |( StTaskStart < '" + docCurr.StToDate(0) + "' & StTaskEnd > '" + docCurr.GetFirstItem("StNextToDate").text + "')) & StZxrEN = '" + docCurr.StUserEN(0) +"' & (StTaskStatus='3'| StTaskStatus='4')"
Set docCollection = dbIndex.Search(searchFormula$,Nothing,0)
这样写太慢了 而且 我还要执行三次这样的查询操作 每次执行的时候条件都不相同,我看后台了 主要是执行上面这个查询语句的时候慢的要死 ,每次都都好几秒,三次加起来有时候要等十多秒,太慢了 有上面好的查询方法没、 如果用view.GetAllDocumentsByKey查询的话 怎么传条件为两个日期间的,比如说我要得到2010-07-05和2010-08-05间的数据,怎么查? 大侠们帮忙!! --------------------编程问答-------------------- 用FTSearch --------------------编程问答-------------------- 数据量大的话,千万不要在view的选择条件里面用跟当前时间有关的条件,否则更新索引的时候服务器会很慢很慢。像你现在这种情况,可以考虑建索引,用FTSearch来做 --------------------编程问答-------------------- FTSearchRange --------------------编程问答-------------------- 仍然建议你用view 的查询来处理,不符合时间条件的doc可以不进入逻辑处理部分。 --------------------编程问答--------------------
这么大数据量,有当前时间为条件的视图会随时刷新,会把他的服务器搞死的 --------------------编程问答-------------------- 在检索条件中不要加入时间判断,先检索,再在结果中判断每个文档的时间条件。 --------------------编程问答-------------------- Lonus Notes有前途吗? --------------------编程问答-------------------- 兄弟,您的数据量现在是多少,好像不应该出现你现在的情况! --------------------编程问答-------------------- 可以考虑用view.ftsearch.一般数据库在查询前都需要updateFTIndex,但是如果数据量大的话这个方法也是很费时间的,做之前要判断一下。
但是,大数据量的数据库查询总归是一件非常痛苦的事情。。。 --------------------编程问答-------------------- 小弟最近在接触用DB.FTsearch 遇到个问题 我执行FTsearch 后 查询得到8个文档 但是 执行查询的用户 只对其中的6个文档有查看权限 所以导致查询出来的文档中有个两文档我取不到任何域的值
(我在个代理里面我已经设置了 "作为web用户运行" )
我期望的查询结果是 当前用户只对6个文档有阅读权限那么查询后DocumentCollection.Count 应该就是6才对
望各位大侠指教 --------------------编程问答-------------------- 数据超过10w,查询就比较痛苦了! --------------------编程问答-------------------- 在ibm内部使用的lotus notes DB中,在部署DB之前对设计有如下的规定要求:
1.DB的大小不允许超过 1G, 否则应采取分割DB,多DB,归档 等等的架构。
2.DB的文档数量不允许超过 10w, 否则应采取分割DB,多DB,归档 等等的架构。
...... --------------------编程问答-------------------- 当然这些对DB的要求也是要看硬件配置的。
我记得我上述对应的硬件配置是:
Hardware Software
Hardware type RISC-9076 Operating system AIX
Machine type Silver Operating system level 5.1.0.0
Processor speed 332* Lotus Notes version Release 7.0.1
--------------------编程问答-------------------- 可以考虑先建一个用Key分类的视图,先getalldocumentbykey,然后循环处理每条数据 --------------------编程问答-------------------- 有没有考虑过使用多个视图,或者直接将数据写入sql,再从sql查询呢 --------------------编程问答-------------------- 谢谢大家,回复的有点晚了,苏州的一个项目,当时我用的是四楼的思路,不过还行了 也就是三两秒的问题。我没有用到索引。12楼说的非常好! --------------------编程问答-------------------- 我现在的项目架构是年数据量超过2G,或者超过2W条记录必须尽悉分库归档操作。如果你真的是有大量的数据需要查询操作,建议您将查询条件存如关系形数据库,通过LEI每天同步,关系形数据库建立查询索引。domino数据库依然建议进行分库处理,特别是有reader域的时候 --------------------编程问答-------------------- 建议对于数据量查询较大时,可以将LOTUS库与DB2结合使用.做个映射,专门用经常性的查询功能.
这样会真正提高查询效率.否则在LOTUS下,进行复杂大量数据查询确实是个难题. --------------------编程问答-------------------- 关于Lotus查询效率的问题
http://bbs.lotus-gateway.com/viewtopic.php?f=2&t=155&p=216&hilit=%E6%90%9C%E7%B4%A2%E6%95%88%E7%8E%87#p216 --------------------编程问答--------------------
首先做个子表单,然后在script库写入以下代码
Function searchcon_bs(doccur As NotesDocument ) As String
Dim strser As String
'第一个条件
If doccur.a4(0)<>"" Then
strser= "&@contains(a4;""" + Trim(doccur.a4(0)) + """)"
End If
If doccur.a3(0)<>"" Then
strser=strser + "&a3=""" + Trim(doccur.a3(0)) + """"
End If
If doccur.docsn(0)<>"" Then
strser= "&@contains(docsn;""" + Trim(doccur.docsn(0)) + """)"
End If
searchcon_bs=strser
End Function
我这只是对一张数据库模糊查询 --------------------编程问答-------------------- 查询条件用公式来组成的话,相对来说会快一些。 --------------------编程问答-------------------- 看看www.soyxer.com可以解决你的问题 --------------------编程问答-------------------- 可以使用getalldocumentsbykey,日期的条件在遍历文档时进行一一比较,排除不符合的记录。
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- notes本身的查询就是很差劲的。不适合做这样的检索。一般说来,如果你能用关系型数据库作为数据存储,domino和rdbms中各有一套,就好办了。这个也是一个大型系统常用的方法。你可以试一试。没有关系型数据库,可以考虑使用嵌入式数据库,例如apache derby或者hSQLDB
补充:企业软件 , Lotus