2011-04-15 45 views
0

近日,微博工程師發佈非常深刻的印象blog有關使用Lucence而不是MySQL的爲他們的搜索架構。 所以,我很好奇他們爲什麼選擇lucence,爲什麼mysql不符合他們的要求?另一方面,DBMS數據庫系統的性能(或可擴展性)的瓶頸是什麼?twitter如何通過使用lucence改進他們的搜索?

任何想法感謝!

謝謝進階

萬斯

回答

0

想想Lucene索引的東西就像你在一些大型工具書後面有索引:對於出現在書中每一個重要的名詞,它列出了所有在它出現的頁面。因此,如果您想查找書中出現詞條的所有位置,請轉至索引並獲取頁面列表。

Lucene的做什麼是需要的文件,他們闖入他們個人的話(這個過程稱爲「標誌化」),然後爲每個單詞在其索引這個詞出現在該文件中/令牌寫。

想象索引就像一個哈希表(它不是真的一個,但它是一樣的想法):鍵是單詞/標記,每個鍵都有一個帶有列表引用的文檔(URI,文件名)的桶包含這個詞。它不存儲文檔本身 - 只是對它的引用。當您在Lucene上搜索時,您會提供一個關鍵字並獲取包含該關鍵字並出現在其索引中的文檔列表。

MySQL和其他的RDBMS是用於存儲和檢索記錄的優化 - 集合預先定義的,責令列。在列上放置索引時,它會將整個列的內容視爲一個單元。如果該列是一段文字,則不會將其分解爲文字。

+0

感謝@Elad和@Tushar的回答。接受你的答案,並會調查更多。 – Vance 2011-04-15 14:20:44

0

MySQL是關係數據庫管理系統,這是相當強大的,快速的。它確實支持全文搜索,但它不是非常好和高效。 Lucene是一個全文搜索引擎。全文搜索引擎能夠搜索文檔,文本等,因此他們能夠有效地搜索大量推文。

MySQL是很好的,當涉及到查詢列和太在這些列離散搜索值。像查詢肯定會受到打擊。

你可以找到關於全文互聯網上搜索大量的信息。

+0

謝謝。但是我仍然對爲什麼那些DBMS數據庫系統具有較低的性能以及其他像solr這樣的問題存在疑問。 – Vance 2011-04-15 09:44:04

+0

大多數數據庫都設計用於在表格上工作。當您在列中指定其中一個值時,它們可以有效地查詢表中的記錄。他們構建的索引基於整列值。他們不建立基於列中值的組合的索引。全文搜索引擎基於單詞,塊,而不是整列值創建索引。 – Tushar 2011-04-15 09:51:44