【初碼乾貨】使用阿里雲開放搜索服務快速搭建資源搜索網站

你們好,我又來了,答應雲棲論壇一週一篇文章, 因爲工做太忙已中斷1個多月實在抱歉,這一次寫點輕鬆有趣的東西-快速的作個資源搜索站html

依稀記得十來年前,帶寬還只有2M的時候,受各個論壇啓發,作了能夠搜索嘿嘿嘿資源的搜索站前端

一晃這麼多年過去,嘿嘿嘿的東西依然喜歡,但世間卻變化萬千git

資源種類已不只僅是X片,高清電影、紀錄片、無損音樂、美劇、大型軟件等等,彷佛更加吸引github

資源呈現方式也百花齊放,從最先的BT文件、電驢地址,到如今的磁鏈地址、各類雲盤等等數據庫

而傳統的P2P下載方式也變得格格不入,由於硬盤容量已經大到但凡大一點雲存儲服務商都把全部資源緩存在本身的服務器上,進行哈希匹配後直接提供離線下載資源(這也直接致使快播王欣被抓)緩存

所以,做爲資源的入口,電驢地址和磁鏈地址依然有着強大的生命力,受益於各商家龐大的離線存儲,電驢、磁鏈地址已經近乎等同於直接的HTTP地址,而且有着比HTTP地址更友好的通用性。服務器

隨手百度一下BT搜索、磁鏈搜索關鍵詞,就會出來不少相似的搜索網站,好比如下這些多線程

image

image

而今天,咱們也來搭建一個相似的網站,只不過架構

藉助新技術,不只搭建過程更加簡化建設思路也能有所革新,因此今天文章的主題就是:asp.net

使用阿里雲開放搜索服務快速搭建資源搜索網站

先看一下最終的建設效果(訪問地址:https://sodemo.alphams.cn/

image

那麼下面咱們就一步一步來搭建這個簡單的資源搜索網站

1、搭建前的一些準備和分析

資源搜索網站有以下幾個關鍵點:

一、原始數據

沒有個幾百萬條初始搜索數據,都很差意思和別人說是作資源站的,在這個案例裏面,咱們採用了simplecd官方製做的電驢地址打包,雖然年代比較久遠,但也有百萬條左右,下載地址爲:

https://www.douban.com/group/topic/17230136/

請注意保護版權!

二、數據存儲與檢索

十多年前資源的數量以百萬計算,如今一個飽滿的資源站的資源數量應該早已過億,數據庫大小也應該在50G以上,這樣的數據,使用阿里雲RDS MySQL數據庫具備較高的性價比,數據量再大一些還能夠結合DRDS分佈式數據庫一同使用

對於具體的檢索技術,不一樣的數據庫的全文索引、分詞等技術各不相同,甚至連MySQL的各類版本之間的處理都有區別,而因爲數據庫我是確實不會。。要是會的話就不至於一直用Linq ORM了。。我想象中的100萬條數據全文檢索的速度應該在0.01秒左右,但本身操做MySQL進行配置和優化,始終達不到這樣的查詢效率

所以今天這裏選擇了阿里雲的開放搜索服務,讓阿里雲來處理這些難點。

這也是今天的一個主要講解重點,實測證實,確實檢索效率很高!

三、數據爬蟲與更新

初始數據載入後,後續的數據更新也很是重要,主要靠爬蟲程序進行每日更新,重點在於爬蟲程序的效率的所爬目標的資源質量,這裏有兩個難點

1)所爬目標資源。電影站、軟件站、BT搜索站等等,均可以是爬蟲目標資源,而若是掌握了搜索引擎的高級用法,並引入無限數量的代理IP,則能夠對搜索引擎直接進行定向爬取,效果更加。如能作到每日新增10萬左右新資源,則是一個比較完美的效果。

2)爬蟲程序。若是僅僅是對HTML進行查詢和分析,則須要很高的正則使用技巧,而若是涉及到語義分析的話,更須要很強的語言分析相關技術。爬蟲程序的邏輯編寫,我想.NET Framework 4.5是再適合不過了,擁有先進的多線程並行庫和豐富而全面的HTTP訪問手段,完勝其餘各類新型語言

通過以上的分析,設計出以下的系統架構圖:

image

2、具體的搭建步驟

一、購買一個阿里雲RDS數據庫並進行相關配置

由於本項目純屬測試,因此買個便宜點的按時計費的MySQL RDS

image

天天7塊多錢,還算能夠接受的範圍內。

購買完成後,申請一個外網地址(用於初始數據遷移)

image

image

最後得到了內外網的地址:

image

二、使用Navicat Premium(請支持正版,)打開下載好的SQLite格式的電驢初始數據

image

image

根據表結構能夠看出相關數據存儲方式,因爲今天的案例比較簡單,咱們僅須要title、updatetime、ed2k這3個字段

三、根據須要的字段,在購買的RDS數據庫中,創建數據庫和表

image

image

經過Navicat Premium鏈接到阿里雲

image

創建一個電驢資源表

image

四、經過Navicat Premium的數據遷移工具,將初始化數據導入RDS

因爲沒有直接的導入方式,咱們先將SQlite數據導出爲文本文件

image

 

再將文本文件導入到最終表中

image

image

image

image

image

五、經過阿里雲開放搜索服務,與RDS鏈接並創建索引

image

image

選擇經過數據源建立應用

image

image

設置ID爲主鍵

image

默認定義了以下索引結構

image

咱們只須要用到Title的檢索,須要展現的內容則是title,ed2k,所以修改成以下:

image

建立完成後進行激活,選擇了3G容量,每秒6次的配置(好像價格不便宜哦~)

image

激活完成後,會進行大約半個小時左右的索引,索引創建好以後,咱們測試一下搜索效果

imaged

注意用時:用時0.008791秒

這比本身處理數據庫,真是要高很多效率!看來使用阿里雲開放搜索服務確實是一個值得嘗試的新思路!

六、基本配置完成後,就是如何使用開放搜索服務了

先看一下官方文檔的結構

image

標紅的地方能夠重點了解,在今天的案例裏面,咱們只須要用到API接口裏面的Search接口,這是最簡單的調用方式

image

文檔仍是比較簡單,很容易就看懂了,簽名這塊阿里作的有些混亂,不過用官方提供的SDK,也能快速的使用服務

七、下面就在.NET中測試一下效果

先到官網下載一下.NET的SDK

image

而後建一個控制檯測試程序,代碼以下:

image

模擬進行搜索美食

返回成功

image

八、繼續新建一個簡單的asp.net Web Application,作一下前端訪問首頁

服務輸出使用一個通常處理程序RS.ashx,代碼以下:

image

頁面就一個單頁面

image

JS邏輯也很簡單

image

訪問效果以下:

image

好了,今天這個資源搜索網站就搭建好了

麻雀雖小五臟俱全,這個案例仍是具有很強的實踐性和延展性的,後續能夠作的事情有以下:

1)完善爬蟲程序

2)實現一個獨立的管理後臺,管理爬蟲數據和開放搜索服務數據同步

3)增長用戶管理

4)增長廣告等營收

那麼對今天這個案例的總結是:

今天的案例,能夠說是一種全新的數據檢索思路,成功的把部分面向數據庫、面向技術的業務場景,轉變爲了面向服務、面向用戶,以我本身爲例,很是精通數據爬蟲,精通資源,但對數據庫技術並不在行,在不須要學習很深的數據庫知識和技巧的狀況下,阿里雲開放搜索服務成功的幫助我將百萬條數據的全文檢索時間下降到了0.01秒,這不是傳統的經過升級數據庫配置、增長集羣能解決的(花費上也不合理)。而我也堅信,這種思路,絕對不是阿里雲官方Demo裏面所說,能夠用於論壇搜索這麼簡單,必定有更廣闊的應用。因此,寫了這麼一個小案例,但願可以拋磚引玉,激發你們的靈感,作出更多創新。

本項目源碼下載:https://github.com/chumakeji/resourcesearch

最後再吐槽幾句:

我不是雲服務架構設計工做者,但我見得多了,外面哪一個雲服務和開放平臺我沒有用過,我是身經百戰了,有必要告訴阿里雲開發者一些人生的經驗,用完阿里雲開放搜索服務,感受就是,秉承了阿里雲的一向做風,運行效果8分,文檔綜合7分,架構設計5分,但說句實在話,阿里雲開放搜索服務這個版本,不管是業務流程的設計,仍是搜索語義語法的設計,又或是接口的設計,都不好!連我下載的.NET版本的SDK都寫的混亂不堪(居然還包含未隱藏而且能正確訪問的Key和Secret。。。),應該說從深度來看,還達不到一個很高的水準,我印象中除了RDS,阿里雲幾乎每個服務都是如此,被外部批評也是架構能力差,阿里雲走的太急了,即便RDS技術應該也是延續了老淘寶數據庫技術,也沒什麼值得驕傲的,如今的阿里雲,什麼都想作,快速迭代,快速上線,但什麼都作不精,這是一個很危險的信號!


做者:張柔,本文發佈於  博客園  與  阿里云云棲論壇

轉載請註明出處,歡迎郵件交流:zhangrou@printhelloworld.com,或者加QQ羣:11444444

相關文章
相關標籤/搜索