100萬條以上數據,想要做0.01秒以內響應的中文全文索引怎麼辦,SQL Server,MySQL不精通?阿裡雲開放搜索服務打開了新思路... ...
大家好,我又來了,答應雲棲論壇一周一篇文章, 由於工作太忙已中斷1個多月實在抱歉,這一次寫點輕鬆有趣的東西-快速的做個資源搜索站
依稀記得十來年前,帶寬還只有2M的時候,受各個論壇啟發,做了可以搜索嘿嘿嘿資源的搜索站
一晃這麼多年過去,嘿嘿嘿的東西依然喜歡,但世間卻變化萬千
資源種類已不僅僅是X片,高清電影、紀錄片、無損音樂、美劇、大型軟體等等,似乎更加吸引
資源呈現方式也百花齊放,從最早的BT文件、電驢地址,到現在的磁鏈地址、各種雲盤等等
而傳統的P2P下載方式也變得格格不入,因為硬碟容量已經大到但凡大一點雲存儲服務商都把所有資源緩存在自己的伺服器上,進行哈希匹配後直接提供離線下載資源(這也直接導致快播王欣被抓)
因此,作為資源的入口,電驢地址和磁鏈地址依然有著強大的生命力,受益於各商家龐大的離線存儲,電驢、磁鏈地址已經近乎等同於直接的HTTP地址,並且有著比HTTP地址更友好的通用性。
隨手百度一下BT搜索、磁鏈搜索關鍵詞,就會出來很多類似的搜索網站,比如以下這些
而今天,我們也來搭建一個類似的網站,只不過
藉助新技術,不僅搭建過程更加簡化,建設思路也能有所革新,所以今天文章的主題就是:
使用阿裡雲開放搜索服務快速搭建資源搜索網站
先看一下最終的建設效果(訪問地址:https://sodemo.alphams.cn/)
那麼下麵我們就一步一步來搭建這個簡單的資源搜索網站
一、搭建前的一些準備和分析
資源搜索網站有如下幾個關鍵點:
1、原始數據
沒有個幾百萬條初始搜索數據,都不好意思和別人說是做資源站的,在這個案例裡面,我們採用了simplecd官方製作的電驢地址打包,雖然年代比較久遠,但也有百萬條左右,下載地址為:
https://www.douban.com/group/topic/17230136/
請註意保護版權!
2、數據存儲與檢索
十多年前資源的數量以百萬計算,現在一個飽滿的資源站的資源數量應該早已過億,資料庫大小也應該在50G以上,這樣的數據,使用阿裡雲RDS MySQL資料庫具有較高的性價比,數據量再大一些還可以結合DRDS分散式資料庫一同使用
對於具體的檢索技術,不同的資料庫的全文索引、分詞等技術各不相同,甚至連MySQL的各種版本之間的處理都有區別,而由於資料庫我是確實不會。。要是會的話就不至於一直用Linq ORM了。。我想象中的100萬條數據全文檢索的速度應該在0.01秒左右,但自己操作MySQL進行配置和優化,始終達不到這樣的查詢效率
因此今天這裡選擇了阿裡雲的開放搜索服務,讓阿裡雲來處理這些難點。
這也是今天的一個主要講解重點,實測證明,確實檢索效率很高!
3、數據爬蟲與更新
初始數據載入後,後續的數據更新也非常重要,主要靠爬蟲程式進行每日更新,重點在於爬蟲程式的效率的所爬目標的資源質量,這裡有兩個難點
1)所爬目標資源。電影站、軟體站、BT搜索站等等,都可以是爬蟲目標資源,而如果掌握了搜索引擎的高級用法,並引入無限數量的代理IP,則可以對搜索引擎直接進行定向爬取,效果更加。如能做到每日新增10萬左右新資源,則是一個比較完美的效果。
2)爬蟲程式。如果僅僅是對HTML進行查詢和分析,則需要很高的正則使用技巧,而如果涉及到語義分析的話,更需要很強的語言分析相關技術。爬蟲程式的邏輯編寫,我想.NET Framework 4.5是再適合不過了,擁有先進的多線程並行庫和豐富而全面的HTTP訪問手段,完勝其他各種新型語言
經過以上的分析,設計出如下的系統架構圖:
二、具體的搭建步驟
1、購買一個阿裡雲RDS資料庫併進行相關配置
因為本項目純屬測試,所以買個便宜點的按時計費的MySQL RDS
每天7塊多錢,還算可以接受的範圍內。
購買完成後,申請一個外網地址(用於初始數據遷移)
最後獲得了內外網的地址:
2、使用Navicat Premium(請支持正版,)打開下載好的SQLite格式的電驢初始數據
根據表結構可以看出相關數據存儲方式,由於今天的案例比較簡單,我們僅需要title、updatetime、ed2k這3個欄位
3、根據需要的欄位,在購買的RDS資料庫中,建立資料庫和表
通過Navicat Premium連接到阿裡雲
建立一個電驢資源表
4、通過Navicat Premium的數據遷移工具,將初始化數據導入RDS
由於沒有直接的導入方式,我們先將SQlite數據導出為文本文件
再將文本文件導入到最終表中
5、通過阿裡雲開放搜索服務,與RDS連接並建立索引
選擇通過數據源創建應用
設置ID為主鍵
預設定義瞭如下索引結構
我們只需要用到Title的檢索,需要展示的內容則是title,ed2k,因此修改為如下:
創建完成後進行激活,選擇了3G容量,每秒6次的配置(好像價格不便宜哦~)
激活完成後,會進行大約半個小時左右的索引,索引建立好之後,我們測試一下搜索效果
註意用時:用時0.008791秒
這比自己處理資料庫,真是要高不少效率!看來使用阿裡雲開放搜索服務確實是一個值得嘗試的新思路!
6、基本配置完成後,就是如何使用開放搜索服務了
先看一下官方文檔的結構
標紅的地方可以重點瞭解,在今天的案例裡面,我們只需要用到API介面裡面的Search介面,這是最簡單的調用方式
文檔還是比較簡單,很容易就看懂了,簽名這塊阿裡做的有些混亂,不過用官方提供的SDK,也能快速的使用服務
7、下麵就在.NET中測試一下效果
先到官網下載一下.NET的SDK
然後建一個控制台測試程式,代碼如下:
模擬進行搜索美食
返回成功
8、繼續新建一個簡單的asp.net Web Application,做一下前端訪問首頁
服務輸出使用一個一般處理程式RS.ashx,代碼如下:
頁面就一個單頁面
JS邏輯也很簡單
訪問效果如下:
好了,今天這個資源搜索網站就搭建好了
麻雀雖小五臟俱全,這個案例還是具備很強的實踐性和延展性的,後續可以做的事情有如下:
1)完善爬蟲程式
2)實現一個獨立的管理後臺,管理爬蟲數據和開放搜索服務數據同步
3)增加用戶管理
4)增加廣告等營收
那麼對今天這個案例的總結是:
今天的案例,可以說是一種全新的數據檢索思路,成功的把部分面向資料庫、面向技術的業務場景,轉變為了面向服務、面向用戶,以我自己為例,非常精通數據爬蟲,精通資源,但對資料庫技術並不在行,在不需要學習很深的資料庫知識和技巧的情況下,阿裡雲開放搜索服務成功的幫助我將百萬條數據的全文檢索時間降低到了0.01秒,這不是傳統的通過升級資料庫配置、增加集群能解決的(花費上也不合理)。而我也堅信,這種思路,絕對不是阿裡雲官方Demo裡面所說,可以用於論壇搜索這麼簡單,一定有更廣闊的應用。所以,寫了這麼一個小案例,希望能夠拋磚引玉,激發大家的靈感,做出更多創新。
本項目源碼下載:https://github.com/chumakeji/resourcesearch
最後再吐槽幾句:
我不是雲服務架構設計工作者,但我見得多了,外面哪個雲服務和開放平臺我沒有用過,我是身經百戰了,有必要告訴阿裡雲開發者一些人生的經驗,用完阿裡雲開放搜索服務,感覺就是,秉承了阿裡雲的一貫作風,運行效果8分,文檔綜合7分,架構設計5分,但說句實在話,阿裡雲開放搜索服務這個版本,無論是業務流程的設計,還是搜索語義語法的設計,又或是介面的設計,都很差!連我下載的.NET版本的SDK都寫的混亂不堪(竟然還包含未隱藏並且能正確訪問的Key和Secret。。。),應該說從深度來看,還達不到一個很高的水準,我印象中除了RDS,阿裡雲幾乎每一個服務都是如此,被外部批評也是架構能力差,阿裡雲走的太急了,即使RDS技術應該也是延續了老淘寶資料庫技術,也沒什麼值得驕傲的,現在的阿裡雲,什麼都想做,快速迭代,快速上線,但什麼都做不精,這是一個很危險的信號!
轉載請註明出處,歡迎郵件交流:[email protected],或者加QQ群:11444444