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

来源:http://www.cnblogs.com/printhelloworld/archive/2016/08/31/5826331.html
-Advertisement-
Play Games

100萬條以上數據,想要做0.01秒以內響應的中文全文索引怎麼辦,SQL Server,MySQL不精通?阿裡雲開放搜索服務打開了新思路... ...


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

依稀記得十來年前,帶寬還只有2M的時候,受各個論壇啟發,做了可以搜索嘿嘿嘿資源的搜索站

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

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

資源呈現方式也百花齊放,從最早的BT文件、電驢地址,到現在的磁鏈地址、各種雲盤等等

而傳統的P2P下載方式也變得格格不入,因為硬碟容量已經大到但凡大一點雲存儲服務商都把所有資源緩存在自己的伺服器上,進行哈希匹配後直接提供離線下載資源(這也直接導致快播王欣被抓)

因此,作為資源的入口,電驢地址和磁鏈地址依然有著強大的生命力,受益於各商家龐大的離線存儲,電驢、磁鏈地址已經近乎等同於直接的HTTP地址,並且有著比HTTP地址更友好的通用性。

隨手百度一下BT搜索、磁鏈搜索關鍵詞,就會出來很多類似的搜索網站,比如以下這些

image

image

而今天,我們也來搭建一個類似的網站,只不過

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

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

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

image

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

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

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

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訪問手段,完勝其他各種新型語言

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

image

二、具體的搭建步驟

1、購買一個阿裡雲RDS資料庫併進行相關配置

因為本項目純屬測試,所以買個便宜點的按時計費的MySQL RDS

image

每天7塊多錢,還算可以接受的範圍內。

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

image

image

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

image

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

image

image

根據表結構可以看出相關數據存儲方式,由於今天的案例比較簡單,我們僅需要title、updatetime、ed2k這3個欄位

3、根據需要的欄位,在購買的RDS資料庫中,建立資料庫和表

image

image

通過Navicat Premium連接到阿裡雲

image

建立一個電驢資源表

image

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

由於沒有直接的導入方式,我們先將SQlite數據導出為文本文件

image

 

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

image

image

image

image

image

5、通過阿裡雲開放搜索服務,與RDS連接並建立索引

image

image

選擇通過數據源創建應用

image

image

設置ID為主鍵

image

預設定義瞭如下索引結構

image

我們只需要用到Title的檢索,需要展示的內容則是title,ed2k,因此修改為如下:

image

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

image

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

imaged

註意用時:用時0.008791秒

這比自己處理資料庫,真是要高不少效率!看來使用阿裡雲開放搜索服務確實是一個值得嘗試的新思路!

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

先看一下官方文檔的結構

image

標紅的地方可以重點瞭解,在今天的案例裡面,我們只需要用到API介面裡面的Search介面,這是最簡單的調用方式

image

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

7、下麵就在.NET中測試一下效果

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

image

然後建一個控制台測試程式,代碼如下:

image

模擬進行搜索美食

返回成功

image

8、繼續新建一個簡單的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技術應該也是延續了老淘寶資料庫技術,也沒什麼值得驕傲的,現在的阿裡雲,什麼都想做,快速迭代,快速上線,但什麼都做不精,這是一個很危險的信號!


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

轉載請註明出處,歡迎郵件交流:[email protected],或者加QQ群:11444444


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、spring xml配置(不包括AOP,主要瞭解在初始化及實例化過程中spring配置文件中每項內容的具體實現過程,從根本上掌握spring) 二、BeanFactory容器後置處理介面(BeanFactoryPostProcessor) 三、基於註解的依賴註入 四、aop部分 五、spring ...
  • 今天我們來聊聊如何跟Unity學代碼優化,準確地說,是通過學習Unity的IL2CPP技術的優化策略,應用到我們的日常邏輯開發中。 ...
  • ...
  • turbine介紹:附7 turbine turbine部署:第二章 部署war包到tomcat 一、總體圖 前提: 假設有兩個服務A/B分別布在兩台機器上(這裡為了簡單,使用一個服務myboot來代替),A、B都訪問myboot2的兩個介面getHotelInfo和getHotelInfo2(這兩 ...
  • ApplicationContext作為資源載入器;ApplicationContext作為事件發佈者; Java原生提供了事件發佈機制 EventObject對象作為發佈的事件,EventListener作為處理髮布事件的監聽器。但是其並沒有提供發佈者的角色來橋接EventObject和Event ...
  • 希望你看了此小隨 可以實現自己的MVC框架 也祝所有的程式員身體健康一切安好 ——久伴深海丶默 1.什麼是前端控制器(font controller)。Java Web中的前端控制器是應用的門面,簡單的說所有的請求都會經過這個前端控制器,由前端控制器根據請求的內容來決定如何處理並將處理的結果返回給瀏 ...
  • 一、定義 策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立於使用它的客戶而獨立變化。 二、UML圖:(來自百度百科) 根據上面的UML圖,我們需要的類有: 1)Content類 2)Strategy抽象類 3)若幹ConcreteStrategy類 三 ...
  • 從Tomcat源碼提煉出設計模式-門面設計模式: 概念 外部訪問內部,耦合度增加,不利於擴展。而門面模式在內部基礎上進行再度封裝,只提供外部想要的方法。這時訪問方式由“外部 內部”變為了“外部 門面對象 內部”。 目的 1 有些內部對象的方法,不想對外部得知使用,使用內部對象Facade模式,只提供 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...