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

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

张艺谋今日正式加盟乐视 作品专区落户超级电视 WebKit华丽转身:欧朋浏览器8.0新鲜出炉 分析师称应出售Bing?除非微软倒闭,否则不可能卖Bing Go Mobile沙龙第二期:软硬整合与创客精神 专访西电黄宝林:《基于GPU的并行NMF网络聚类算法》获奖背后故事 友友姚宏宇:用C,C++和Java实现自主研发之后,放开心态迎“高朋” 新技术对传统学科的颠覆:系谱网使用大数据寻亲问祖 IDC:2015年全球平板电脑出货量将超PC Web开发者的福利 30段超实用CSS代码 库克出席D11科技大会:苹果公司没有陷入麻烦 千兆的带宽是不够的,最新研究将我们带入400G时代! 告诉你一个事实:移动互联网依然不大 一切才刚刚开始 戴尔的10亿美元云扩建计划到底是什么? iOS vs. Android,应用设计该如何对症下药? 扁平化设计五大原则 16种折磨开发者的方式 2013年度中国优秀开源项目征集活动正式启动 技术趋势:产品设计向“钱”看 服务器领域:旧时代已过 新时代正在降临 速度与金钱的碰撞:F1赛车将搭上大数据的东风 中国&#183;北京第一届开源大会Hadoop专场侧记:Hadoop已经成为大数据分析平台的标配 Marissa Mayer为何带雅虎重回门户时代? 开发者最爱的三款开发工具 Facebook开源JavaScript库:React 硬件天堂深圳行:从Seeed Studio、Knewone到柴火创客空间 消费应用开发难赚钱?做个企业app store吧 开发开源软件的智慧:够简单,很好用 历届中国云计算大会PPT集萃(终章):架构到实践的全面解析 透过现象看本质:详谈数据可视化 专家观点:HTML5无法彻底抹杀Native应用 Google地图工程主管Raj Shah跳槽至微软在线服务部门 Photoshop的问题 关于捕获硬件异常和软件异常的问题 Platform Builder初学者请教! 我的mysql-front在执行Sql语句有问题? 求救阿!!!!!各位大虾帮帮小弟阿!!!! PB调存储过程 关于捕获硬件异常和软件异常的问题 listView 的使用问题(二)????????????????????????????????????????????????????????????????????????????? 我在倒入数据时候出现错误(请回答) Solaris下如何使用USB存储器? 字符 "10"与"2"的排序问题? 各位帮我看看为什么关闭不可以那? 图像处理的高手请进:jpg的分割与组合问题? 请问:APPLET中如何调用一小段MPEG格式的VIDEO? html页面上的透明传输 如何得到winxp中的拨号上网密码 OpenGL与内存设备环境 如何在windows2000下安装apache服务器? 请问谁能帮我把linux里网卡芯片w89c940的驱动源程序提取出来?? html页面上的透明传输 C# webform的简单问题,如何关闭窗口 新手上路,Jb8的小问题 100分求购 经常看到说ADO很好的帖子,但是还是有一些疑惑,望高手赐教 用VC编写NetDDE程序,怎样设定客户程序连接服务器时的密码? 怪问题,请大虾帮忙!!!! 请问要学习数据库系统设计应该看那些资料? 急:高分求助关于jdbc连接MySQL数据库的问题. 如何用javascript来检测机器上是否安装word2000?请给点代码提示,先谢谢了 在本地机器上测试邮件发送 使用treeview数据库绑定,能不能绑到一个子节点下? 关于给目录树的子菜单再增加下层菜单的问题 要访问mysql数据库中排列在最前面的5条数据,怎么班? 高分征求 SQL SERVER 数据库的冗余、负载均衡的解决方案? 无法从硬盘安装Redhat9,大家帮帮我 Delphi7中安装上自己编写的控件后出现的问题??? 求助 100分深情大奉送!! 请教各位高手帮忙是关于EOT的??? 到底怎么用存储过程?是不是在查询分析器中使用? 到底怎么用存储过程?是不是在查询分析器中使用? 串口问题!!! behavior:url(#default#userData)的问题!马上给分。 如何得到所有用户表的表名?(在线等候) 怎么让打开的EXCEL文档自动到某一工作表?? 如何分别取得字符串中空格前和空格后的数据呢?如‘dfds df fds'分为dfds df fds. 谁知道MSWord的文件格式? 怎样给自定义函数设置多个参数项? 在URL地址栏中传递字符串参数遇到的一个问题??? 如何在繁體下打開簡體文件名的文件?要求不能用改名的辦法 插入数据到数据库! 高手关注--------送分-----------急急急! 什么是现代畜牧业?畜牧业的具体内容是什么? 乳肉畜牧业是什么意思 1000km/s算什么速度 如果抛物线y=(x-h)2+k的对称轴为x=1,经过2.-6 一套西装打七折售价210元,这套西装原价多少元如题,帮我解下这题数学题 修一条长150米的公路,已经修了2/3,剩下的4天修完,平均每天应修多少米? 学校分配学生住宿,如果每室住8人,还多12个人,如果每室住9人还少18人求房间的个数和学生的人数要过程方程解 什么是畜牧业 在直角三角形ABC中,斜边BC=4,则AB的平方+AC的平方+BC的平方的值是多少? tan半角公式为啥tanx/2=(1-cosx)/sinx? 小数乘法的意义如5*1.20.6*1.20.6*0.2 CAD画垂线一条斜线,如何从这条斜线的中间做一条直线且垂直于这条斜线,也就是说,这条斜线的中点同时也是垂点. 有关tan的.半角公式.半角公式和二倍角公式 整数和小数乘法的意义是什么.可以的话...我都忘的差不多了. 问一题畜牧兽医专业,获得性免疫了分为____、____、____、____. tan半角公式的疑问 有没有 直角三角形中斜边上的中点连接那个直角的边等于斜边一半的定理啊 原话是? 一套西服原来售价1200元,圣诞节期间打七折,买这样一套西服可节省多少元钱? 用半角公式求tan(π/8)+tan(3π/8) 某校有男生450人,占全校师生总人数的11分之5.这所学校教师人数占全校师生总人数的30分之1,该校有教师多 CAD中画垂线怎样不垂直 如何证明函数f(x)=|x|(|x-1|-|x+1|)是减函数? 农牧丰收是什么意思? 一件西服按成本价加四成出售,后因季节原因滞销,又按原价打七折出售,这是它的售价为392元,问这件西服的成本价为多少元?卖出后能赚多少元?(一元一次方程解) 1.已知F(1+2X)=X²-4X-1 求F(3-4X)2.已知F(根号X+1)=X+2倍根号X,求F(X)3.已知F(X)=3X-1,G(X)=2X+3求F[G(X)],G[F(X)]4.已知F(X)是一次函数,若F[F(X)]=9X+3 小数乘法要怎么做作业里有这种题, 等边三角形ABC内一点P到A、B、C的距离为3,3√3,6,求三角形边长 有没有什么方法或教材能快速提高数学成绩在高一? 小数乘法怎么做? DOC三角形三边分别是3和5,那么第三边中线的取值范围是什么? 18.已知关于x的方程x2- 3x +m =0的两个不相等的实根都在区间(0.,2)内,求实数m的取值范围 畜牧业中GAP什么意思 已知:如图①所示,在△ABC和△ADE中,AB=AC,AD=AE,∠BAC=∠DAE,且点B,A,D在一条直线上,连接BE,CD,M,N分别为BE,CD的中点,下列结论:①be=cd;②d为ab的中点;③∠amn=90º-∠man/2 计算:tan15度+tan30度+tan15度tan30度 请把我找点小数乘法比如1.1*1 如何用圆规画角 第七题.二元一次方程解. 等角的余角相等是真命题还是假命题? 怎样用圆规画角 第七题用二元一次方程解 样方法是否只能用来调查植物的种群密度?可以的话,举例说明一下,感激不尽啊,亲. 地球距月球最远和最近的距离是多少千米?(至少精确到1000km) 距太阳呢? 数学七下二元一次方程复习题 调查作物植株上的蚜虫的密度采用什么方法? 我国发射的第一颗人造地球卫星运行1000km需要2分零5秒,5分钟能运行多少千米? BE和CF是三角形ABC的高,在BE上截取BD=AC,在射线CF上截取CM=AB.求证:AD=AM. 求解耐克函数为什么耐克函数的图像分居在原点两侧 最小值怎么求解 我国发射的第一颗人造地球卫星运行1000km需要2分零5秒,5分钟能运行多少千米?【用比例知识解答】 若∠α为锐角,且tan²α+2tanα-3=0,求∠α的度数 三角形两边长分别是3和5则第三边中线的取值范围是 在直角三角形abc中,CD是斜边AB上的高,则下列等式不成立的是A:向量AC的平方=向量AC*向量ABB:向量BC的平方=向量BA*向量BCC:向量AB的平方=向量AC*向量CDD:向量CD的平方=(向量AC*向量AB)*(向量BA*向 若tan平方*A+2tanA-3=0 则锐角A=? 已知圆O的半径为1,O为主标原点,AB是圆O的弦,四边形ABCD是以AB为边的正方形,点C,D在圆O外,AB的长为根号2,点A的坐标为【1.0】B的坐标是多少,OC的长是多少、 白天说白话,晚上说什么话?如上 若角a为锐角,tan=3,则tan(90-a)=?若角a为锐角,tan a=3,则tan(90-a)=? 已知圆O的半径为1,正方形abcd的边ab是圆o的弦,则od的最大值为 你话你怕用白话翻译是什么意思 tan²α-4√3/3tanα+1=0(求锐角α) 已知三角形两边长为5和7,则第3边上的中线长M的取值范围是? 2012是真的吗?磁极真的会倒转吗?真的有小行星要撞地球吗?人类会全部消失吗? Google建造数艘集装箱货船引发猜荷兰边城见证《马约》风雨20年美国全球监听引发网络空间深刻变化中国军医表现突出 荣获厄瓜多尔最高荣党报刊文称回避养老双轨制其他改革恐难北京“10·28”事件受伤人员得到全台湾强震众生相:卖场员工拔腿跑 陆客“杀光中国人”事件彰显华裔维权的决心河南100多公里路200人执法 司机财政部:压缩各地公共财政预算结余结转国资委:国企改革方案争取三中全会后出北京禁止中小学售卖碳酸饮料 不利于学浙江省启动外商投资企业服务月银泰十五周年大庆十日 “小怪兽狂欢S10月制造业PMI创18个月新高 经多机构预测PMI将连续13月扩张 海探访日本第一的苗木之乡——匝瑳市(高偷渡惨案再现撒哈拉沙漠 尼日尔发现8解救儿童iPad上瘾 专家称需72小加拿大首设“比特币”ATM机 被批缺默克尔遭监听 德议员称斯诺登愿协助调感受灵秀山水,体验徽州文化外国核潜艇三种“销魂”的不安全“退役聘请118名专家民进党参选爆炸 所为何来?台彰化地检署再搜富味乡 查扣\"特黑一名女青年出租房内被害涉嫌危害公共安全钱多人不傻,如此“土豪”惹人爱于正出品 必属雷品?五省画家齐聚徐州散热器落户升辉装饰城“傻”邻居男子租车后转手抵押还债延迟退休的账划算吗?《坏祖父》北美夺冠国内多家景区从11月开始执行淡季票价而是一种能力春节首批旅游产品上架 价格上涨5% 化妆师上千元出场价打造“鬼魅妆”方向感网络热传“十八得了超级妈”
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘