系列文章
前言
提示:先看个ES 官方给的一个故事:
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
据说,Shay 的妻子还在等着她的食谱搜索引擎…
基本概念
1:首先你要知道ES 是面向文档的,Elasticsearch 使用 JavaScript Object Notation(或者 JSON)
作为文档的序列化格式,可参考下面这个格式:
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
2:关系型数据库和ES 的对比关系,这里是简单介绍后面都会把单独的拿出来详细讲
,这一章是先熟悉概念
- 索引:简单说就是保存相关数据的地方
- 文档:多数实体或对象可以被序列化为包含键值对的 JSON 对象
- 字段:对应文档里面的单个字段
RDBMS | ES |
---|---|
table(表) | index(索引) |
row (一条记录) | document(文档) |
column (列) | field(一个字段) |
schema(创建语句) | Mapping(字段和类型定义配置) |
sql (查询语言) | DSL(查询语言) |
3:Es 本身就是一个分布式的,具有基本的可扩展和分布式
- 服务可用性,允许有节点停止服务
- 数据可用性 - 部分节点丢失,不会丢失数据
- 请求量提升/数据的不断增长的时候将数据分布到不同的节点上。
比如:
Node 1 和 Node 2 上各有一个分片被迁移到了新的 Node 3 节点,现在每个节点上都拥有2个分片,而不是之前的3个。 这表示每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片的性能将会得到提升。
4:分片
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里.
一个的分片可配置多个副分片,相当于备份了,这就保证了数据可用性。
一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份
什么语言适合?
看到这个问题你可能会担心什么语言适合使用Es,对于这个问题Es已经考虑到了,提供了 RESTful API
使得大部分语言都是支持的,下面是Es提供的客户端:
总结
这一节只是了解,有个大概印象。后面会介绍相关命令和详细操作。