Elasticsearch 存儲(chǔ)設(shè)計(jì)
Elasticsearch中index約等于MySQL的database毛甲,type約等于MySQL的table;
雖然Elasticsearch支持一個(gè)index多個(gè)type具被,但是官方并不推薦如此使用玻募,而且多個(gè)type底層其實(shí)也是用一張大表進(jìn)行存儲(chǔ)的。
所以一姿,Elasticsearch 中存儲(chǔ)的數(shù)據(jù)用一個(gè)type來(lái)存儲(chǔ)就可以了七咧。使用nested類型保存一對(duì)多關(guān)系跃惫。
MySQL數(shù)據(jù)同步
1. MySQL & Elasticsearch雙寫
- 實(shí)現(xiàn)思路 :在業(yè)務(wù) insert & update MySQL的地方同時(shí) insert & update Elasticsearch
- 優(yōu)點(diǎn) :實(shí)現(xiàn)簡(jiǎn)單
- 缺點(diǎn) : 業(yè)務(wù)代碼侵入;能力無(wú)法復(fù)用坑雅;業(yè)務(wù)強(qiáng)耦合辈挂;影響業(yè)務(wù)處理性能;
- 優(yōu)化做法:配合MQ提高吞吐量裹粤、改同步為異步
- 推薦指數(shù) : 一般 (可作為其他方案的補(bǔ)充)
2. 定時(shí) MySQL SELECT
實(shí)現(xiàn)思路 :數(shù)據(jù)庫(kù)的相關(guān)表中增加是否需要同步的標(biāo)識(shí)字段终蒂,例如現(xiàn)有的類型為 timestamp 的 update_time 字段,任何更新數(shù)據(jù)表內(nèi)容的操作都會(huì)使該字段的時(shí)間發(fā)生變化遥诉;增加一個(gè)定時(shí)器程序拇泣,讓該程序按一定的時(shí)間周期掃描指定的表,把該時(shí)間段內(nèi)發(fā)生變化的數(shù)據(jù)提取到 Elasticsearch 矮锈;
優(yōu)點(diǎn) :實(shí)現(xiàn)簡(jiǎn)單霉翔;沒(méi)有侵入;沒(méi)有硬編碼苞笨;
缺點(diǎn) : 時(shí)效性較差债朵;對(duì) MySQL Delete 操作無(wú)能為力;增大 MySQL 的壓力瀑凝; 無(wú)法按字段同步序芦,只能整行同步;對(duì)SQL單之類瞬時(shí)大批量更新處理繁瑣粤咪;
優(yōu)化做法:給標(biāo)志字段添加索引谚中,從從庫(kù)進(jìn)行讀取寥枝;
推薦指數(shù) : 一般
相關(guān)的開(kāi)源組件:DataX宪塔、Logstash
3. Binlog 解析
實(shí)現(xiàn)思路 :讀取 MySQL 的 Binlog 日志,獲取指定表的日志信息囊拜;根據(jù)信息同步到 ES某筐;
優(yōu)點(diǎn) :沒(méi)有侵入;沒(méi)有硬編碼艾疟;性能高来吩;業(yè)務(wù)解耦;
缺點(diǎn) : 實(shí)現(xiàn)相對(duì)復(fù)雜蔽莱;
優(yōu)化做法:配合MQ弟疆,使用生產(chǎn)者消費(fèi)者模式提高同步性能;采用 MySQL 主-從-從模式盗冷;
-
推薦指數(shù) : 推薦 : 常規(guī)做法
- 開(kāi)源組件:阿里 canal
-
實(shí)現(xiàn)依賴
- MySQL , 需要先開(kāi)啟 Binlog 寫入功能怠苔,配置 binlog-format 為 ROW 模式
- 授權(quán) MySQL 連接賬號(hào),使其具有作為 MySQL slave 的權(quán)限