elasticsearch 入门学习

原文:https://blog.csdn.net/laoyang360/article/details/52244917

ES是如何产生的?

(1)思考:大规模数据如何检索

当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:

  • 用什么数据库好?
  • 如何解决单点故障(lvs、F5、A10、Zookeeper、MQ)
  • 如何保证数据安全性(热备、冷备、异地多活)
  • 如何解决检索难题(数据库代理中间件:msql-proxy,Cobar, MaxScale等)
  • 如何解决统计分析问题(离线、近实时)

(2)传统数据库的应对解决方案

对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写瓶颈:

  • 通过主从备份解决数据安全性问题
  • 通过数据库代理中间件心跳监测,解决单点故障问题
  • 通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果

(3)非关系型数据库的解决方案

对于Nosql数据库,以mongdb为例,其它原理类似:

  • 通过副本备份保证数据库安全性
  • 通过节点竞选机制解决单点问题
  • 先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果


为了解决问题,通常会从以下方式来寻找方法:

(1)存储数据时按有序存储

(2)将数据和索引分离

(3)压缩数据

这就引出一Elasticsearch。

ES

Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据,可扩展性好。使用Lucenne作来核心,但它的目的是通过Restful API来隐藏lucene的复杂性,从而让全文搜索变得简单。

1.解决主要问题

(1)检索相关数据

(2)返回统计结果

(3)速度更快

2. 工作原理

当ES节点启动后,它会利用多播(或者单播,如查用户更改了配置)寻找集群中的其它节点,并与之建立连接。


3. 概念

(1)集群cluster

(2)节点node

(3)分片shard

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够,这种情况下,数据可以分成较小的分片,每个分片放在不同的服务器上。当你查询的索引分布在多个分片时,ES会把查询发给每个相关的分片,并将结果组合在一起。

(4)副本replia

副本是一个分片的精确复制,每个分片可以有0或多个副本。

(5)全文检索

可以根据关键字搜索,类似sql中的like。

4.ES数据架构的主要概念(与mysql对比)


 在一个关系数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在ES中Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。

猜你喜欢

转载自blog.csdn.net/chs007chs/article/details/80118303