商品檢索
大家應該都在各種電商網站檢索過商品,檢索商品一般都是透過什麼實現呢?搜尋引擎Elasticsearch。
那麼問題來了,商品上架,資料一般寫入到MySQL的資料庫中,那麼用來檢索的資料又是怎麼同步到Elasticsearch的呢?
MySQL同步ES
這是能想到的最直接的方式,在寫入MySQL,直接也同步往ES裡寫一份資料。
同步雙寫
就這樣:
#優點:實作簡單
缺點:
業務耦合,商品的管理耦合大量資料同步程式碼
#影響效能,寫入兩個存儲,回應時間變長
#不便擴充:搜尋可能有一些個人化需求,需要對資料進行聚合,這種方式不便實現
我們也很容易想到非同步雙寫的辦法,上架商品的時候,先把商品資料丟進MQ,為了解耦合,我們一般會拆分一個搜尋服務,由搜尋服務去訂閱商品變動的訊息,來完成同步。
非同步雙重寫入
前面說的,有些資料需要聚合處理成類似寬表的結構怎麼辦呢?例如商品庫的商品品類、spu、sku表是分開的,但是查詢是跨維度的,在ES裡再聚合一次效率就低一些,最好就是把商品的資料給聚合起來,在ES里以類似大寬表的形式存儲,這樣一來查詢效率就高一些。
多維度多條件查詢
這種其實沒什麼好辦法,基本上還是得搜尋服務直接查庫,或者遠端調用,再查詢一遍商品的資料庫,就是所謂的回查。
回查完成聚合
這種方式:
#優點:
解耦合,商品服務無須關注資料同步
即時性較好,使用MQ,正常情況下,同步完成在秒級
canal-adapter,支援多種適配器,其中就有ES適配器,經過一些配置,啟動之後,就可以直接把MySQL資料同步到ES,這個過程是零碼的。
##資料訂閱回查
##這種看起來和非同步雙寫比較像,但是第一降低了商品服務的耦合,第二數據的即時性更好。 所以使用資料訂閱:至於資料訂閱框架的選型,主流的大致上是這些:
Cancal | Maxwell | Python-Mysql-Rplication | |
---|---|---|---|
#開源方 | 阿巴巴 | ||
#Zendesk | 社群 | #開發語言 | |
##Java | ##Python活躍度 | 活躍 | |
活躍 | 高可用 | #支持 | |
不支援 | 客戶端 | Java/Go/PHP/Python/Rust | |
Python | #訊息落地 | Kafka/RocketMQ 等 | |
自訂 | 訊息格式 | 自訂 | |
自訂 | 文件詳略 | 詳細 |
#詳細說明
#########Boostrap#####不支援######################## ##支援######不支援###############MySQL同步到其他資料存儲,如HBase,基本上都是採用相似的幾種方法。 ###以上是MySQL資料同步Elasticsearch的方案有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!