这个想法由来已久,由于全文索引本身的缓存设计,使得其io操作要小于数据库对于频繁读取的操作全文索引绝对有可能在性能上超越数据库(至少能轻松秒杀mysql,mysql那超低的io性能如果不改那肯定是要被sqlserver给灭掉的,只是时间问题)但当你深入这个问题的时候就会有很多问题出现,我最初的需求是利用这个记录搜索关键字进而得到关键字hot排名。问题出现了:
1 IndexerWriter有个特性如果不close始终有部分内容会写不入索引,也就是它的缓冲机制,这是非常致命的,由于在实际应用中,这种写入是多线程的,当你在需要的时候close下以获得更新的时候,那么很可能使得某个写入线程出错,这是非常糟糕的,虽然我们不要求lucene达到acid的水准,但是经常报错是非常有问题的。
2 接着1的问题,同样在reader端需要频繁读入新内容,这可能会造成很大的性能问题,虽然在2.3中已经有了reopen方法,但我尝试过效率绝对没有官方宣称的如此高效,源代码我也看过的确不是那么高效的在我已经优化过的环境里,并没有获得很巨大的优势。
那么现在来看看解决的方法:
首先可以考虑是否使用ram作为临时存储地,不管如何,在ram上close和reopen都要比fs要高速得多,当然这个代价就是无法很大,虽然现在我的生产环境已经是16g内存的机器×2但我依然无法保证能够无限满足需求,有一天满了怎么办?到时候哭都来不及。
第二,考虑在fs上使用多索引,然后merge到主索引的方法,这样我可以利用线程限制极大保证fs上不会在close状态下被写入,close方法上有一个参数 是否等待merge完成,只要在线程模式下,是可以保证得到期望结果的,偶尔io不行的时候也就是偶尔出错一次不会产生太多问题。
好了,上述的方法还没有得到验证,尤其是线程模式下环境是很复杂的,而lucene又要求严格的线程安全,因此大量的实验室少不了的。
其实在我的理想中希望做一套lucene的服务,能够完全兼容于jdbc,这样可以实现服务的从db到全文的0切换,毕竟在like下lucene的效率之高使得数据库系统完全被秒杀。当然进而还有很多问题,比如表和表的关系,在lucene中怎么对应,这是后话,待我想想再来说,先去试验多线程安全模式下的写入。
分享到:
相关推荐
XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该...[CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
<preconditions><![CDATA[1.使用udp_bi用户在PLSQL正常登陆UAT数据库<br> (UAT数据库IP: 10.0.13.178)<br> 2.数据库脚本已下载至本地环境]]></preconditions><importance><![CDATA[2]]></importance><steps> <step>
[CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></...
[CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml...
ATTLIST 电话 类别 CDATA "移动电话"> ]> <联系人列表> <说明>&content;</说明> <联系人> <姓名>刘保文</姓名> <ID>201003101115</ID> <公司>腾飞汇通有限公司</公司> <电话 类别="移动电话">18993380967</...
自己将数据导入到xml中的,希望有需要的朋友可以自己下载,格式为<!DOCTYPE PCAroot[ <!ELEMENT PCAroot (Province*)> <!ELEMENT Province (City*)> <!ELEMENT City (Area*)> <!ELEMENT Area (#PCDATA)> <!...
本文给大家解析使用<![CDATA[ ]]>解决xml文件不被转义的问题, 对mybatis 中的<![CDATA[ ]]>相关知识感兴趣的朋友一起看看吧
[CDATA["&fromusername&"]]></ToUserName>" &_ "<FromUserName><![CDATA["&tousername&"]]></FromUserName>" &_ "<CreateTime>"&now&"</CreateTime>" &_ "<MsgType>news</MsgType>" &_ "<ArticleCount>3</...
[CDATA[10]]></LoginTimeOut> <QueryTimeOut><![CDATA[3600]]></QueryTimeOut> 原始set.xml数据库连接节点缺少以上两个节点请添加,LoginTimeOut为数据库连接超时时间,单位秒,QueryTimeOut为SQL语句执行超时时间...
<srvver>1.0</srvver> <srvcode>000</srvcode> <payload> <param type=XML key=data> <![CDATA[ <Response> <Execution> <Status code=0 sql_code=0 description=执行成功!/> </Execution> <ResponseContent...
[CDATA[gh_33bb5907f91e]]></ToUserName> <FromUserName><![CDATA[ojLh3jkYtiszyEY-_sM_8yrNxSc4]]></FromUserName> <CreateTime>1363231643</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><...
微信小程序支付JSAPI交易类型 已通过测试 返回例子如下: <xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code>
[CDATA[//><!-- var scrollPic_02 = new ScrollPic(); scrollPic_02.scrollContId = "ISL_Cont_1"; //内容容器ID scrollPic_02.arrLeftId = "LeftArr";//左箭头ID scrollPic_02.arrRightId = "RightArr"; //...
[CDATA[http://t{$serverpart}.tianditu.cn/DataServer?T=cia_w&X={$x}&Y={$y}&L={$z}]]></url> <serverParts>0 1 2 3 5 6 7</serverParts> <backgroundColor>#00000000</backgroundColor> </customMapSource> </...
[CDATA[FAIL]]></return> <return><![CDATA[openid is invalid]]></return> </xml> 原因是,传有效过去不是的opendid。不小心看错了,把用户id 当做openid传过去了。 当统一下单成功,会返回以下格式的...
android 使用saxparser 解析<![CDATA[ ]]>标签数据。 见附件实例
4、支持 CDATA 。5、开源(如果有任何问题可以自己修改)。缺点:。1、加载速度稍微逊色于支持库,但是查询速度很快。2、不支持DTD,也就是类似于如下的节点。 <!DOCTYPE note [。 <!ELEMENT note (to,from,...
<sex>girl</sex><!--这个sex和teacher根元素中的sex发生命名冲突--> </student> </teacher> 2、名域的声明 (1)直接定义 xmlns:名域前缀="名域的URI"(唯一性) 类比:名字与身份证 名域的使用,名域...
<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value> </property> <property name="getRegexUrl"> <!-- 提取最终URL --> <ref bean="ahrefGetRegexUrl"/> </property> </bean>...