[转帖]Elasticsearch数据库
1、什么是Elasticsearch
1、概念以及特点
1、Elasticsearch和MongoDB/Redis/Memcache一样,是非关系型数据库。是一个接近实时的搜索平台,从索引这个文档到这个文档能够被搜索到只有一个轻微的延迟,企业应用定位:采用Restful API标准的可扩展和高可用的实时数据分析的全文搜索工具。
2、可拓展:支持一主多从且扩容简易,只要cluster.name一致且在同一个网络中就能自动加入当前集群;本身就是开源软件,也支持很多开源的第三方插件。
3、高可用:在一个集群的多个节点中进行分布式存储,索引支持shards和复制,即使部分节点down掉,也能自动进行数据恢复和主从切换。
4、采用RestfulAPI标准:通过http接口使用JSON格式进行操作数据。
5、数据存储的最小单位是文档,本质上是一个JSON 文本:
2、项目中为何使用(主搜索次分析再存储)
2.1、搜索引擎
实际项目开发中,几乎每个系统都会有一个搜索的功能,数据量少时可以直接从主数据库中比如Mysql搜索,但当搜索做到一定程度时,比如系统数据量上了10亿、100亿条的时候,传统的关系型数据库的I/O性能和统计分析性能就难以满足用户需要了。所以很多公司都会把搜索单独做成一个独立的模块,用ElasticSearch等来实现。虽然内存缓存数据库的读写性能很高,但完全把数据放在内存中是不太现实的,比如到PB级别的数据,按照每个节点96G内存计算,在内存完全装满的数据情况下,需要的机器是:1PB=1024T=1048576G ,节点数就是1048576/96=10922个 ,再考虑到数据备份,节点数还需要翻倍,成本巨大决定了其不现实!
2.2、日志分析
Elasticsearch+ Logstash + Kibana是同一家公司开发的3个开源工具,可组合起来搭建海量日志分析平台,目前很多公司都在使用这种方式搭建日志分析平台进行大数据分析。
3、底层架构
4、使用状况以及与其他搜索引擎的对比
2013年初,GitHub抛弃了Solr,采取ElasticSearch来做PB级的搜索,包括13亿文件和1300亿行代码”。
百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。
2、RESTFul 介绍
1、什么是RESTFul
REST(RepresentationalState Transfer)是一种软件架构的设计风格(不是标准),通过 HTTP接口处理数据,主要用于客户端和服务器的数据交互。该风格的具体特点——在服务器端,应用程序对象、数据库记录、算法、文本、图片等都是一个实体资源,使用 URI标识,所有资源都共享统一的接口(标准的HTTP方法)比如 GET、PUT、POST 和 DELETE,在客户端和服务器之间传输数据。
2、CURL命令的讲解
2.1、什么是CURL
本质就是以命令方式发送HTTP请求,可以完成比如发送表单信息、文件上传、分段下载、模拟登录等,理论上在APP或Web里能操作的通过此指令都能操作。
2.2、具体应用
3、Elasticsearch API文档查看
3、Elasticsearch及相关插件的安装
1、安装Elasticsearch并启动服务
2、安装第三方插件
2.1、Head插件
是Elasticsearch的一个集群管理工具,可以通过它来查看和搜索ES的数据,是完全由html5编写的独立网页程序。
2.2、Bigdesk插件
是Elasticsearch的一个集群监控工具,可以通过它来查看ES集群的各种状况,如cpu、内存使用情况、索引数据、搜索情况、http连接数等。
2.3、Mavel插件
4、倒排索引(ES具体是怎么搜索的)
1、倒排索引和正向索引
在全文搜索里,文档数据离不开搜索,而搜索离不开索引(没有索引搜索会很低效),倒排索引(Inverted index)是全文搜索系统里最高效的索引方法和数据结构,ES的索引就是倒排索引。也称反向索引/置入索引或反向档案,用以存储一个映射:在全文搜索下某个单词在一个文档或者一组文档中的位置。
2、倒排索引建立索引的具体方式
始、确定需求
在这5份文档中根据关键字“乔布斯”搜索匹配的文档,附属要求:文档的排序,这个搜索关键字在每个匹配文档中出现的位置和次数。
1、把文档进行分词(怎么分要看实际需求)
2、得到单词集合和文档集合(使用ID标记)
3、根据上面俩集合得到这个矩阵/数据结构
4、根据上表建立索引
终、实现需求了
5、ES的CURD操作
1、ES的API(本次在Mevel里演示,等同head和curl)
1.1、操作索引的API
1.2、操作类型的API
1.3、操作文档的API(每次仅能操作一个文档)
2、ES的内置字段以及字段的类型
6、批量操作文档
上节介绍的关于《操作文档的API》都只能对单个文档进行增删改查,mget用于批量检索多个文档,bulk用以批量创建/更新/删除多个文档。
1、通过mget批量检索多个文档
2、通过bulk批量创建/更新/删除多个文档
1、bulk的使用规范和使用案例
2、bulk处理文档大小的最佳值
7、Elasticsearch的锁机制
1、为什么要使用锁机制
2、加锁的机制:悲观锁和乐观锁
悲观锁和乐观锁是什么已经在《Mysql.docx》介绍了。
1、其中提到对于数据库而言,悲观锁只能通过数据库本身实现,但是ES并没有提供悲观锁机制。
2、其中也提到对于数据库而言,乐观锁是通过逻辑实现的,在ES数据库上实现乐观锁便是通过文档的默认字段_version实现的。
3、ES实现乐观锁的两种方式
前提:两种修改文档(_update更新和put覆盖)的方式都会导致目标文档的_version自增1或者直接改为指定的。
3.1、内部版本控制
指定的version必须要 = 文档目前的_version,否则就报error。如果符合就修改成功,并且把文档version自增1。
3.2、外部版本控制
搭配version_type=external,指定的version必须 > 文档目前的_version,否则就报error。如果符合就修改成功,并且把文档version直接变成指定的。
8、Elasticsearch如何做Mapping
1、什么是mapping
映射就是在创建索引或者先创建索引后修改的时候,预先定义字段的数据类型以及相关属性。
如果程序员没有主动为索引创建映射,则以后在创建文档时,ES会智能的给索引建立映射,处理每个字段的数据类型和属性。
2、ES里可以为字段定义哪些数据类型和属性
3、关于映射的具体操作
9、ES查询
1、基本查询
1、使用q查询
2、使用term系列查询
1、使用term查询
2、使用terms查询
3、使用match系列查询(有智能搜索的效果)
1、使用match查询
2、使用match_phrase查询
3、使用multi_match查询
4、使用match_all查询
5、使用prefix作前缀匹配查询
6、使用range作区间搜索
7、使用wildcard查询
8、使用fuzzy进行模糊搜索(有智能搜索的效果)
1、使用fuzzy查询
2、使用fuzzy_like_this查询
3、使用fuzzy_like_this_field查询
2、组合查询和过滤查询
当在请求中看到must(and)、should(or)、must_not(not)、filtered、filter、exists、gt、lt、missing、negative、negative_boost、_cache、constant_score、not_match_query、indices等词时,就是使用了组合查询或者过滤查询,太麻烦,不研究了。仅介绍下图这一种,使用bool也是最常用的:
3、查询的辅助字段,用以处理结果集
1、使用from和size控制返回文档的数量
2、使用version返回文档的_version
3、使用fields返回指定字段
4、使用partial_fields返回指定字段
5、使用sort排序
6、使用通配符,通常是用在字段名中
10、ES集群管理
1、ES的数据为何是安全的
2、elasticsearch.yml文件配置
[转帖]Elasticsearch数据库的更多相关文章
- elasticSearch数据库、skywalking集群部署
Centos6上面安装elasticsearc数据库的集群 安装的是6.3.2版本,安装之前首先要先安装jdk1.8版本 安装之前首先需要关闭防火墙 Centos6 sudo service ipta ...
- Elasticsearch数据库 | Elasticsearch-7.5.0应用搭建实战
Elasticsearch 是一个可用于分布式以及符合RESTful 风格的搜索和数据分析引擎.-- Elastic Stack 官网 搭建Elasticsearch的"那些事儿" ...
- Elasticsearch数据库优化实战:让你的ES飞起来
摘要:ES已经成为了全能型的数据产品,在很多领域越来越受欢迎,本文旨在从数据库领域分析ES的使用. 本文分享自华为云社区<Elasticsearch数据库加速实践>,原文作者:css_bl ...
- ElasticSearch数据库同步插件logstash
1.下载和elasticsearch 相同版本的logstash. 2.进行解压后,进入bin下,新建一个文件mysql.conf,并输入 input { stdin{ }} output { std ...
- elasticsearch数据库使用
elasticsearch的一个最为显著的优点:快速全文检索.关于elasticsearch 全文检索的原理,请看:https://blog.csdn.net/wolfcode_cn/article/ ...
- [转帖]时间序列数据库 (TSDB)
时间序列数据库 (TSDB) https://www.jianshu.com/p/31afb8492eff 0.3392019.01.28 10:51:33字数 5598阅读 4030 背景 2017 ...
- Elasticsearch数据库 | Elasticsearch-7.5.0应用基础实战
Elasticsearch 是一个可用于分布式以及符合RESTful 风格的搜索和数据分析引擎.-- Elastic Stack 官网 关于Elasticsearch的"爱恨情仇" ...
- [转帖] Oracle数据库 通过触发器 限制登录ip
转帖 From https://yq.aliyun.com/ziliao/123360 create or replace trigger logon_ip_control after logon o ...
- [转帖]商用数据库之死:Oracle 面临困境
商用数据库之死:Oracle 面临困境 投递人 itwriter 发布于 2019-10-20 08:22 评论(1) 有238人阅读 原文链接 [收藏] « » https://news.cnblo ...
随机推荐
- Vue 动态控制页面中按钮是否显示和样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- service---七月十九号实验
目录 service---七月十九号实验 1 startService.bindService 2 分析生命周期变化 问题思考: service---七月十九号实验 1 startService.bi ...
- 爬取 豆瓣电影Top250
目标 学习爬虫,爬豆瓣榜单,获取爬取静态页面信息的能力 豆瓣电影 Top 250 https://movie.douban.com/top250 代码 import requests from bs ...
- 并发编程(六)--进程/线程池、协程、gevent第三方库
一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可 ...
- DF1协议简述
DF1协议 1. 概述 可编程控制器(PLC)因编程方便,抗干扰能力强,被广泛应用于各种领域.DF1协议是AB公司可编程控制器系统广泛支持的数据链路层通信协议,各系列可编程控制器及装有RSLin ...
- atlas笔记
目录 环境 Mysql+Atlas配置 atlas:mysql-proxy扩展,mysql中间件,可以实现分表.分库(sharding版本).读写分离.数据库连接池等功能! Atlas类似于Twemp ...
- c++ c的拓展
C++对c的拓展之, 引用和const关键字 bool类型关键字 C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool C++中的bool可取的值只有true和false 理论上bool ...
- 仿照手机写一个WIFI的操作程序
本篇博客仿照手机的功能,写一个WIFI的操作程序. 手机的WIFI功能有哪些呢?当我们进入wlan的设置界面的时候,将自动识别出若干个wifi的热点,并且会自动更新,当点击某个wifi热点的时候,然后 ...
- c3p0参数
<c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...
- 把antd的组件源码搬到Ant Design Pro中使用
把组件源码搬过来后,样式死活不生效,经过1天的努力,有说less-loader的,有说webpack配置,还有说babel配置的,最后,我自己找到了方法 就是在global.less中使用@impor ...