elasticsearch中的數據多是來自數據庫,當數據庫發生改變時,elasticsearch也必須跟著改變,這個就叫做數據同步。
當我們是進行微服務的時候,同時兩個服務不能進行相互調用的時候。就會需要進行數據同步。
方法一:同步調用
當我們進行數據的刪除或者新增的時候,先進行數據庫的修改,這個時候再調用搜索功能的更新接口,然后再由搜索功能的服務進行elasticsearch的數據更新,當更新之后再進行依次回復。
上述方法問題:數據和業務的耦合,兩個業務之間使得功能模塊進行了耦合,同時也會出現效率下降的情況。同時當某一模塊不可用的時候,會引起業務功能之間不能夠使用,使各個模塊之間進行了相互依賴,牽一發而動全身。
方法二:異步通知
當啟動新增或者刪除的業務的時候,數據庫的更新操作還是不變,只不過在這個時候對MQ進行發送消息,進行通知,同時讓搜索模塊的服務監聽著MQ的消息,收到消息之后再把elasticsearch進行數據的更新,最終實現異步通知的方法實現了數據的同步
解除了業務之間的耦合,同時也提高了性能。
方法三:監聽binlog
在MySQL的主從復制的行為時,可以將binlog進行開啟,這樣當MySQL進行數據的更改的時候,使用canal中間件進行監聽,最后通知搜索服務的elasticsearch的數據更新。