说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何使用15美元每月的机器实现百万文档检索

HTML文档下载 WORD文档下载 PDF文档下载
有了对搜索产品足够深入地了解,再进行一些实验,从廉价的硬件中获得高性能是完全可能的,我们完全可以避免对SaaS的依赖,从而节省大量的费用。了解系统的内部原理也能在你向SaaS平台转移时,帮助你作出正确的决定。

【编者按】如何在廉价机器上运行一个超过300万份文档的搜索?云计算时代,托管搜索服务很受欢迎,但实际上并不是经济的选择,而且也不一定能有效解决问题,Solr是一个基于Lucene的高性能全文搜索服务器,采用Solr,我们完全可以避免对SaaS的依赖,通过对搜索产品进行足够深入地了解,再进行一些实验,从廉价硬件中获得高性能是完全可能的,那怎样才能实现这个过程?系统集成架构师Richard Donovan为我们带来了精彩分析。

以下为译文:

Gwittr以twitter搜索为人所知,同时它还是一个统计信息的网站,除了提供有关推文及链接网页的扩展搜索,也进行数据的统计分析。这篇文章重点介绍如何在廉价(< $15/月)机器上运行一个中型、大型搜索(超过300万份文档)?


面临哪些挑战?

  • 把这个问题丢给云计算既不便宜也不一定能得到解决;
  • 避免为不必要存储空间支付过高的费用;
  • 了解文档字段定义并针对检索需求做优化;
  • 精心设计查询;
  • 研究提交策略;

这些优化对Solr有效,也同样适用于任何基于Lucene的搜索引擎,比如Elastic Search。

把问题扔给云计算怎么样?

在这个云计算和EaaS(Everything as a Service,一切皆服务)时代,对于那些产品需要搜索功能的公司,托管搜索服务很有吸引力。虽然一秒钟只收几美分的云服务听起来很划算,但是到实际应用中,每个月很容易就会产生数百甚至数千美元的费用。

避免这些费用的方法就是在vanilla硬件或者虚拟机上运行自己的Solr,这不仅可以帮助你节省大量的费用,而且还会帮助你获得有关搜索引擎的技能和知识,利用这些技能和知识,可以帮助你进一步节省大量的开支,即使在你要转用其他搜索平台的时候,这些知识和技能也是必不可少的。

在Gwittr中,我们可以在非常便宜的虚拟机中运行Solr实例,而且我们还可以在没有太大延迟的前提下,对数据进行相当高级的统计。于此同时,我们需要遵循以下几个原则。

搜索不等于存储

像Solr这样的搜索引擎不等于数据库存储,索引是很重要的,如果你忘了这一点,只将搜索索引看成内存,那就会产生一些风险:

  • 数据丢失。尽管Solr确实采用了一些保持数据完整性的技术,但保证数据持久性毕竟不是这些系统的长项。
  • 由于Gwittr这样的流媒体数据搜索,搜索专用的存储将得到快速发展。如果你正在使用SaaS,那就意味着将数据存储到Solr中或是内存中是很有必要的。
  • 敏捷性的损失。重建索引以支持新功能是不可避免的,如果不为此做好准备,将失去敏捷性。

优化#1  将搜索索引看作是可任意处理、易于重建的资源,因为当你需要引入新的特性时,应用程序需要经常性、大规模重建索引。

确定架构中的所有字段不通过默认方式存储,这对使用普通的功能已经足够了。一般你不需要在Solr中存储文档字段,除非你要使用突出显示的功能,因为Solr在使用一些突出显示功能时,需要用到文档中的初始文本。你也会想要存储更多的东西,比如文档标识符,因为在应用程序代码中,你可能会用到文档标识符将搜索结果链接回内存。

Solr还提供一套扩展的字段索引选项,帮助你进一步简化索引的过程。

浏览vs.搜索

虽然Solr、Lucene等一系列产品在市场上被称为“搜索引擎”,但实际上,称它们为优越的浏览引擎(具有面片化(faceting)功能的浏览引擎,这也是一个强有力的卖点)更恰当,相比那些开源数据库,它们有极好的文本搜索性能。如果你去了解一下用户体验是如何设计的(包括怎样才能让Web爬虫看到你的网站),除非你是Google,如果不是你很有可能会发现:大多数情况下,你的用户在搜索关键字后还会单击相关导航功能(面片(facet)以及类似文档……),至少像Gwittr那样,让访客可以看到所有的结果,在没有输入任何关键字的情况下对数据进行挖掘。

优化#2  在“浏览”相关查询时,最好使用Solr的过滤器,而不是在“q”参数中堆砌。Solr过滤的文档集被缓存,它们没有进行任何相关性得分的计算,所以,使用它们浏览查询将为你节省宝贵的I/O和CPU周期。

此外,搜索引擎不会在匹配集中显示太多的结果页,显示的结果页越多,需要的临时内存就越多,结果获取的速度也就越慢。就算是Google,搜索的结果最多也不会超出1000页。

优化#3  在应用程序中加入分页限制。

优化#4  只请求那些你需要用来显示结果的字段,从而尽量减少I/O和带宽。

Solr提交不等于RDBMS提交

在数据库中,我们无时不刻不在使用事务和并发机制,在更新操作涉及到许多行或者许多表时,这是确保数据完整性的一个正确方法,在Solr中,“提交”有着迥然不同的语义。

你很有可能已经知道,在Solr中没有所谓的“更新”、“数据完整性外键”或者“多表”,实质上,Solr/Lucene只是通过索引形式管理日益增长的文档集合。每次添加、更新或删除一个文档集合,Solr就会向其数据目录中添加一个新“段”(一堆文件),最后段的数量会越来越大。有一种机制可以应对这种情况,这里就不再赘述。

在Solr中,通过一个Searcher对象可以处理所有的搜索查询。Searcher建立在索引组成的段的集合上。提交在这里的作用很简单:“让Solr生成新的Searcher,包括新段,并以原子方式用它替换当前Searcher。”

不要过分追求速度

优化#5  避免不惜代价的并发提交,因为你不停地构建新的Searcher,之后又把它扔了。事实上,同时构建Searcher会导致在Solr的配置中产生一个显式设置对数目施加严格上限,默认值是2。所以如果你同时提交的话,很有可能会获得异常堆栈,抱怨打开的Searcher太多。

优化#6  监视建立新Searcher的时间。优化在Solr中新建/更新文档的响应时间(流行的说法是“实时”),总的来说就是尽量减少Solr生成一个新Searcher对象的时间。监视Solr日志,查找“事件=newSearcher”,然后查找那些行QTime(查询时间),为的是使时间尽可能合理的短(我们稍后将看到为什么“合理”在这里很重要),因为构建新Seacher的速度越快,你可以构建的Seacher就越多,插入、更新和删除的响应就越快。

在Solr中有两个主要的提交策略。第一个策略就是让Solr在固定的时间间隔完成提交,该方法被称为自动提交,应作为首选策略考虑,它可以帮助你摆脱对应用程序的手工管理。事实上,如果你使用了自动提交,那让应用自己提交就成为一个非常糟糕的办法,记住重叠Searcher的上限也适用于自动提交的Searcher,所以要让自动提交比构建Searcher的时间更长。自动按固定时间间隔提交存在问题——在索引没有更新时,定期构建新的Searcher只是在浪费CPU,这也为我们指出提交的第二个策略:

优化#7  让应用程序根据需要执行提交。并发是一个糟糕的办法,应该实施全局的锁机制。

给Searcher热身

你可能会想“构建只增加了一个段的新Searcher能有多慢?Solr很好地支持这一点而且肯定会非常快”。你说对了,它的速度确实非常快。

唯一的问题是新Searcher最初的几个查询将会非常慢,这并不好。在高容量搜索环境中,几个缓慢的查询可能成为产品的短板,最终影响到应用程序层。这些最初查询缓慢背后的原因是新Searcher缓存中填充的东西是无用的。在Solr术语中,这被称为“Cold Searcher”。Solr允许使用“Cold Searcher”,但幸运的是这仅存在于其他Searcher也没有被注册的情况下。也就是说,它只发生Solr的实例刚开始时。在所有其他情况下,Solr会提供了一些给“Searcher”热身的机制,确保在它们被用到服务请求时,查询的速度不会太慢。

优化#8  有两组设置影响到新Searcher的热身,应该将两者结合起来使用。

  • 一组是设置Solr对热身中的Searcher进行查询。针对这些查询,可以建立几个实时应用程序的典型查询样本,使其在移除过滤器后能更通用一些,关键是要尽量包括将在应用程序中使用的各个方面,还可以发出几个关键字查询,因为如果有足够的空间,这种方法会在内存中加载全文索引。
  • 另一种给新Searcher热身的方法是在缓存中建立autowarming。高速缓存autowarming是将旧缓存中的值预先填充到热身中的Searcher缓存中。

对于热身中的Searcher关键是要找到建立新Searcher与注册Searcher在时间上的平衡(建立新Search可以很快——但很危险),找到这个平衡点需要进行实验,而这一切都取决于应用程序层的需要。

结论

有了对搜索产品足够深入地了解,再进行一些实验,从廉价的硬件中获得高性能是完全可能的,我们完全可以避免对SaaS的依赖,从而节省大量的费用。了解系统的内部原理也能在你向SaaS平台转移时,帮助你作出正确的决定。SaaS是个避免扩展和备份等头痛事情的好办法,但不要忽略了这些服务的背后的技术,不然即使你支付很高的费用,也不一定能得到高性能。

原文链接:Guerilla Search with Solr - How to run a 3 millions documents search on a $15/Month machine. (翻译/毛梦琪 责编/魏伟)

以“ 云计算大数据 推动智慧中国 ”为主题的 第六届中国云计算大会 将于5月20-23日在北京国家会议中心隆重举办。产业观察、技术培训、主题论坛、行业研讨,内容丰富,干货十足。 需要购买的朋友,请抓住这最后的机会,点击报名!

SA:2014年移动互联网十大技术创新预测 回顾2013:HBase的提升与挑战 Google打造云中Hadoop便捷版,强势对抗AWS 【信息图】专业Web设计师和业余设计师的发展状况并不协调 先试后买:Agawi推新型广告服务AppGlimpse 搜狗CEO王小川:“硬件免费”是误区 平均比Hive快24倍,Impala剑指Stinger 利用ElasticSearch和Redis检索和存储十亿信息 微软高管再度失血 媒体及娱乐副总裁因内部重组离职 Google研制智能隐形眼镜 帮助病人监测血糖指标 盘点2013:最优秀的HTML5&amp;CSS3设计【多图】 AMD:未来PC将同时搭载Android、Windows双系统 如果你是CEO,你打算给自己开多少工资? IBM X6架构中国首发,目标是云与大数据 Pivotal聘用eBay前副总裁,继续发力云计算市场 智能手机的功能越来越复杂,可惜用户不买账 一周消息树:Windows 9要来了,会有哪些改变? 简单几步解决IE11无法显示此页的问题 研发周报:Java 8最终发布日期敲定,即使有bug也要发布 一周云热点:Google打造云中Hadoop便捷版,强势对抗AWS 追溯Unite大会设计理念 感受Unity进化史 移动周报:仰望大神,不如退而探索! 腾讯发布QQ浏览器微信版 支持拖拽分享、消息提醒等功能(图) 乐视TV:LetvUI连续31周迭代36个版本 190个乐迷需求实现119个 云服务商评估体系建立,首批10家企业通过可信云服务认证 《找你妹2》开发者云中游再声明:热酷涉嫌严重违约发布侵权竞品 柴可:大姨吗的轻应用抉择 盘点2013年IT界25个最古怪的面试题 云计算再掀创业热潮,19家企业入驻微软创投 IBM斥资12亿美元,全球大规模扩建数据中心 “Careerfocus之夜”2014年新春客户答谢晚宴在京举办 WINNT 4.0问题 ????"帮助"文件怎么做?? 在ASP中确定当前用户帐户用何办法? 我以前问过的问题,但是没有解决?现在100分买?谁能解决???? fastreport的中文帮助,或者例子? edit的问题,up有分 用adoquery建立的查询在执行时出错! 还有一个问题 业务纪录的自动编号!!! 请问各位大侠."查找",这个函数怎么写. Proc++ :where LPAD(FieldName,6,'0') = :myFieldValue 为啥错? 用OPENGL编制基于对话框的程序要求把所绘的三维图形显示在对话框的一个区域??? 谁知道用socket通信,一秒鈡最多可以传多少条? 我要是想把已有SQL数据库变成*.SQL文件到别的机器上直接建库怎么做? 我用标准输入输出流来输入字符串到string的对象里,为什么得不到空格和以后的字符? 转一篇文章——有关LSD的罐头 (有点长,没耐心的就不用看了^o^) 送分! 超过10个回复请勿再进!!! VC程序调试问题 懂电路分析者请进 求树型菜单的代码??马上给分!!! VC可以调试可执行文件吗??? 请高手指点迷津 :) 求树型菜单的代码?? 如何使列表控件的第一列居中(包括标题文本和内容文本)??? 用查表法按ALPHA混合R、G、B也会这么慢?奇怪!(有源码)(50 怎样用vc开发一个动态链接库让PB调用,要求参数为字符串 3dmax 的问题 关于用alert("信息!")弹出的对话框 up up up up up up up up up up up up up 请问“IE登录时”为什么Domino检测不到我的Username and password? 着急,这条sql语句怎么写?????? 爱的密码 散分啰!!统计BCB论坛现有成员... 这样的COM组件如何实现? 请教:我想学lotus,可不知哪有lotus和lotus教程下载,望指教! 多选项提交过来的值是什么类型的? ORA-03113: end-of-file on communication channel谁知道??高手救命! 星际争霸几大战略(大家切磋切磋) CHtmlView的刷新问题 关于asp.net加密的讨论 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!!! 》》》菜鸟发问:SQL SERVER2000 可以对 office 文档进行全文检索吗? How to alter DBGrid Scrollheader Color? c怎样访问数据库啊?一定给分! from里的参数传递为ENCTYPE="multipart/form-data"时的问题? 网吧问题 如何在txt文件中查找字符 请问如何实现当进入一个combox时自动下拉列表框(不用用鼠标去点) 关于volatile 修饰词 过去用Delphi开发数据库都是用Access,现在急需使用SQL Server。请问:我必须掌握SQL Server中的那些内容。 如果我想删除日志文件的所有记录该怎么办?????? 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!! 一个三角形的面积是36平方分米,如果把他的高扩大到原来的一百倍,它的底缩小到原来的十分之一,则面积是 一个三角形面积是十八平方米它等底等高的平行四边形的面积是多少 要想使塑料化工桶增加强度怎么生产我生产的是50公斤白塑料桶 一个三角形的面积是108平方分米,如果它的底缩小3倍,高不变面积是多少 夏天给自行车的轮胎打气时,为什么不能打得太足?从分子角度讲要从分子角度说明! 化工桶上的CN号是什么意思那能不能根据上面的编号查处是那种物品,换句话说是不是一个编号一种料 一个三角形的面积是27平方分米,如果底缩小3倍,高不变,面积是多少平方分米:如果底扩大2倍,高缩小2倍,面积是多少平方分米? 用分子的知识回答:自行车轮胎打气后涨大变硬 图为正方形园子一角,正方形的边长为x,里面有两个半圆形花池,阴影部分是草坪,求草坪的面积.________. 三角形的面积是21平方分米,如果第缩小三倍,高不变面积是多少平方分米?如果底扩大2倍,高缩小2倍面积是几 轮胎充气有什么用呢?自行车的轮胎如果不充气会怎么样,为什么要充气? 如图,阴影部分表示校园的草坪,空白部分表示小路,计算草坪的面积.长为a,宽为b,小路宽为x. 一个三角形的面积是108平方分米,如果它的底缩小3倍,高不变面积是多少?如果它的高缩小3倍,底扩大4倍求面积 水果市场运来苹果6000千克卖出百分之20卖出多少千克还剩多少千克 某小区有一块边长8米的正方形空地,下面是小明设计的绿化方案平面图,空白部分为花坛,阴影部分为草坪.1.要在花坛四周围上篱笆,篱笆的长是多少米.2.计算花坛的面积是多少平方米? 壳牌的汽油质量怎么样请听说壳牌的汽油清洁度好,相同情况下不容易产生积碳,单身由于添加剂多同样体积的油跑公里数要少.是否是这样呢?他们的油是否可以使用呢? 一个三角形的面积比与它等底等高的平行四边形的面积少43平方米,求这个平行四边形的面积是(). 阴影的部分是草坪空白部分是花圃,求草坪的面积 壳牌汽油到底怎么样? 油罐车放油如何少给 某公园欲建如图所示的草坪(阴影部分)需要铺设草坪多少平方米?若每平方米草坪需120某公园欲建如图所示的草坪(阴影部分)需要铺设草坪多少平方米?若每平方米草坪需120元,则修建该草坪 壳牌汽油怎么样 装油的油罐车的尾部总装有一根脱在地上的铁链,这是为啥?HELPTHANKS 如图为园子一角,正方形边长为x,里面有两个半圆形花坛,阴影部分是草坪,求才草坪的面积是多少?他是多项它的次数是多少?图是一个正方形,正方形里面有两个半圆,半圆的大口一个朝左,一个朝 一个三角形的面积是8平方分米,若底和高都扩大到原来的5倍,它的面积是多少平方分 一个三角形的面积是80平方分米,它的底是16米,高是多少米?(用方程解答) 有一个长50厘米,宽30厘米的长方体水箱,放入一个长和宽都是10厘米的铁块,水面上升了1厘米,求铁块的高 一块三角形草地,底边长是150米,底边和高的比是6:5,这块三角形草地的面积是多少平方米? 王大伯开了一间水果店他到苹果产地进货每千克1.2元一次他到产地买了5000千克苹果光运费就200元他还想得到百分之二十的利润每千克定价多少元 如图所示,分别在三角形,四边形,五边形的广场各角修建半径为1米得扇形草坪分别在三角形,四边形,五边形的广场各角修建半径为1米得扇形草坪图1草坪面积为( )用π表示图2草坪面积为( ) 一块三角形地,底边长150米,底边和高的比是6:5,这个三角形面积多少平方米? 王大伯开了一个水果店,他到苹果的产地进货,每千克1.20元.一次他到产地买了5000千克的苹果,光运费就用了200元,他还想得到20%的利润,每千克应定价多少元? 如图所示,分别在三角形、四边形、五边形的广场各角修建半径为R的扇形草坪(1)图1中草坪的面积为 (2)图2中草坪的面积为 (3)图3中草坪的面积为 (4)如果多边形边数为n,其余条件不 已知三角形三边长分别为4,5,6,求这个三角形的面积我现在初二,别这弦那弦的 一油罐车有多少吨 如图所示,分别在三角形,四边形,五边形,六边形的广场各角修建半径为R的扇形草坪,如图所示,分别在三角形,四边形,五边形,六边形的广场各角修建半径为R的扇形草坪(图中阴影部分) (1)图1中 一个三角形的底边长6米,如果底边延长2米,那么面积就增加3米.原来三角形的面积是多少平方米? 5吨油罐车哪个好 如图所示,要在三角形广场ABC的三个角处各建一个半径相同的草坪,要求扇形的半径为20M,求草坪的总面积.(π取3. 一个三角形的面积是360平方分米,底是30分米,高是多少分米? 梦到油罐车爆炸梦见亲眼看见油罐车泄漏,起火,然后拨打了110,然后听到爆炸,死了好多人 如图所示,分别在三角形,四边形,五边行,的广场各角修建半径为r的扇形草坪. 油库、面粉厂、锯木厂、纺织厂、矿井、煤气站等地为什么要严禁烟火如题 北京房山油罐车爆炸了,油罐车为什么会爆炸?3Q北京房山油罐车爆炸了.请问,有什么危险因素会导致这种油罐车爆炸吗? 在一个长、宽、高分别为30厘米,60厘米,80厘米的长方体水箱中,不计厚度有A、B两个进水管,先打开A管,经过一段时间后打开B管,两管同时进水.下面折线图表示进水情况,请根据图回答问题.(A、B 油库附近严禁烟火是由于( )A.分子之间有间隙B.汽油分子在不断地运动C.同种分子的性质相同C.汽油分子非常小 油罐车爆炸影响会污染吗 一个无盖的长方体水箱的底面长80厘米,宽是50厘米,高是60厘米.这个水箱能装水多少升? 一个平行四边形的面积是28平方分米,与它等底等高的三角形的面积是,一分钟之后给我呼呼 为什么面粉厂和加油站一样,也高挂“严禁烟火”的警示牌?用化学知识回答 一个三角形的面积是12平方厘米,它的高是5分之12厘米,这个三角形的底是多少?求你们了,十分钟啊 果品公司购进5万千克苹果,每千克进价是0.98元,付运费等开支1840元,损耗为1%,如果希望全部进货销售后能获利20%,那么每千克苹果零售价应当定为多少元? 一个农民运来一批西瓜,进价为每千克2元,卖出每千克3元,每天能卖出200千克,每千克降价0.1元,每天可多出售40千克.另外,每天的房租等固定成本共24元.该农民每天赚200元,尖将每千克西瓜的售价 油罐车的立方怎么算如题 谢谢了请问下,现在油罐车都是椭圆形的,那它的立方怎么算呀! 果品公司购进苹果5.2万千克,每千克进价6.5元,付运费等开支6240元,预计损耗为1%,如果希望全部卖出后能获利20%,那么每千克苹果零售价应为多少元 油库重地 严禁烟火用阿拉伯语怎么说 家用的塑料盆桶碗,是什么原料制作而成的? 果品公司购进5.2万千克苹果,每千克进价0.98元,付运费等开支1840元,损耗1%,如销售后获利17%,那么每千克苹多少钱?一元一次方程 一个三角形的面积是十八平方米与它等底等高的平行四边形的面积是多少平方米 一般化工塑胶桶的材质除了PE的,还有哪些材质的啊?有PP、PET或PVC得吗?有的话在哪里可以买到的啊?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn