数据结构:数据用什么样的方式组合在一起
常见的数据结构:栈、队列、数组、链表、树
栈:
是一种先进后出的结构,只能从一段操作新增和删除,无法从数据中间增删,栈结构有两个名词:压栈、弹栈。分别为往栈里添加数据和删除数据。
栈结构很像弹匣,只能从一端新增和删除,并且先进后出。
队列:
是一种先进先出的数据结构,类似于从队列左边添加数据,从右边弹出数据,也无法从中间插入和删除。
数据会像排队一样,先进入队列的先被弹出。
数组:
数组是有序的数据结构,每一个元素都有自己的下标,所以可以很快通过下标找到指定元素。
优点:1.查找速度快,因为可以通过下标查找。
2.可以再数据中间做增删操作。
缺点:1.增删速度慢,因为从数组中间进行增删,会导致后面所有数据的下标改变。
数组的新增原理:1.先创建新数组。
2.将新元素放在指定下标处
3.将元素其余元素复制到新元素
链表:
是由一个个节点组成的,每个节点存自己的值以及下一个节点的地址。
优点:增删快,只需要修改左节点的地址然后记录下一个节点的地址
缺点:查询慢,需要一个个节点的查询
ElasticSearch
首先什么是ES 为什么用ES
ES是快速搜索引擎引擎;
如果用mysql我们需要对商品或者标题做搜索,我们会通过模糊搜索来找出对应行数据,比如有一条数据是”I like ABC and DEF “ 我们的搜索条件给的”like DEF 而且不一定能搜索到,而且效率很慢 ;
如果用ES 就可以很快速的搜索到,而且数据量大也没关系,这是因为ES会对内容进行倒排索引 比如 ”今天天气很好“”今天很开心“ 对于这两个句子 ES会先进行分词 ,比如 “今天”对应ID【1、2】 ;“天气”对应【1】;“开心”对应【2】 那么当你搜索”今天”的时候会直接【1、2】
上面这些是讲为什么用ES,接下来我说一下ES的重要概念
1.集群和节点
在生产中ES肯定是以集群的方式存在的,那么就分为主节点和数据节点,主节点负责创建索引,数据节点负责读写数据
2.索引 类比 数据库中的库
在ES中不再区分更细维度的type 都是以【文档】的方式存储
3.文档 类比 行
每一行文档都会有个对应的唯一ID
4.字段 类比 列
每个文档中的键值对,有两个重要的字段类型;
text:会被分词 比如“今天天气很好”会被分成“今天”“天气”“很好”
keyword:不被分词 比如手机号等信息
5.分片
由于ES都是用于大量数据搜索的,所以把所有数据放到一台服务器中不现实,内存也受不了,所以会将数据分成多片,放到不同服务器中,并且还有主分片和副本分片(副本分片就是主分片的拷贝)这样就算其中一个服务器宕机也可以有其他服务器使用自己的主分片和副本顶上,同时这么干还能提升查询效率 因为他默认多个服务器同时开始检索