基本概念
ES和MySQL都屬于數據庫,不過各有各的特性,大致使用方法與MySQL類似并無區別。
MySQL:擅長事務持有ACID的特性,確保數據的一致性和安全。
ES:持有倒排索引,適合海量數據搜索和分析。
ES和MySQL如何保證數據的一致性
保證數據的一致性可采用雙寫來實現,在修改數據庫的適合也修改ES
// 偽代碼示例 @Transactional public void saveOrder(Order order) {// 1. 寫MySQLmysqlMapper.insert(order); // 2. 寫ES(失敗會觸發事務回滾)esClient.index(order); }
如果需要做優化可以通過異步實現,比如MQ,并且還能對消息做持久化和重試或確認,進一步保證了數據的安全和一致性。
倒排索引和B+Tree有什么不同
數據庫索引采用的B+Tree存儲結構維護數據,適合單點查詢和范圍查詢
[根節點]/ \[內部節點] [內部節點]/ | \ [葉子1]?[葉子2]?[葉子3] # 葉子節點存儲實際數據,且雙向鏈表連接
倒排索引根據詞語來進行分類,適合搜索引擎功能
{"關鍵詞A": [文檔1_ID, 文檔2_ID, ...], # 倒排列表(Postings List)"關鍵詞B": [文檔3_ID, 文檔5_ID, ...] }