基本概念
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, ...] }