上文中土砂,使用Logstash從Mongodb導(dǎo)入數(shù)據(jù)到elasticsearch咸作,實(shí)際上是定時(shí)從mongo中獲取新數(shù)據(jù)寫入es宪迟。如果在mongo中更新或刪除數(shù)據(jù)昵骤,es中是不會(huì)跟著變化的树碱。
我們需要實(shí)現(xiàn)mongo和es的數(shù)據(jù)同步,才能保障查詢的正確性变秦。以下是一些方案:
1成榜、使用Logstash,設(shè)置每次從頭開始同步
優(yōu)點(diǎn):簡單蹦玫。
缺點(diǎn):大量的冗余數(shù)據(jù)傳輸赎婚,實(shí)時(shí)性差,僅適用于少量數(shù)據(jù)樱溉。
2挣输、使用mongo-connector(python)
庫文檔:https://pypi.org/project/mongo-connector/
mongo-connect是Python的一個(gè)庫,它通過讀取mongo的oplog福贞,來監(jiān)控mongo數(shù)據(jù)變化撩嚼,保證更新、刪除操作可以同步到es挖帘。
優(yōu)點(diǎn):無需寫代碼
缺點(diǎn):必須以replica形式部署mongo完丽,副本集必須復(fù)制一份數(shù)據(jù),占用空間拇舀。副本集會(huì)整個(gè)同步到es逻族,數(shù)據(jù)冗余。
3你稚、自己寫代碼同步
同步mongo到elastic瓷耙,主要分四個(gè)部分。
1刁赖、歷史數(shù)據(jù)導(dǎo)入es
2搁痛、增加新數(shù)據(jù)時(shí)同步到es
3、更新數(shù)據(jù)時(shí)同步到es
4宇弛、刪除數(shù)據(jù)時(shí)同步到es
其中1鸡典、2可通過腳本或logstash實(shí)現(xiàn),2枪芒、3彻况、4可以為mongo操作函數(shù)綁定裝飾器,通過http方式同步數(shù)據(jù)到es舅踪。
缺點(diǎn):需要寫代碼纽甘。從代碼外對(duì)mongodb的操作不能被同步。
優(yōu)點(diǎn):定制性強(qiáng)抽碌,易于控制