网站建设教程.,四川省建设工程质量监督总站网站,wordpress添加分享,专业网站建设详细方案https://www.cnblogs.com/darcy-yuan/category/2257608.html
最近阅读了elasticsearch的官方文档#xff0c;学习了它的很多特性#xff0c;发现elasticsearch和mysql有很多地方类似#xff0c;也有很多地方不同。这里做一个对比#xff0c;帮助大家加深对elasticsearch…https://www.cnblogs.com/darcy-yuan/category/2257608.html
最近阅读了elasticsearch的官方文档学习了它的很多特性发现elasticsearch和mysql有很多地方类似也有很多地方不同。这里做一个对比帮助大家加深对elasticsearch的理解。
特性elasticsearchmysql备注场景全文搜索日志处理空间数据分析表结构存储es 不适合做join操作mysql 不适合做全文检索扩展性动态扩展能够通过添加node快速提升性能mysql clustermaster 选举bully 算法比较id选出mastermaster-slave结构无需选举es中master选举可能会出现脑裂问题配置 minimum_master_nodes参数确保过半选举决定机制 路由算法 routing_factor num_routing_shards / num_primary_shards
shard_num (hash(_routing) % num_routing_shards) / routing_factor 指定路由分片 my-index-000001/_doc/1?routinguser1refreshtrue 手动路由或者使用路由组件sharding-jdbc可靠性Cross-cluster replication (CCR) 双集群设计主从复制双数据中心内存配置heap size 推荐 32g但不要超过内存的一半, 其他需要用到堆外内存的地方网络文件缓存jvm的栈物理内存的80%单独的服务器缓存 filesystem cache, request cahce, query cache 所有cache都是基于node query cache (deprecated)数据块大小 分片大小 几g ~ 几十g time based data 20g ~ 40g 分片数量每g内存小于20分片 shard越多维护索引成本越高 shard越大rebalance越慢 单表数据不超过2kw3层b树能存储的数据大概是2kw如果b层级变高查询速度会显著降低数据结构json底层是lucenetable底层是b tree索引 倒排表fst 正向文件分块 压缩 DocValues, 映射文件 压缩 b数聚簇/非聚簇索引定义数据结构的方式mapping (dynamic mapping static mapping)schema支持自动创建数据结构是否事务near real-time需要refresh才可以查询到reaptable read高级事务锁Index blocks比如 index.blocks.read_only索引只读丰富的锁机制表锁行锁间隙锁文件系统 默认mmapfs采用内存映射方式访问文件也支持其他的文件系统比如fs, niofs, hybirdfs fs数据恢复 es在写入之前会先将数据写入到translog用来对异常情况进恢复 flushlucene 进行提交并且同时重新开启一段 translog index.translog.sync_interval持久化translog 间隔5s index.translog.flush_threshold_size flush translog阈值大小512m redo log采用的是WALWrite-ahead logging预写式日志所有修改先写入日志再更新到Buffer Pool保证了数据不会因MySQL宕机而丢失从而满足了持久性要求 es 和 mysql 处理数据恢复的模式基本一致flush机制 从内存缓存写入磁盘缓存memorybuffer - filesystem cacherefresh 刷盘filesystem cache - disk ( flush) 定时触发或者 translog 512M buffer pool - disk 当redo log满了或者buffer pool空间不足 es 和 mysql 刷盘模式基本一致备份 snapshot mysqldump -u root -h host -p --all-databases backdb.sql 慢日志 比如 index.search.slowlog.threshold.query.warn: 10s long_query_time10服务调用方式rest apimysql connection sql数据类型较为丰富的数据类型boolean, keyword, long, data, object, nested, range, ip, text, arrays int, data, varchar es 提供了非常多的数据类型一些是为了支持全文检索一些能够方便查询比如rangeip数据属性 analyzer分词器 index是否被索引没有被索引的字段不可查询 fielddata如果想对text类型的字段进行聚合排序或者执行脚本就必须设置fielddata属性 doc_values将_source 转化为表结构放在磁盘上方便聚合排序或者脚本操作默认支持除了text类型的所有类型 ... 主键索引, 可空唯一值自增默认值 es的数据属性更复杂查询超时 设置 query timeout set wait_timeout 10 context es查询需要区分query context 还是 filter context前者会进行打分后者只进行过滤 不需要区分 打分查询 比如matchmatch_phrase 不支持 runtime field 使用script 创建临时字段 语法支持 select concat (a, b) as c script更灵活但是性能会降低精确查询 比如term, terms, ids, exists 语法支持 mysql使用起来更方便分组聚合查询 比如histogram aggsterms aggs group by es支持的类型稍微丰富一些方便开发指标聚合查询 avg, max, min, sum ,count, cardinality aggspercentile aggs 语法支持, count(*), distinctes是分布式的聚合的时候存在一些精度问题分页 from size 不适合深分页有去重问题 search_after PIT 推荐 scroll (不适合深分页) limit size 或者进行条件关联书签 在深分页上的处理方案上基本一致profile {profile: true,query : {match : { message : GET /search }}
} explainscript支持painless script不支持