史上最簡單的Elasticsearch教程-第四章:Elasticsearch與Mysql的區別,一看就懂
Es與Mysql的區別,一看就懂!
(提前宣告:文章由作者:張耀烽/CSDN主頁:https://blog.csdn.net/youbitch1/
結合自己生產中的使用經驗整理,最終形成簡單易懂的文章,寫作不易,轉載請註明)
(整個教程的ES版本以及Kibana版本都是基於5.6.8)
(文章參考:Elasticsearch權威指南(書籍),Elasticsearch官方文件JavaApi5.6.8,實際專案中的應用場景)
(幫到到您請點點關注,文章持續更新中!)
(個人Git主頁:https://github.com/Mydreamandreality)\
OK.本來前一章瞭解了是如何給ES傳送restful請求,這章是要準備搞一個增刪改查的案例的
但是我覺得還是再詳細的解釋一遍ES和Mysql的區別,具體在哪裡,方便後面的學習
-
Elasticsearch面向文件
-
什麼叫面向文件?
-
應用中的物件很少只是簡單的鍵值列表,更多時候它擁有複雜的資料結構,比如包含日期、 地理位置、另一個物件或者陣列。
-
比如:你的資料可能是這個樣子,或者更復雜
-
-
-
{ "took": 0, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 16137, "max_score": 1, "hits": [ { "_index": "origin_flow_data_20190111", "_type": "logs", "_id": "AWg4fyND8G2qFi8QNpwr", "_score": 1, "_source": { ..........省略 } ..........省略
-
如果上面的資料儲存到Mysql你需要怎麼做?兄弟萌思考一下
-
如果將這些資料儲存到由行和列組成的關係資料庫中
-
就好像是把一個豐富,資訊表現力強的物件拆散了放入一個非常大的表格中:
-
你不得 不拆散物件以適應表模式(通常一列表示一個欄位),然後又不得不在查詢的時候重建它們
-
你忍心這麼操作嗎???兄弟
-
-
在Elasticsearch中是怎麼處理的?兄弟睜開眼!
-
Elasticsearch是面向文件(document oriented)的
-
這個意思就是它可以儲存整個物件或文件 (document),所以ES的Type(可以理解為Mysql的表)中的資料是這樣的
-
當然可以更復雜!
-
而且它不僅僅是儲存,還會索引(index)每個文件的內容使之可以被搜尋
-
在 Elasticsearch中,你可以對文件(而非成行成列的資料)進行索引、搜尋、排序、過濾。
-
這種理解資料的方式與以往完全不同,所以這也是Elasticsearch能夠執行復雜的全文搜尋的原因之一
-
-
之前簡單的總結過一次ES與Mysql的區別,這裡再次總結一次
-
在Elasticsearch中,文件歸屬於一種型別(type),而這些型別存在於索引(index)中,
Relational DB -> Databases -> Tables -> Rows -> Columns //這個就是Mysql的結構,不多BB,都懂
Elasticsearch -> Index -> Types -> Documents -> Fields //這個就是ES的結構
#ES的index代表Mysql中的資料庫
#ES的types代表Mysql中的Tables
#ES的Document代表Mysql中的行
#ES的Fields代表Mysql中的列
Elasticsearch叢集可以包含多個索引index資料庫
每一個索引可以包含多個型別 types表,
每一個型別包含多個文件documents行
每個文件包含多個欄位 Fields列
解釋一下當時我學習時的誤區:摘自官方文件5.x版本
[索引]含義的區分 你可能已經注意到索引(index)這個詞在Elasticsearch中有著不同的含義,
所以有必要在 此做一下區分:
索引(名詞) 如上文所述,一個索引(index)就像是傳統關係資料庫中的資料庫,
它 是相關文件儲存的地方,index的複數是indices 或indexes。
OK,ES與MYSQL的區別就先說到這裡,後續有什麼遺漏的地方我再補充----
下一章開始寫restful的增刪改查,
之後就是JavaApi如何使用!