问题描述
问题是这样的:我做的是OA办公的,由于公司比较大数据量比较多,我用的是dbSearch方法searchFormula$="selectForm='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')"SetdocCollection=dbIndex.Search(searchFormula$,Nothing,0)这样写太慢了而且我还要执行三次这样的查询操作每次执行的时候条件都不相同,我看后台了主要是执行上面这个查询语句的时候慢的要死,每次都都好几秒,三次加起来有时候要等十多秒,太慢了有上面好的查询方法没、如果用view.GetAllDocumentsByKey查询的话怎么传条件为两个日期间的,比如说我要得到2010-07-05和2010-08-05间的数据,怎么查?大侠们帮忙!!
解决方案
解决方案二:
用FTSearch
解决方案三:
数据量大的话,千万不要在view的选择条件里面用跟当前时间有关的条件,否则更新索引的时候服务器会很慢很慢。像你现在这种情况,可以考虑建索引,用FTSearch来做
解决方案四:
FTSearchRange
解决方案五:
仍然建议你用view的查询来处理,不符合时间条件的doc可以不进入逻辑处理部分。
解决方案六:
引用4楼zwm136200的回复:
仍然建议你用view的查询来处理,不符合时间条件的doc可以不进入逻辑处理部分。
这么大数据量,有当前时间为条件的视图会随时刷新,会把他的服务器搞死的
解决方案七:
在检索条件中不要加入时间判断,先检索,再在结果中判断每个文档的时间条件。
解决方案八:
LonusNotes有前途吗?
解决方案九:
兄弟,您的数据量现在是多少,好像不应该出现你现在的情况!
解决方案十:
可以考虑用view.ftsearch.一般数据库在查询前都需要updateFTIndex,但是如果数据量大的话这个方法也是很费时间的,做之前要判断一下。但是,大数据量的数据库查询总归是一件非常痛苦的事情。。。
解决方案十一:
小弟最近在接触用DB.FTsearch遇到个问题我执行FTsearch后查询得到8个文档但是执行查询的用户只对其中的6个文档有查看权限所以导致查询出来的文档中有个两文档我取不到任何域的值(我在个代理里面我已经设置了"作为web用户运行")我期望的查询结果是当前用户只对6个文档有阅读权限那么查询后DocumentCollection.Count应该就是6才对望各位大侠指教
解决方案十二:
数据超过10w,查询就比较痛苦了!
解决方案十三:
在ibm内部使用的lotusnotesDB中,在部署DB之前对设计有如下的规定要求:1.DB的大小不允许超过1G,否则应采取分割DB,多DB,归档等等的架构。2.DB的文档数量不允许超过10w,否则应采取分割DB,多DB,归档等等的架构。......
解决方案十四:
当然这些对DB的要求也是要看硬件配置的。我记得我上述对应的硬件配置是:HardwareSoftwareHardwaretypeRISC-9076OperatingsystemAIXMachinetypeSilverOperatingsystemlevel5.1.0.0Processorspeed332*LotusNotesversionRelease7.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库写入以下代码Functionsearchcon_bs(doccurAsNotesDocument)AsStringDimstrserAsString'第一个条件Ifdoccur.a4(0)<>""Thenstrser="&@contains(a4;"""+Trim(doccur.a4(0))+""")"EndIfIfdoccur.a3(0)<>""Thenstrser=strser+"&a3="""+Trim(doccur.a3(0))+""""EndIfIfdoccur.docsn(0)<>""Thenstrser="&@contains(docsn;"""+Trim(doccur.docsn(0))+""")"EndIfsearchcon_bs=strserEndFunction我这只是对一张数据库模糊查询
解决方案:
查询条件用公式来组成的话,相对来说会快一些。
解决方案:
看看www.soyxer.com可以解决你的问题
解决方案:
可以使用getalldocumentsbykey,日期的条件在遍历文档时进行一一比较,排除不符合的记录。
解决方案:
该回复于2010-12-06 11:44:02被版主删除
解决方案:
该回复于2011-02-24 13:57:39被版主删除
解决方案:
notes本身的查询就是很差劲的。不适合做这样的检索。一般说来,如果你能用关系型数据库作为数据存储,domino和rdbms中各有一套,就好办了。这个也是一个大型系统常用的方法。你可以试一试。没有关系型数据库,可以考虑使用嵌入式数据库,例如apachederby或者hSQLDB