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

如何使用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日在北京国家会议中心隆重举办。产业观察、技术培训、主题论坛、行业研讨,内容丰富,干货十足。 需要购买的朋友,请抓住这最后的机会,点击报名!

搜狐否认“情理之中”的退市 上市仍是最优选择 六大BaaS产品推荐:移动开发必备的后端云服务 未遵守承诺 微软遭遇欧盟7.31亿美元巨额罚单 PaaS正能量:6人团队,仅1人全职后端 支撑6000万用户 三星:我不抽成,收益100%让开发者拿去! 腾讯开放平台推“送红利计划” 承诺半年内不参与分成 JavaEE快速开发框架Wabacus 4.0发布,开发效率提高五倍以上 市盈率创新高 谷歌为什么会在苹果博弈中暂时胜出 从Rovio遇到危机,看现在应用市场的演变 Windows Azure支持Android应用 面向东亚推广云服务 抛弃DRAM、拥抱闪存,Facebook重做Memcached 夏普三星联姻 电子行业或将多元化发展 从下拉菜单设计细节看Amazon对用户体验的把握 Chartboost美女CEO:40人团队服务3亿移动玩家 Distimo:新晋开发者想让产品得到关注越来越难 OpenFeint绝迹后,开源项目OpenKit继续前进 美FDA通过搜索引擎和社交平台预警药品副作用 挖坟三星“眼球追踪技术”背后的技术团队 为什么开发者热衷在Stack Overflow上查阅API文档? Facebook推新News Feed 欲造就“个性化报纸” 女神程序员的一天:暴力测试social爬虫代码 2013IBM云存储路线图:更快,更简单,更安全 二战大数据故事:数学家、物理学家、概率论击败德国潜艇 软件定义网络服务商Pertino B轮融资2000万 Scringo社交组件,让你的应用“热闹”起来! Android开发必备:Eclipse 4.2 SR2版本发布 32场!2013年360HTML5校园行首站告捷 移动周报:不做内容,只钻技术的快播 一周消息树:中国开源发展缓慢的“病因” 百度应用引擎BAE正式开放 新增支持Node.js CloudVelocity,下一个VMware? 二个简单Access问题 JBUILDER 6 FOR LINUX 的注册码谁有啊 VB中如何判断打印机的状态(空闲还是脱机等)? 难道没有高手了吗?为解决在Win32上MPEG-1视频流播放延时问题再次悬赏6000元人民币 关于Exp时候的4031错误? JBUILDER 6 FOR LINUX 的注册码谁有啊 谁会用safileup上传下载文件? 关于OCX控件的两个问题 数据库更新不成功的问题!(菜鸟高分提问!) 求助:多线程访问数据库的问题 触发器?很简单的 紧急求助???狂加分!!! 不相上班,怎么办呀?各位有何高招? 学习ATL的建议!!! 请问: 多个javabean怎么相互调用?如。。。。 二个简单Access问题 qq号码集合之增强版 这样的查询该怎样实现呢? 求:谁有立方体旋转的程序?需要源代码!谢谢,万分焦急!!!谢谢,100分送!!! 怎样实现这样的界面? 关于多线程中操作数据库 给一个c#连接sybase数据库的例子,谢谢! c#datagrid 增加,删除,修改 工作急需,help!!!!!!!!!!!!! 请哪位高手帮小弟做一个井字棋游戏作业,救小弟一命,感激投地并送以高分,我的信箱见内! Exchange2000的怪问题,请高手指教。 三层中的问题? datawindow加计算域或line的程序加在哪? 请问各位收邮件的程序采用的是什么组件??!!因为CFPOP,JMAIL在收中文附件时都会出现乱码。参与有分。 求助EXCEL解密 !!大送分99分! 请教JAVA中读一个文件的时候 怎么锁住它 不让别的程序来写 在ASP页面中怎样获得域用户的信息? 求助: 移值C++出问题 谁能解救我于水火???怎样解决循环运算次数太大造成程序死机的问题? 谁有delphi或bcb的简单的画图程序的源码 二个简单Access问题 Access不支持位运算吗? qq号码集合之增强版 递归函数的工作原理! 二个简单Access问题 如何在声音控制中将“全部静音(M)”选中,实现系统静音?在线等候! 韩国变性艺人河莉秀以“性感之枪”姿态攻陷香港 如何用javascript在客户端清空<input type=file>的value值?50分! qq号码集合之增强版 二个简单Access问题 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁有《Inside the c++ object model》中文名《深度探索c++物件模型》的电子版。 谁知道 bzero memcmp 等函数的原代码在哪个目录下 哪个文件里 我实在找不到了 请高手指点 或提供线索 Date Time Picker如何不弹出 这里是做梦的场所 二个简单Access问题 水域生态系统中有多种多样的生物,其中属于生产者的是:A鲫鱼 B浮游动物 C水藻 D淤泥 2014最新人教版初中地理课本封面是哪 从海水中提取淡水和海水中把盐分离出去有什么区别?"使海水淡化的途径 通过海水中提取淡水或从海水中把盐分离出去(脱盐),都可以达到淡化海水的目的."盐分离出去不就是剩下淡水么?也就 水 无机盐 泥沙 水草 藻类 细菌 浮游动物 太阳 鱼 其能源来自?生产者有哪些 消费者是?写出一条食物链 “日出江花红胜火,春来江水绿如蓝”湖中的绿色来自哪类植物? a.藻类植物b.苔藓植物c蕨类植物d种子植物 有关中国近现代史纲要的论文应该怎么写? 某池塘生态系统的一条食物链:浮游植物→浮游动物→鱼→水鸟.假如水鸟只能依靠吃鱼增加体 为纪念中国建党90周年,老师要求写一篇不少于500字的作文,围绕‘历史的选择’为主题一定要是关于建党90周年,还要围绕‘历史的选择’为主题.十万火急啊. 急求中国近现代经济史的问题的答案 南北两极气温趋势画画图也行, 高一生物(基因频率的计算)某植物种群中,AA个体占16%,aa个体占36%,该种群随机交配产生的后代中AA个体百分比,A基因频率和自交产生的后代中AA个体百分比、A基因频率的变化依次为:A增大,不 大量氮 磷等植物性营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生生物死亡,一般称为什么?A.富营养化B.湖泊酸化C.有毒物制污染 60年来,祖国的成就与变化写作文用的材料! 如果在一个种群中,AA比例占1/3,Aa比例占2/3,已知道aa在幼龄阶段死亡,请问种群随即交配一带后,子代成熟个体种群中a的基因频率为( ) 大量氮磷等植物胜营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生物死亡,一般称为()A 富营养化 B 湖泊酸化C 有毒物质污染 D 湖泊氧化请认真对待请认真对待。 祖国60年来变化(祖国以前的事与现在的成就)地下城与勇士有天界吗?如何去? 色盲基因出现的频率为7%,一个正常男性与一个无血缘关系的女性结婚,子代患色盲的可能性是A 7/200 B 7/400 C 8/400 D 13/400或 1/400 大量氮、磷等植物胜营养元素进入水体后,营养物质过剩,藻类大量繁殖,水质恶化,水生生物死亡,一般称为急 祖国变化、成就祖国的变化、成就,谢谢 初中地理课本上海预初地理课本绪论里有个图,是几个人在海边拉绳子的是什么人?---------------------------课本上有,应该是福建那一带的人 一个作文是以庆祝中国建党90周年的作文,或者以光辉的旗帜为题的作文,400到500字,急! 有两种烃,它们均含碳92.3%,氢7.7%,A的密度为1.16克/升,B对氢气的相对密度为39,A可使高锰酸钾酸液褪色,B却不能.求它们的分子式,并说明是甚麼物质. 探究 培养液中酵母菌种群数量的变化人教版生物书 必修三 68-69页 实验请大家给我讲讲:酵母菌的数量变化应该满足什么规律,图像大致怎样? LiF NaF KF CsF 四个物质中溶解度最小的是? 祖国60年来的变化军事:教育:政治: 请问:初中地理课本中“世界之最”的有 藻类植物及其所含营养物质 高高个子身穿青,脸儿喜皇笑迎迎,结果好像中秋夜,圆儿里面藏星星. 什么鱼吃水中的绿藻?鱼池水中绿藻繁殖很快,想养些专以绿藻为生的鱼来遏制它, LiF.NaF.KF.CsF谁的溶解度大,为什么? 邹忌讽齐王纳谏1下列朗读停顿标注有误的一项是【 】A臣\诚知\不如徐公美.B群臣吏民\能面刺寡人\之过者,受\上赏.C四境之内\莫不\有求于王.D此\所谓\战胜于朝廷.2下列句中加点 种群的基因频率总是不断变化的,物种的基因频率总保持不变,这句话哪儿错了? 决定气温的热量主要来自于哪里?主要分析一下高原日温差为何比平原地区大.比较疑问的是高原通过大气路程不是比平原短吗?为何白天气温还比平原气温低? 《邹忌讽齐王纳谏》有几篇 自然选择可以定向改变种群的基因频率 因而可能导致新物种的形成这句话为什么是错的 猜出下列谜语I have cities but no houses ; forests but bo trees; rivers without water .What I'm 邹忌讽齐王纳谏 急⑴ 邹忌讽齐王纳谏选自《 》它是战国时游说之士的_____和______的汇编.⑵ 邹忌讽齐王纳谏的作者是______,_______时______国人. 一个种群中,控制一对相对性状的各种基因频率的改变说明物种在不断进化 猜出下列的字谜……是字谜,别猜到其它的1、喜上眉头( ) 2、你我各一半( ) 3、干涉() 4、加上两点就能飞 ()5、一只黑狗,不叫也不吼() 6、综合门市() 7、两人力大冲破天() 关于《邹忌讽齐王纳谏》在《邹忌讽齐王纳谏》中,邹忌从3各方面劝说.为什么要从3各方面劝说?有什么目的? 一个圆柱体和一个圆椎体的体积相等,底面直径的比是1:3,圆柱体与圆椎体的高的比是( 我能猜出下列字谜.九点——( ) 怎样用手机gps 三个圆椎体体积的和正好等于一个圆柱体的体积 对还不对 关于物种分类在物种分类中,"种"为什么没有英语单词?无脊椎动物为什么没有"纲"的分类? 手机上怎样才有GPS啊? 河北唐山七年级地理、思想品德、生物、历史用的是什么版本的教材 请将下列谜语猜出来会吃没有嘴,会走没有腿.过河没有水,败了没有罪. 手机gps如何定位 原生动物门中藻类的分类与色素种类营养方式进化关系和代表藻类?呵呵,要是表格就更好了 关于物种划分的问题按照物种的定义,划分物种主要是依据生物间是否能交配并产生可育的后代那么,同种生物的2倍体和4倍体能交配,但产生的3倍体后代是不可育的,是否2倍体和4倍体就形成了 山东教育出版社高中地理课本必修一主要是什么地理如题另外,那一册是人文地理呢? 藻类色素都有什么?求系统的整理后的答案.无 猜下列谜语 从哪里可以买到湖南教育出版社的初中地理课本啊? 如何证明鱼的色素细胞中色素分子的移动是微管依赖性的越快越好 入侵物种分类鉴定方法 现在都在呼吁低碳生活,但塑料似乎带来了很多的麻烦,塑料会不会淡出我们的生活? 追寻红色足迹 论文我去的是福州路的上海书城,800~2000字 如何从海水蒸发中分离各种化学成份?能得到纯的盐吗?纯盐就是可以使用的食盐.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘