最近,twitter工程师发布了一个非常令人印象深刻的关于使用Lucence而不是mysql的搜索架构。所以,我很好奇为什么他们选择收益,为什么mysql不能满足他们的要求?另一方面,DBMS数据库系统的性能(或者可伸缩性)瓶颈是什么?
任何想法都是值得赞赏的!
感谢Adv
万斯
发布于 2011-04-15 11:20:08
把Lucene索引想象成类似于一些大型参考书后面的索引:对于书中出现的每一个重要术语,它都列出了它出现的所有页面。所以,如果你想找到书中所有出现一个词的地方,你可以去索引,得到一个页面列表。
Lucene所做的是获取文档,将它们分解为它们各自的单词(这个过程称为“标记化”),然后在其索引中写入该单词在文档中出现的每个单词/令牌。
把索引想象成哈希表(实际上不是哈希表,但概念相同):键是单词/令牌,每个键都有一个包含该单词的文档(URI、文件名)的列表引用的桶。它不存储文档本身--只是对它的引用。当您对Lucene进行搜索时,您将提供一个关键字,并返回包含该关键字的文档列表,这些文档显示在其索引中。
MySQL和其他关系数据库管理系统的优化用于存储和检索记录--预定义的有序列的集合。当您将索引放在列上时,它会将列的整个内容作为一个单元来查看。如果那一栏是一段文字,它就不会把它分解成文字。
发布于 2011-04-15 09:09:35
MySql是一种RDMS,它非常健壮、快速。它确实支持全文搜索,但并不是很好和有效。Lucence是一个全文搜索引擎。全文搜索引擎能够在文档、文本等中进行搜索,因此能够高效地搜索大量的tweet。
对于查询列,MySql是很好的,对于这些列中的离散搜索值也是如此。就像查询肯定会受到打击一样。
你可以在网上找到很多关于全文搜索的信息。
https://stackoverflow.com/questions/5674548
复制相似问题