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

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...