ElasticSearch入门必读

什么是ElasticSearch
业务:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:
1)用什么数据库好?(mysql、sybase、oracle、达梦、神通、mongodb、hbase…)
2)如何解决单点故障;(lvs、F5、A10、Zookeep、MQ)
3)如何保证数据安全性;(热备、冷备、异地多活)
4)如何解决检索难题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等;)
5)如何解决统计分析问题;(离线、近实时)

  1. 传统数据库的应对解决方案:
    对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈:
    解决要点:
    1)通过主从备份解决数据安全性问题;
    2)通过数据库代理中间件心跳监测,解决单点故障问题;
    3)通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果
    在这里插入图片描述
  2. 非关系型数据库的解决方案
    对于Nosql数据库,以mongodb为例,其它原理类似:
    解决要点:
    1)通过副本备份保证数据安全性;
    2)通过节点竞选机制解决单点问题;
    3)先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果
    在这里插入图片描述
  3. 完全把数据放入内存:
    我们知道,完全把数据放在内存中是不可靠的,实际上也不太现实,当我们的数据达到PB级别时,按照每个节点96G内存计算,在内存完全装满的数据情况下,我们需要的机器是:1PB=1024T=1048576G
    节点数=1048576/96=10922个
    实际上,考虑到数据备份,节点数往往在2.5万台左右。成本巨大决定了其不现实!
    从前面讨论我们了解到,把数据放在内存也好,不放在内存也好,都不能完完全全解决问题。
    全部放在内存速度问题是解决了,但成本问题上来了。
    为解决以上问题,从源头着手分析,通常会从以下方式来寻找方法:
    1、存储数据时按有序存储;
    2、将数据和索引分离;
    3、压缩数据;
    这就引出了Elasticsearch。
    Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

  • 实时分析的分布式搜索引擎。

  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
    Elasticsearch的文件存储:Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式。比如:

    {
    “name” : “John”,
    “sex” : “Male”,
    “age” : 25,
    “birthDate”: “1990/05/01”,
    “about” : “I love to go rock climbing”,
    “interests”: [ “sports”, “music” ]
    }
    将Elasticsearch和关系型数据术语对照表:
    关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
    Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
    总结:Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据,Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
    Lucene与ES关系:
    1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
    2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
    ElasticSearch工作原理:
    Elasticsearch的一些架构设计,对我们做性能调优、故障处理,具有非常重要的影响。下面将从Elasticsearch的准实时索引的实现、自动发现、rounting和replica的读写过程,shard的allocate控制。
    著名的开源程序Lucene是为索引组件,它提供了搜索程序的核心索引和搜索模块,例如图中的“Index”及下面的部分;而ElasticSearch则更像一款搜索组件,它利用Lucene进行文档索引,并向用户提供搜索组件,例如“Index”上面的部分。二者结合起来组成了一个完整的搜索引擎。
    我们先说索引组件。
    索引是一种数据结构,它允许对存储在其中的单词进行快速随机访问。当需要从大量文本中快速检索文本目标时,必须首先将文本内容转换成能够进行快速搜索的格式,以建立针对文本的索引数据结构,此即为索引过程。
    ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎。
    ES依赖于JDK,使用Oracke JDK或OpenJDK均可。
    ElasticSearch应用
    ElasticSearch被用作全文检索、结构化搜索、分析以及这三个功能的组合:

  • Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。

  • 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,实时的给它的编辑们提供公众对于新文章的反馈。

  • Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题与答案。

  • GitHub 使用 Elasticsearch 对1300亿行代码进行查询。
    然而 Elasticsearch 不仅仅为巨头公司服务。它也帮助了很多初创公司,像 Datadog 和 Klout, 帮助他们将想法用原型实现,并转化为可扩展的解决方案。Elasticsearch 能运行在你的笔记本电脑上,或者扩展到上百台服务器上去处理PB级数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值