1. Elasticsearch简介
Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。
Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。
Elasticsearch就是为高可用和可扩展而生的。可以通过购置性能更强的服务器来完成。
官网:https://www.elastic.co/downloads/elasticsearch
中文社区:https://es.xiaoleilu.com/
XXL组织也有相关的产品:ElastiJob—XXL-JOB
2. Elasticsearch优势
「横向可扩展性」:只需要增加台服务器,做一点儿配置,启动一下Elasticsearch就可以并入集群。
「分片机制提供更好的分布性」:同一个索引分成多个分片(sharding), 这点类似于HDFS的块机制;分而治之的方式可提升处理效率。
「高可用」:提供复制( replica) 机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其他可用节点上。
3. Elasticsearch应用场景
大型分布式日志分析系统ELK :Elasticsearch(存储日志)+ Logstash(收集日志) + Kibana(展示数据)
应用于:大型电商商品搜索系统、网站站内搜索、网盘搜索引擎等。
例如:
- Elasticsearch使用公司
- 维基百科
- The Guardian(国外新闻网站)
- Stack Overflow(国外的程序异常讨论论坛)
- GitHub(开源代码管理)
- 电商网站
- 日志数据分析
- BI系统
- 站内搜索
- 。。。。。
4. Elasticsearch存储结构
Elasticsearch是文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:
{
"name" : "ylw",
"sex" : 0,
"age" : 25
}
关系数据库 ⇒ 数据库 (会员数据库)⇒ 表 (用户表) ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
5. Kibana可视化界面
Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
可以用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。
6. Elasticsearch版本控制
1.为什么要进行版本控制CAS无锁?
答:为了保证数据再多线程操作下的准确性
2.悲观锁和乐观锁
悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据准确性的操作
乐观锁:假设不会发生并发冲突,只在提交操作是检查是否违反数据完整性。
3.内部版本控制和外部版本控制
- 内部版本控制:_version自增长,修改数据后,_version会自动的加1
- 外部版本控制:为了保持_version与外部版本控制的数值一致,使用version_type=external检查数据当前的version值是否小于请求中的version值。