老男孩的成长之路|又会带来什么问题?,ES能为你解决什么问题( 二 )


ES引入会有什么样的问题字段类型无法修改、写入性能较低和高硬件资源消耗ES需要在创建字段前要预先建立Mapping , Mapping中包含每个字段的类型信息 , ES需要根据Mapping为字段建立合适的索引 。 由于这个Mapping的存在 , ES中的字段一旦建立就不能再修改类型了 。 ES在数据结构灵活度上高于MySQL但远不如MongoDB不支持事务,JOIN吃硬件ES的排序和聚合(Aggregation)操作会把几乎所有相关不相关的文档都加载到内存中 , 一个Query就可以很神奇地吃光所有内存 , 现在新的Lucene版本优化了基于硬盘的排序 , 但也仅当你使用SSD的情况下 , 才不会牺牲过多的搜索性能 。 其他的问题还包括 , 大量的增量写操作会导致大量的后台Merge , CPU和硬盘读写都会很容易达到瓶颈 。 ES确实在横向Scale方面做的很出色 , 但前提是有足够的预算买硬件 。 数据实时性每当有新增的数据时 , 就将其先写入到内存中 , 在内存和磁盘之间是文件系统缓存 , 当达到默认的时间(1秒钟)或者内存的数据达到一定量时 , 会触发一次刷新(Refresh) , 将内存中的数据生成到一个新的段上并缓存到文件缓存系统上 , 稍后再被刷新到磁盘中并生成提交点 。 因此 , 从Index请求到对外可见能够被搜到 , 最少要1秒钟的数据延时 。 不支持数据的权限管理总结ES香不香看你怎么用 。 有人用的很爽 , 有人用的很痛苦 。 用好了就少加班调索引 , 调sql 。 用不好就常加班调ES 。
优点:
1.高并发
2.容错能力比mg强 。 比如1主多从 , 主片挂了从片会自动顶上
3.满足大数据下实时读写需求 , 无需分库(不存在库的概念) 。
4.易扩展 。 分片数据自动均衡5.支持较复杂的条件查询 , groupby、排序都不是问题
缺点:
1.不支持事务
2.读写有一定延时
3.无权限管理
【老男孩的成长之路|又会带来什么问题?,ES能为你解决什么问题】4.吃硬件


推荐阅读