前言
公司要做的查询特别复杂,涉及到多表查询,主要是用mysql存储的,而且数据量目前已经是万级,数据量只增不减,之前用的是mysql查的,但是特别慢,因此现在打算用elastic search来做。对es有一个大概的了解,知道怎么用先。
简介
ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。
同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。
可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
ES就是为高可用和可扩展而生的。一方面可以通过升级硬件来完成系统扩展,称为垂直或向上扩展(Vertical Scale/Scaling Up)。
另一方面,增加更多的服务器来完成系统扩展,称为水平扩展或者向外扩展(Horizontal Scale/Scaling Out)。尽管ES能够利用更强劲的硬件,但是垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展,通过向集群中添加更多的节点来分担负载,增加可靠性。ES天生就是分布式的,它知道如何管理多个节点来完成扩展和实现高可用性。意味应用不需要做任何的改动。
设计结构
1、逻辑设计
文档
文档是可以被索引的信息的基本单位,它包含几个重要的属性:
是自我包含的。一篇文档同时包含字段和他们的取值。
是层次型的。文档中还可以包含新的文档,一个字段的取值可以是简单的,例如location字段的取值可以是字符串,还可以包含其他字段和取值,比如可以同时包含城市和街道地址。
拥有灵活的结构。文档不依赖于预先定义的模式。也就是说并非所有的文档都需要拥有相同的字段,并不受限于同一个模式
{
"name":"meeting",
"location":"office",
"organizer":"yanping"
}
{
"name":"meeting",
"location":{
"name":"sheshouzuo",
"date":"2019-6-28"
},
"memebers":["leio","shiyi"]
}
类型
类型是文档的逻辑容器,类似于表格是行的容器。在不同的类型中,最好放入不同的结构的文档。
字段
ES中,每个文档,其实是以json形式存储的。而一个文档可以被视为多个字段的集合。
映射
每个类型中字段的定义称为映射。例如,name字段映射为String。
索引
索引是映射类型的容器一个ES的索引非常像关系型世界中的数据库,是独立的大量文档集合。
关系型数据库与ES的结构上的对比