【发布时间】:2011-04-15 09:03:14
【问题描述】:
最近,推特工程师发布了一个非常令人印象深刻的blog,关于在他们的搜索架构中使用 Lucence 而不是 mysql。 所以,我很好奇他们为什么选择lucence,为什么mysql不能满足他们的要求?另一方面,DBMS 数据库系统的性能(或者说可扩展性)瓶颈是什么?
感谢任何想法!
感谢您的建议
万斯
【问题讨论】:
标签: mysql performance search twitter
最近,推特工程师发布了一个非常令人印象深刻的blog,关于在他们的搜索架构中使用 Lucence 而不是 mysql。 所以,我很好奇他们为什么选择lucence,为什么mysql不能满足他们的要求?另一方面,DBMS 数据库系统的性能(或者说可扩展性)瓶颈是什么?
感谢任何想法!
感谢您的建议
万斯
【问题讨论】:
标签: mysql performance search twitter
将 Lucene 索引想象成一些大型参考书后面的索引:对于书中出现的每个重要术语,它都会列出它出现的所有页面。因此,如果您想查找书中出现某个术语的所有位置,请转到索引并获取页面列表。
Lucene 所做的是获取文档,将它们分解成单独的单词(该过程称为“标记化”),然后为每个单词/标记在其索引中写入该单词出现在该文档中的位置。
把索引想象成一个哈希表(它不是一个真正的哈希表,但它是相同的想法):键是单词/令牌,每个键都有一个包含对包含文档(URI、文件名)的列表引用的存储桶那个词。它不存储文档本身 - 只是对它的引用。当您在 Lucene 上进行搜索时,您需要提供一个关键字并返回包含该关键字的文档列表,这些文档会出现在其索引中。
MySQL 和其他 RDBMS 已针对存储和检索记录(预定义的有序列的集合)进行了优化。当您在列上放置索引时,它会将列的全部内容视为一个单元。如果该列是一段文本,则不会将其分解为单词。
【讨论】:
MySql 是一个 RDMS,它非常健壮、快速。它确实支持全文搜索,但它不是很好和高效。 Lucence,是一个全文搜索引擎。全文搜索引擎能够在文档、文本等中进行搜索。因此它们能够有效地搜索大量推文。
MySql 在查询列以及这些列中的离散搜索值方面也很好。 Like 查询肯定会受到打击。
你可以在互联网上找到很多关于全文搜索的信息。
【讨论】: