前置知識:
elasticsearch基本概念與核心原理
elasticsearch資料建模
elasticsearch是分布式的, 在多台機器上啟動es程序例項, 組成乙個es集群. es集群中的節點會選舉出乙個master節點來管理集群, 比如負責索引的建立與刪除, 負責主分片與副本分片的身份切換等等. es集群的master節點擊舉演算法如下:
es儲存資料的基本單位是索引, 每個索引都會被拆分為多個分片, 每個分片分布在不同節點上. 同時為了保證可用性, 每個分片都會設定副本, 主分片提供讀寫服務, 副本分片提供讀服務. 當主分片所在的節點宕機後, master節點會從副本分片中選出乙個作為主分片, 然後當宕機的節點修復後, master節點會將缺失的副本分片分配過去, 同步資料後, 集群恢復正常.
elasticsearch寫入資料的工作原理
(1) document寫入主分片的詳細過程
(2) es被稱為近實時(near realtime)的原因
從上文"document寫入主分片的詳細過程"中可以知道, refresh操作每秒執行一次, 只有執行refresh操作之後, 倒排索引才會被建立, 資料才能被搜尋, 這就是es被稱為近實時的原因.
(3) es存在資料丟失的問題
從上文"document寫入主分片的詳細過程"中可以知道, document寫入index buffer的同時會將寫命令記錄到transaction log, 目的是如果資料落盤之前機器宕機了, 可以從transaction log中恢復資料. 但在舊版本中transaction log不是預設落盤的, 它會先寫入os cache中, 每隔5s才會被刷入磁碟, 所以如果在transaction log落盤前機器宕機了, 資料就完全丟失了.
在新版本7.x中, transaction log是預設落盤的, 也就不會有資料丟失的問題. (index.translog.durability, index.translog.sync_interval)
elasticsearch查詢資料的工作原理(get查詢)
elasticsearch搜尋資料的工作原理
(1) 善於利用os cache
如果elasticsearch的每次搜尋都要落盤, 那搜尋效能肯定很差, 將達到秒級. 但如果es集群中的資料量等於os cache的容量, 那每次搜尋都會直接走os cache, 這樣效能就會很高, 達到毫秒級.
es集群中的資料量最好不要超過os cache的容量, 最低要求也不能超過os cache的兩倍. 比如我們es集群有3臺機器, 每台機器64g記憶體, 為每個節點的es jvm heap分配32g記憶體, 最終集群的os cache為 32g * 3 = 96g記憶體. 我們es集群中的資料量最優情況是不超過96g, 最低要求的情況是不超過192g.
(2) 資料建模
從上文"善於利用os cache"中我們知道, 我們要保證es集群中的資料量不超過os cache的容量, 那麼我們在資料建模的時候就要注意兩點:
(3) 資料預熱
如果我們無法做到讓es集群中的資料量不超過os cache的容量, 那我們做乙個快取預熱子系統, 定時搜尋"熱資料", 讓其進入os cache.
(4) 冷熱分離
在資料預熱的基礎上我們還可以進行冷熱資料分離, 比如我們有6臺機器, 建立兩個索引, 每個索引3個分片, 乙個索引放熱資料, 乙個索引放冷資料. 熱資料量一般只佔總資料量的10%, 這樣我們就能保證熱資料都在os cache中. 而冷資料雖然佔總資料的90%, 但卻只有10%的使用者訪問, 效能差點是可以接受的.
(5) 分頁效能優化
深度分頁的效能是很差的, 我們要防止出現深度分頁的情況, 用滾動翻頁來代替深度分頁.
elasticsearch分頁api
(1) es生產集群我們部署了5臺機器, 每台機器是6核64g的, 集群總記憶體是320g.
(2) 我們es集群的日增量資料大概是2000萬條, 500mb左右; 每月增量資料大概是6億條, 15g左右. 目前系統已經執行了幾個月, 現在es集群裡資料總量大概是100g左右.
(3) 目前線上有5個索引(這個結合你們自己業務來, 看看自己有哪些資料可以放es的), 每個索引的資料量大概是20g, 所以這個資料量之內, 我們每個索引分配的是8個shard, 比預設的5個shard多了3個shard.
mysql必知必 SQL必知必會學習筆記 一
資料庫基礎 資料庫 資料庫軟體 確切的說,資料庫軟體應稱為資料庫管理系統 dbms 資料庫是通過dbms建立和操作的容器 資料庫相當於檔案櫃 容器 表相當於檔案 同乙個資料庫不能存在相同的表名,不同的資料庫可以存在相同的表名 主鍵應滿足的條件 唯一性非空性 not null 主鍵列中的值不允許修改或...
mysql必知必會 mysql必知必會(四)
十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...
mysql必知比回 MySQL必知必會
服務啟動與停止 停止mysql服務 net stop mysql57 啟動mysql服務 net start mysql57 連線與斷開服務 連線服務 mysql h 位址 p 埠 u 使用者名稱 p 密碼 斷開服務 quit 斷開服務 exit 配置允許遠端連線 方式一 use mysql 開啟遠...