elk与mysql的对比_关系型数据库与 ElasticSearch 对比

本文对比了关系型数据库MySQL与非关系型数据库ElasticSearch在概念和操作上的异同。MySQL中数据库、表、行、列和SQL查询语句对应ES的实例、索引、文档、字段和DSL查询。在ES中,创建索引和添加数据更灵活,通过HTTP REST API进行,数据以JSON格式存储。虽然两者查询语法不同,但都能实现数据的增删改查和分组操作。
摘要由CSDN通过智能技术生成

基本概念对比

关系型数据库,像最常见的 Mysql , SqlServer 都是属于关系型数据库,关系型数据中有这几种概念:数据库、表、行、列、Schema,还有 SQL 查询语句。

以学生数据库为例,回忆一下数据库过程:

建学生数据库

见一个学生表

配置学生字段,如名称 varchar、性别 char 等

一行代表一个学生,不同的列代表这个学生不同的属性

ES 也与关系型数据库如出一辙,只是叫法不同,在 ES 中建一个学生数据库步骤如下:

在 ES 中启动一个 ES 实例,这个实例就相当于数据库,表在 ES 中被称为索引 Index,行称为文档 Document,列称为字段 Field ,Schema 被称为 Mapping ,数据库中查询语句 SQL 在 ES 中有相应的 DSL 查询语句。

因此建学生索引:

配置 ES,启动一个 ES 实例

新建一个学生索引

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

一个 JSON 字符串代表一个学生,JSON 字符串中有学生属性字段 Field

具体对应关系如下表:

RDBMS

ES

Table

Index(Type)

Row

Document

Column

Field

Schema

Mapping

SQL

DSL

创建 Table/Index 对比

传统数据创建方式如下,使用简单的 SQL 语句就能够轻松创建,但是前提是要定义好表结构以及数据类型。

CREATE TABLE Student(

name varchar(20),

sex char(2),

age int

);

`

ES 基于 Http 协议的,增删改查的接口都基于 Http ,因此它需要使用 ES 的 Rest API 才能够创建,只需要将 JSON 格式的学生数据利用 Rest API PUT 给 ES 即可自动创建,并且可以选择性的更改 ES 自动创建好的数据字段的类型 ,后面的课时中有详细的介绍如何对 ES 进行增删改查。

下面的这个语法,是基于 ES 的可视化界面 Kibana 来做的,使用 PUT 的方式,索引是 student,操作是 _create 创建。这样的话就会自动创建好索引,以及数据字段的类型,比如 name 是 text 类型,age 是 数字类型。

PUT student/_create/1

{

"name":"xiaoming",

"sex":"male",

"age":18

}

Row/Document 对比

传统数据库中,row 就是一行数据,每行数据是一条记录。查询结果如下:

name | sex |age

xiaoming | male | 18

但是在 ES 中数据记录的方式是 documet ,插入数据是将数据看做 documet 然后以 JSON 的格式插入进行,因此查询返回的结果也是 JSON。

{

"took" : 10,

"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" : "xiaoming",

"sex" : "male",

"age" : 18

}

}

]

}

}

Column/ Field 对比

传统数据的话每列代表一个属性,name 列都是都是姓名并且类型是 varchar(20)。

ES 根据字段类型自动创建,会给 name 字段自动定义为 String 类型。

f68b23fd33777bbb6bb412baa33f8dcf.png

Schema /Mapping 对比

传统数据库 Schema 说明了表之间的联系结构,字段关系主外键等。

1dc72c988ba6aef73527a8d38d9e162f.png

而 ES 是没有这么多复杂的关系,不存在主外键,表与表之间相互联系,因此 ES 是将一个对象的 JSON 实体直接存到 ES 中,通过 mapping 来查看具体结构。

{

"mapping": {

"properties": {

"age": {

"type": "long"

},

"name": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

},

"sex": {

"type": "text",

"fields": {

"keyword": {

"type": "keyword",

"ignore_above": 256

}

}

}

}

}

}

SQL/DSL 对比

两者都是一种语法,SQL 是针对传统数据库的,DSL 是针对 ES 的。在 “创建 Table/Index 对比” 这个部分已经能够很好的说明了两者的区别与联系,语法不通,但是应用场景非常的相似,像增删改查,分组等,两者都具备这样的功能。

小结

本节我们明白了两者之间的异同,就能够很好的理解ES各个概念,本课时对传统数据库与 ES 做了一个粗略的对比,只通过本课时想要把握两者的具体与联系是比较困难的,想要了解更多的 ES 特性请多关注后面的实战课时。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值