自從各種脫褲子事件開始層出不窮,我在學校學乖了,所有地方的密碼都改成了不壹樣。重要賬戶的密碼被定期更改,我甚至開始使用假名,因為我擔心我會從我的祖先中誕生出18代人。我給自己起了壹個新的網名“星彩”,這似乎是壹個好名字。其實是我們老家罵人的方言,意思是腦殘的人...-_-||| |
這只是壹個名字。至於姓氏,每個帳戶的註冊信息按照前孫趙,李,周,吳和鄭王的姓氏向下排列。什麽張興才、李興才和王興才...所以我不知道我“提拔人才”多久了。終於有壹天,我接到了壹個陌生的電話:妳好,是馬興才先生嗎?
嗯,合適的終於來了,於是我按名字搜索,得知我用這個名字搜索了某個網站,然後我通過各種渠道搜索。果然,破站被扒了我的褲子。
果斷地放下了褲子,然後壹發不可收拾,走上了收集褲子的道路,直到有壹天,我發現收藏已經非常豐富了,粗略估計有幾十億條數據,我拍著腦袋想,這不能只是收集,我還建立了壹個社會工作圖書館來使用它...
0×01簡介
如何建立社工圖書館?這種海量數據不是簡單地用mysql構建壹個庫,然後做壹個php查詢Select * from sgk where username like“% xxxxx %”,這是可以做到的。也不是某些天真的人想隨便找個4g內存,amd雙核破電腦就能提出來的。以上語句和系統配置是真正用於社工庫查詢的,檢查壹條記錄可能需要半個小時。幸運的是,這個問題早就被壹種叫做全文搜索引擎的東西解決了。更好的消息是,大多數全文搜索引擎都是開源的,不需要花錢。
目前互聯網上已經搭建的社工庫大多是mysql+coreseek+php,coreseek是基於sphinx的優秀全文搜索引擎。但是它的缺點是比較輕量級,壹旦數據量超過幾個億就會有些力不從心,構建集群的分布式性能並不理想。如果我們要考慮未來數據不斷增加的情況,我們仍然必須使用其他方案,所以我使用了solr。
solr基於著名的Lucene框架,基於java,可以通過jdbc接口導入各種數據庫和各種格式的數據,非常適合開發企業級海量數據搜索平臺,並提供了完善的Solr雲集群功能。更重要的是,Solr的數據查詢完全基於http,可以通過簡單的post參數返回json、xml、php、python、ruby、csv等格式。
以前的solr本質上是壹組servlet,必須放入Tomcat才能運行。自solr5以來,它已經構建了自己的jetty,該jetty配置良好,可以獨立使用,並且可以處理大量並發請求。具體架構我們後面再說。現在讓我們先安裝和配置solr。
0×02安裝和配置
以下是我在整個構建和測試過程中使用的硬件和軟件平臺,本文的所有內容都是在這個平臺上完成的:
軟件配置:Solr 5.5、MySQL 5.7、JDK 8、Tomcat 8
硬件配置:i7 4770k,16G DDR3,2T西部數據黑盤。
2.1 mysql數據庫
這裏我不會詳細介紹Mysql數據庫的安裝和配置,但要提到的是,對於社會工作圖書館等應用程序來說,使用MyISAM引擎會更好,因為這些應用程序的查詢任務遠遠不止插入和更新。
構建數據庫後,創建壹個名為newsgk的新庫,然後創建壹個名為b41sgk的表,其結構如下:
Id bigint主鍵自動增長。
用戶名varchar用戶名
電子郵件varchar郵箱
密碼varchar密碼
Salt varchar密碼或第二個密碼中的salt。
Ip varchar ip、地址、電話號碼等信息。
站點varchar數據庫的源站點
下壹步是將所有收集的褲子導入該表。這裏推薦navicat,它可以支持各種格式的導入。具體過程相當枯燥,需要很大的耐心。這裏就不廢話了,我就自己幹吧。目前我初步導入的數據量約為6543.8+0億。
2.2 Solr結構和配置
首先下載solr:
$ wget
解壓:
$ tar zxvf solr-5.5.0.tgz
安裝jdk8:
$ sudo add-apt-repository PPA:webupd 8 team/Java
$ sudo apt-get更新
$ sudo apt-get安裝oracle-java8-installer
$ sudo apt-get安裝oracle-java8-set-default
因為java是跨平臺的,所以windows和linux下的solr是同壹個壓縮包,這裏不解釋Windows下jdk的安裝。
輸入解壓縮的solr文件夾的bin目錄。solr.cmd和solr分別是windows和linux下的啟動腳本:
因為社會工作庫是海量的大數據,而jvm默認只使用512m的內存,這遠遠不夠,所以我們需要修改它,打開solr.in.sh文件並找到這壹行:
SOLR _西普=“512m“
根據您的數據量,將其更改為更高。我這裏改成4G,改完後保存。在windows下略有不同,因此您需要在solr.in.cmd文件中更改這壹行:
set SOLR _ JAVA _ MEM =-xms 512m-xmx 512m
同樣,512m都修改為4G。
Solr的啟動、重啟和停止命令是:
$ ./solr start
$ ./solr重啟–p 8983
$ ./solr停止–全部
在linux下,solr也可以通過install_solr_service.sh腳本作為服務安裝,它將在後臺自動運行。
Solr已經安裝好了,現在我們需要從mysql導入數據。在導入之前,我們需要創建壹個核心,這是Solr的壹個獨特概念。每個核心都是查詢、數據、索引等的集合。妳可以把它想象成壹個獨立的數據庫。讓我們創建壹個新的核心:
在solr-5.5.0/server/solr子目錄下創建壹個新文件夾,命名為solr_mysql,這是核心的名稱,並在下面創建兩個子目錄conf和data。將Solr-5 . 5 . 0/Solr-5 . 5 . 0/example/example-dih/Solr/db/conf下的所有文件復制到我們創建的conf目錄中。接下來的配置主要涉及三個文件,solrconfig.xml、schema.xml和DB-data-config.xml。
首先,打開db-data-config.xml並對其進行如下修改:
該文件負責配置導入的數據源。請根據mysql的實際設置修改數據源的內容。以下實體的內容必須嚴格按照mysql中社會工作庫表的結構填寫,列名應與數據庫中的列名完全相同。
然後打開solrconfig.xml,先找到這壹段:
真實的
托管模式
將其全部註釋掉,添加壹行並將其更改為:
& lt!-
真實的
托管模式
-& gt;
這是因為solr5及更高版本默認使用managed-schema來管理模式,需要將其更改為可手動修改。
然後我們需要關閉建議,它為搜索提供智能提示。我們在社會工作圖書館中不使用此功能。重要的是建議會嚴重拖慢solr的啟動速度。在超過十億數據的情況下,打開建議可能會導致solr開始加載核心幾個小時!
同樣在solrconfig.xml中,找到以下段落:
我的建議者
模糊LookupFactory
文檔目錄工廠
貓
價格
線
真實的
10
建議
刪除所有這些文件,然後保存solrconfig.xml文件。
接下來,復制托管模式,將其重命名為schema.xml(不要刪除原始文件),打開它並找到以下位置:
僅保留_version_和_root_ nodes,然後刪除所有字段dynamicField和copyField,並添加以下部分:
身份證明(identification)
這裏的uniqueKey是配置文件中的原始鍵,用於指定索引字段,必須保留。創建壹個名為keyword的新字段,用於聯合查詢,即當需要同時使用多個字段進行關鍵字查詢時,可以使用該字段名稱來代替以提高查詢效率,下面的copyField用於指定要復制到keyword的字段。請註意關鍵字等字段,並且以下多值屬性必須為true。
用戶名、電子郵件和關鍵字字段用於檢索查詢關鍵字,其類型指定為text_ik,這是我們創建的類型,因為solr內置了中文分詞功能,但效果不佳,因此我們需要添加IKAnalyzer中文分詞引擎來查詢中文。下載IKAnalyzer for solr5的源碼包,然後用Maven編譯得到壹個文件IKAnalyzer-5.0.jar,放在Solr-5 . 5 . 0/server/Solr-web app/web app/we B- INF/lib目錄下,然後在solrconfig.xml的fieldType部分添加以下內容:
保存後,核心的配置就完成了,但要導入mysql數據,我們還需要在mysql網站上下載mysql-connector-Java-bin.jar庫文件,以及solr-5.5.0/dist目錄下的Solr-dataimporthandler-5 . 5 . 0 . jar。將solr-DataImportHandler-Extras-5 . 5 . 0 . jar復制到Solr-5 . 5 . 0/server/Solr-web app/web app/we B- INF/lib中,然後重新啟動Solr,就可以開始數據導入了。