在互联网当中我们的查询的信息主要包括文章、视频、图片、网站信息等各式各样的复杂海量信息。怎么才能快速、准确的检索到我们想要的信息呢?
传统意义上根据数据的格式,我们会将数据分为三个大类
- 结构化数据
- 非结构化数据
- 半结构化数据
接下来我们详细的了解一下这3类数据结构:
-
结构化数据
所谓的结构化数据,我们一般会用特定的结构来组织和管理数据,它一般表现为二维的表结构。
如下图中,我们的用户数据。其中包含了我们用户的姓名、手机号等信息。这 些信息是有关系的,所以我们可以保存到关系型数据库当中。比方说Mysql当中, 并可以通过SQL语句来进行查询。为了提高效率,我们甚至可以采用一些索引的方 式来优化查询。
它的优点就是方便管理、方便查询;它的缺点是扩展结构难。
当我们已经有现有的结构之后,我们再去扩展,其实不方便
这是我们的结构化数据
-
非机构化数据
所谓的非结构化数据,其实就是我们无法用二维表结构来表现数据的这种数据。
如下图中的工作文档中的报表、视频、图片、服务器日志、通信记录等这些数据。
它的维度广、数据量大,所以数据存储和查询的成本其实是非常大的,往往需要专业的人员和大量的统计来进行处理。
一般会将这样的数据保存到Nosql数据库中,比如Mogodb、Redis中。那么这样的数据库一般都是以key-value结构来进行保存的,查询我们的数据相对来说比较快。
这是我们的非结构化数据
-
半结构化数据
半结构化数据,就是说将数据的结构和内容混在一起,它没有明显的区分。
比如xml,html这样的文档其实就是我们的半结构化数据,这样的数据一般也都是保存到Mogodb这样数据库当中。
它的缺点就在于我们查询它的内容其实不是很容易。
真实使用场景下,我们搜索的对象并非都是关系型结构化的信息,我们无法像数据库模糊查询那样模糊匹配,更不可能便利所有的内容做匹配。毕竟查询的目的是为了快速找到你想要的信息。
思考问题
如何在海量数据中,查询结构化数据以及非结构化数据当中的内容?并且准确的查询是非常重要的。
解决方案
带着前面的问题,先来看一个分布式免费开源搜索分析引擎,他的名字叫——Elasticsearch。从名字上来看他表示可伸缩、灵活的查询的意思,从字面上我们可以了解这款引擎的核心就是查询。
随着5G时代的到来,海量数据充斥着我们生活的方方面面,实时数据的采集分析存储就是计算机数据处理技术未来发展的方向。而我们要学习的Elasticsearch在这些方面表现是非常抢眼的,所以我们要持续的关注Elasticsearch,看看能够给我们带来哪些惊喜?
那接下来我们一起来走入Elasticsearch的世界,感受他的魅力
初识Elasticsearch
什么是Elasticsearch
Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
Elasticsearch的用途是什么?
Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:
- 应用程序搜索
- 网站搜索
- 企业搜索
- 日志处理和分析
- 基础设施指标和容器监测
- 应用程序性能监测
- 地理空间数据分析和可视化
- 安全分析
- 业务分析
Elasticsearch的工作原理
原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理
基本概念
1、Index(索引)
动词:相当于Mysql中的Insert操作
名词:相当于Mysql中的Database
2、Type(类型)
在Index(索引)中,可以定义一个或多个类型;
类似于Mysql中的Table,每一种类型的数据放在一起;
3、Document(文档)
保存在某个索引(索引)下,某种类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是Mysql中的某个Table里面的内容;
Elasticsearch与Mysql对比
elasticsearch和mysql概念对比关系表 | ||||
---|---|---|---|---|
Elasticsearch | Index(索引) | Type(类型) | Document(文档) | Fields(字段) |
Mysql | Database(数据库) | Table(表) | Row(行) | Column(列) |
官方文档:
下面这个是官方文档有助于我们更好的学习:
欢迎大家关注我的《coder练习生》