2011-07-22 57 views
3

目前我在生產中有一個監視器應用程序。這臺顯示器的工作是收集社交網絡上的特定條目,如Facebook,Twitter,YouTube等。簡單但繁重的應用程序消耗大量資源。如何優化?

以下是從Twitter的API調用的一個簡單的例子:

http://search.twitter.com/search?q=Stackoverflow&format=json

基本上,這是該系統的作用:

  1. 從數據庫中選擇搜索詞給出一個特定的順序
  2. 致電API
  3. 從當前搜索中收集所有推文狀態ID和用戶ID
  4. 檢查數據庫是否存在
  5. 運行tweets插入消除現有的tweets和用戶,並防止重複的輸入錯誤。

我們完成了兩個表,一個用於用戶,另一個用於推文。

的問題

後,MySql數據庫達成的鳴叫表200.000項(第一月),該可視化數據開始對現有的執行select查詢時消耗太多資源的應用鳴叫。

爲什麼?

系統具有獨立帳戶,每個帳戶都有與其特定業務相關的特定搜索字詞。當我們執行選擇時,我們只需要選擇與我們帳戶的條款相關聯的那些。我們看不到與我們無關的推文。 但是一條推文可以在很多賬戶上。

的實際查詢(傷害我的眼睛)

SELECT * 
    FROM tweets 
WHERE 
    content LIKE '%searchterm1%' 
    OR LIKE '%searchterm2%' 
    OR LIKE '%searchterm3%' 
    OR LIKE '%searchterm4%' 
    OR LIKE '%searchterm5%' 
    OR LIKE '%searchterm6%' 
    OR LIKE '%searchterm7%' 
    OR LIKE '%searchterm8%' 
    (and son on...) 

兩種可能的解決方案

一)創建tweets_searches表,將有兩個外鍵:tweet_id和SEARCH_ID。這樣tweets表上的每條推文都可以與一個特定的搜索詞相關聯。

因此,我們不會搜索特定的字符串,而是加入這些表格。 b)繼續搜索,但使用全文搜索,使用MATCH() AGAISNT()

b)

的主要問題

這就夠了,以減少資源消耗,如CPU和內存? 有什麼更好的我可以做的?

+2

爲什麼不使用'比賽...... againts'? – Nemoden

+2

或者你可以使用'獅身人面像' - 會更好。 – Nemoden

+2

全文搜索將遠遠比較有效 – 2011-07-22 03:23:39

回答

4

免責聲明:這是我在這個問題上的意見,這可能是答案之一:


我覺得match ... against是適當這裏。這就是所謂的「全文檢索」。對於更復雜的搜索,我會使用Sphinx - 它索引你對自己的數據庫(已經擁有它的機制),並進行搜索比MySQL快的方式不