什麼是 Elasticsearch?
Elasticsearch 本身是一個開源的專案,用於大數據分析以及搜尋的引擎。
下面這張圖片是 Elasticsearch 官方的 demo 網站:
當我們輸入 az 兩個字母的時候,這些顯示的相關資料是從哪裡來的呢?你可能第一個直覺是從資料庫,對,這是一種做法。
當前端輸入某些字母時,傳送到後端,接著去資料庫搜尋相關連的資料,但這樣真的可行嗎?當資料量太大的時候,資料庫能夠應付搜尋這麼頻繁的功能嗎?
答案是不,資料庫不應該處理這樣的事情。
所以圖片中的功能是當前端輸入某些字母時,會送到 Elasticsearch 的引擎中,並返回相關的結果,以達到這樣的效果。
我們可以暫時把 Elasticsearch 理解成一個處理搜尋的引擎即可,即使它能做的事情遠遠大於 搜尋 這件事。
為什麼要學 Elasticsearch?
- 建立更好的搜尋功能
搜尋可以說是現代應用程式一個必備的功能,不論是電商、部落格、書店等等,都會用到搜尋這個功能。
學習 Elasticsearch 可以建構出更好的搜尋體驗,常見的資料庫,如 MySQL, PostgreSQL 等,他們的目的並不是『 專門拿來搜尋的 』,而是建立資料之間的關聯,所以才叫做關聯式資料庫。
光是這一點就很值得學習這項技術,更不用提 Elasticsearch 還能夠做到大數據的分析,搭配 Elastic Stack 全家餐做出一個圖形化的分析介面,使用官方的機器學習功能還能做到提前警告的功能。
- 受到市場肯定
Elasticsearch 在 DB-ENGINES 這個網站分類 Search engines 中排名第一,可以見得其備受市場的喜愛以及接受。
- 性能
性能也是 Elasticsearch 常常被提出來的一個優點,當資料量大到千萬級別的時候,才能感受到 Elasticsearch 和關聯性資料庫的差別,這邊建議可以自己往 MySQL 倒入 1000 萬筆資料,和 Elasticsearch 的 1000 萬筆,稍微比較看看之間關於速度上的差別。
- 易用性
建立一個 Elasticsearch 的服務在本地有多簡單呢?不論是要用 Docker 啟動,還是要去官網下載應用程式,這都像是你在電腦上安裝 Slack 一樣簡單,裝好了就能透過 http 的協議訪問、搜尋資料。
- 可擴展性
高擴展性也是 Elasticsearch 的一個大優點,我們都知道水平擴展本身並不是一件簡單的事情,要如何同步資料?確保資料的一制性,訪問節點,分配資源等等的問題都會隨著水平擴展而浮現。
這一點 Elasticsearch 提供了很多的設定讓我們可以應付各種情況,讓擴展這件事情不再是惡夢。
誰在用 Elasticsearch?
GitHub, Facebook, Netflix 都是 Elasticsearch 的使用者,尤其是 GitHub 的程式碼搜尋就是用 Elasticsearch 實現,可以想像一下如果這要用資料庫實現,那會是什麼樣的一個情況呢?
Netflix 用 Elasticsearch 搜尋電影以及電視節目也不是新聞,這部影片 就有提到 Netflix 是如何使用的。
同樣的 這部影片 則是 Facebook 的工程師們說明他們如何把這項技術應用在 Elasticsearch 之中。
好了,上述這三間公司我相信就足夠證明這項技術的實用性以及普及性。
Elasticsearch 還有證照可以考?
Elasticsearch 本身有提供認證的考試,這邊是 傳送門,這項認證不是那種中華民國丙級廚師的認證 ( 沒有歧視的意思,我自己就有,所以我知道考起來有多簡單 ),聽說考的內容都是實際要你解決某些問題,而不是選 ABCD。
要價 500 USD,而且官方有特別說重考沒有打折,所以我看這個考試應該是沒辦法一直刷一直賽,賽到過的那一種。
我自己本身也沒有認證,也不是什麼講師,單純就是學習這項技術,加上最近工作時也需要用到,就乾脆更認真地栽進去學習,而不是用用套件,隨便的 INDEX 一些 document 交差。
當然最棒的就是,希望我寫了 30 天的鐵人賽,就具備考證照的基本能力,但我猜應該是不可能,通常這種認證都需要特別地準備。
結語
這 30 天的鐵人賽會學到什麼呢?
- 開發環境的建立
- 如何搜尋以及資料的集合
- Elasticsearch 架構的原理
- 資料如何建立?
- 實際操作電影的搜尋功能
- Kibana 資料視覺化工具
我希望可以啦 😜