史上最简单的Elasticsearch教程-第四章:Elasticsearch与Mysql的区别,一看就懂

Es与Mysql的区别,一看就懂!

 

(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)

(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)

(帮到到您请点点关注,文章持续更新中!)

Git主页    https://github.com/Mydreamandreality

OK.本来前一章了解了是如何给ES发送restful请求,这章是要准备搞一个增删改查的案例的

但是我觉得还是再详细的解释一遍ES和Mysql的区别,具体在哪里,方便后面的学习

 

Elasticsearch是分布式的全文检索引擎

Mysql是流行的关系型数据库

 

  1. Elasticsearch面向文档

    1. 什么叫面向文档?

      1. 应用中的对象很少只是简单的键值列表,更多时候它拥有复杂的数据结构,比如包含日期、 地理位置、另一个对象或者数组。

        1. 比如:你的数据可能是这个样子,或者更复杂

{

  "took": 0,

  "timed_out": false,

  "_shards": {

    "total": 5,

    "successful": 5,

    "skipped": 0,

    "failed": 0

  },

  "hits": {

    "total": 16137,

    "max_score": 1,

    "hits": [

      {

        "_index": "origin_flow_data_20190111",

        "_type": "logs",

        "_id": "AWg4fyND8G2qFi8QNpwr",

        "_score": 1,

        "_source": {

            ..........省略

        }

..........省略
  1. 如果上面的数据存储到Mysql你需要怎么做?兄弟萌思考一下

    1. 如果将这些数据保存到由行和列组成的关系数据库中

    2. 就好像是把一个丰富,信息表现力强的对象拆散了放入一个非常大的表格中:

    3. 你不得 不拆散对象以适应表模式(通常一列表示一个字段),然后又不得不在查询的时候重建它们

    4. 你忍心这么操作吗???兄弟

 

 

  1. 在Elasticsearch中是怎么处理的?

    1. Elasticsearch是面向文档(document oriented)的

    2. 这个意思就是它可以存储整个对象或文档 (document),所以ES的Type(可以理解为Mysql的表)中的数据是这样的史上最简单的Elasticsearch教程-第四章:Elasticsearch与Mysql的区别,一看就懂_第1张图片

    3. 当然可以更复杂!

    4. 而且它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索

    5. 在 Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

    6. 这种理解数据的方式与以往完全不同,所以这也是Elasticsearch能够执行复杂的全文搜索的原因之一

  2. 之前简单的总结过一次ES与Mysql的区别,这里再次总结一次

  3. 在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,

Relational DB -> Databases -> Tables -> Rows -> Columns       //这个就是Mysql的结构,不多BB,都懂 

Elasticsearch -> Index     -> Types  -> Documents -> Fields      //这个就是ES的结构



#ES的index代表Mysql中的数据库

#ES的types代表Mysql中的Tables

#ES的Document代表Mysql中的行   

#ES的Fields代表Mysql中的列   




Elasticsearch集群可以包含多个索引index数据库

每一个索引可以包含多个类型 types表,

每一个类型包含多个文档documents行

每个文档包含多个字段 Fields列

 

解释一下当时我学习时的误区:摘自官方文档5.x版本

[索引]含义的区分 你可能已经注意到索引(index)这个词在Elasticsearch中有着不同的含义,

所以有必要在 此做一下区分: 

索引(名词) 如上文所述,一个索引(index)就像是传统关系数据库中的数据库,

它 是相关文档存储的地方,index的复数是indices 或indexes。

    

19/1/15张耀烽补充:

1:MySQL有事务性,而Elasticsearch没有事务性,所以你删了的数据是无法恢复的,

如果业务中包含大量的敏感数据,建议进行容灾备份(后续也会讲这个如何操作)

 

2:其次是Es也没有物理外键这个特性,如果你的数据强一致性要求比较高,还是建议慎用

ES本身就是支持分布式的,所以在这上面的投入可能会比你搞Mysql集群,分库分表方便多了

 

3:ES支持http协议 Json格式 9200端口,thrift,servlet,memcached,zeroMQ等的传输协议(通过插件方式集成)传统关系型数据库不支持
 

4.从低层原理上来说.ES采用倒排索引,关系型数据库Mysql采用的是B+树索引
 

5.在面对大数据量简单计算的时候ES的效率原高于Mysql传统数据库,但是在定位某一个唯一值,比如ID查询时并不需要ES

   但在大数据的相似计算与搜索,ES的分布式并行计算有绝对的优势

 

6.Elasticsearch虽然已经在Lucene(底层搜索引擎)之上进行封装,但是操作还是繁琐,在Java中的应用,可能我们用Mysql搞一个不复杂的查询只需要5行代码(前提是Springboot项目),但是ES可能会写到50行+,虽然SpringData有对ES的封装,但是根本满足不了日常的开发,只能简单的使用,所以我建议还是自己动手封装

 

7.ES提供给Java的Api真的优美,很好扩展

 

...........后续想到继续补充

OK,ES与MYSQL的区别就先说到这里,后续有什么遗漏的地方我再补充----

下一章开始写restful的增删改查,

之后就是JavaApi如何使用!

你可能感兴趣的:(#,Elasticsearch,拥抱大数据)