目前我在生產中有一個監視器應用程序。這臺顯示器的工作是收集社交網絡上的特定條目,如Facebook,Twitter,YouTube等。簡單但繁重的應用程序消耗大量資源。如何優化?
以下是從Twitter的API調用的一個簡單的例子:
http://search.twitter.com/search?q=Stackoverflow&format=json
基本上,這是該系統的作用:
- 從數據庫中選擇搜索詞給出一個特定的順序
- 致電API
- 從當前搜索中收集所有推文狀態ID和用戶ID
- 檢查數據庫是否存在
- 運行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和內存? 有什麼更好的我可以做的?
爲什麼不使用'比賽...... againts'? – Nemoden
或者你可以使用'獅身人面像' - 會更好。 – Nemoden
全文搜索將遠遠比較有效 – 2011-07-22 03:23:39