暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch 与关系型数据库对比

唯自律方自由 2021-05-26
5860

Elasticsearch(简称 ES,下同) 有几个重要的概念,初学的人不是很好理解,所以为了更快理解和掌握 ES 的重要概念,我们将  ES 和关系型数据库作下类比。

1. 重要概念对比

  • ES 的几个重要概念是:Index(索引)、Type(类型)、Mapping(索引定义)、Document(文档)、Field(字段)、DSL(查询等语句)。

  • 关系型数据库类似的重要概念是:Table(表)、Schema(结构、定义)、 Row(数据行)、Column(数据列)、SQL(查询等语句)。

按照类比将 ES 和关系型数据库各重要概念具体对应关系如下表所示:

RDBMS

ES

Table

Index(Type)

Row

Document

Column

Field

Schema

Mapping

SQL

DSL

下面通过实例来比较和说明两者的重要概念,帮助我们更加直观的理解这些概念:

  • 比如我们现在来创建一张 student 表,创建过程如下:

    • 创建学生数据库

    • 创建学生信息表(student)

    • 配置 student 表字段,如:姓名 name - vachar 类型、性别 sex - char 类型、年龄 age - int 类型

    • student 表的每一行表示一个学生信息,不同列表示这个学生不同的属性


  • 使用 ES 创建 student 索引如下:

    • 配置 ES,启动一个 ES 实例(在 ES 中启动一个 ES 实例,这个实例就相当于数据库)

    • 创建学生信息索引(student)

    • 不需要配置字段属性,ES 会自动识别

    • 一个 json 字符串表示一个学生信息,json 字符串中包含学生属性的字段 Field


2. 创建 Index 和 Table 对比

  • 关系型数据表使用 SQL 语句来创建数据表和数据,但需要提前定义好表结构和数据类型:

    • 创建数据表:

      CREATE TABLE student(
      name varchar(20),
      sex char(5),
      age int
      );

      • 创建一条数据:

        INSERT INTO student (`name`,`sex`,`age`) VALUES ('gala','male','22');
      • ES 是基于 http 协议的,所以增删改查的接口都基于 http 协议,因此创建数据时,需要使用 ES 的 Rest API 才能够创建,只需要将 json 格式的学生信息数据利用 Rest API PUT 给 ES 接口创建数据,下面的操作是基于 ES 的可视化界面 Kibana 来操作的,使用 POST 的方式,索引是 student,操作是 _create 创建,这样就能自动创建好索引,并且自动识别各字段的数据类型。

        POST student/_create/1
        {
        "name":"gala",
        "sex":"male",
        "age":22
        }

        这样就可以轻松创建一个索引(Index)和一条数据了,接下来介绍具体数据的格式。


        3. Document 和 Row 对比

        • 关系型数据表,Row 就是一行数据,每行数据是一条记录,查询 SQL 和结果如下:

          • 查询 SQL 语句:

          select * from student;

            • 查询结果:

          • ES 中的数据记录的方式是 Document,数据格式是 json,因此查询返回的结果也是 json:

            • 查询 DSL 语句:

              GET student/_search

              • 查询结果:

              {
              "took" : 44,
              "timed_out" : false,
              "_shards" : {
              "total" : 1,
              "successful" : 1,
              "skipped" : 0,
              "failed" : 0
              },
              "hits" : {
              "total" : {
              "value" : 1,
              "relation" : "eq"
              },
              "max_score" : 1.0,
              "hits" : [
              {
              "_index" : "student",
              "_type" : "_doc",
              "_id" : "1",
              "_score" : 1.0,
              "_source" : {
              "name" : "gala",
              "sex" : "male",
              "age" : 22
              }
              }
              ]
              }
              }


              4. Field 和 Column 对比

              • 关系型数据表每列(Column)代表一个属性,student 表的列数据格式如下:

              • ES 的字段(Field)类型是自动创建的,比如会给 name 字段自定义为 string 类型,下图是在 Kibana 上创建索引模式之后可以方便看出该类索引的 Field 数据类型:


              5. Mapping 和 Schema 对比

              关系型数据表的 Schema 说明表之间的关联结构,字段、主外键等关系,但 ES 是没有这么多复杂关系的,不存在主外键,表与表之间的相互联系,ES 是将 json 数据直接存在 ES 中,通过 Mapping 来查看具体数据结构:

                • 查询 DSL 语句:

                  GET student/_mapping
                  • 查询结构:

                    {
                    "student" : {
                    "mappings" : {
                    "properties" : {
                    "age" : {
                    "type" : "long"
                    },
                    "name" : {
                    "type" : "text",
                    "fields" : {
                    "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                    }
                    }
                    },
                    "sex" : {
                    "type" : "text",
                    "fields" : {
                    "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                    }
                    }
                    }
                    }
                    }
                    }
                    }


                  6. DSL 和 SQL 对比

                  上面的查询用到了 DSL 和 SQL 语句,两者都是一种语法,SQL 针对关系型数据表的,DSL 针对 ES,两者的语法有较大的区别,但应用场景非常相似,比如两者都有“增删改查”等基础功能。在这里不在赘述,后面的学习中会很频繁使用 DSL 语句,届时再详细介绍。


                  文章转载自唯自律方自由,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论