索引

一篇文章带你搞定 ElasticSearch 术语

心不动则不痛 提交于 2020-02-27 23:43:01
这篇文章主要介绍 ElasticSearch 的基本概念,学习文档、索引、集群、节点、分片等概念,同时会将 ElasticSearch 和关系型数据库做简单的类比,还会简单介绍 REST API 的使用用法。 ElasticSearch 术语 索引和文档是偏向于逻辑上的概念,节点和分片更偏向于物理上的概念。 首先来说下什么是文档: 文档(Document) ElasticSearch(简称 ES) 是面向文档的, 文档是所有可搜索数据的最小单位 。 给大家举几个例子,让大家更形象地理解什么是文档: 日志文件中日志项 一本电影的具体信息、一张唱片的详细信息 MP3 播放器里的一首歌、一篇 PDF 文档中的具体内容 一条客户数据、一条商品分类数据、一条订单数据 大家可以把文档理解为关系型数据库中的一条记录。 在 ES 中文档会被序列化成 JSON 格式 ,保存在 ES 中,JSON 对象由字段组成,其中每个字段都有对应的字段类型(字符串/数组/布尔/日期/二进制/范围类型)。 在 ES 中,每个文档都有一个 Unique ID,可以 自己指定 ID 或者通过 ES 自动生成 。 在上一篇文章 手把手教你搭建 ELK 实时日志分析平台 中,我们讲到了通过 Logstash 向 ES 中导入数据,其中部分测试数据集和对应的转换后的格式如下所示: movieId,title,genres

ElasticSearch集群

风流意气都作罢 提交于 2020-02-27 20:56:37
ES为什么要实现集群 在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。 如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理机器上,从而可以实现高可用、容错性等。 es核心存放的是索引。 什么是分片技术 将数据拆分成多台节点进行存放。 ES是如何解决高并发 ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。 Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 ES集群核心原理分析 1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards 主分片。 查看索引分片信息 http://192.168.0.110:9200/myindex/_settings 结果为: { "myindex":

PHP程序员福利“看免费直播,学MySQL索引优化”

十年热恋 提交于 2020-02-27 19:28:39
MySQL是目前所知PHP最流行的关系型数据库管理系统之一,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。之所以它会成为主流使用数据库,这一切要归功于速度快、成本低、开放源码等优势,所以一般中小型网站的开发都选择 MySQL 作为网站数据库。 我们常见的数据库性能提升常用方案就是索引,但索引查询并不等于创建就完事,在使用过还需要提高索引命中率、优化索引等手段来达到优化的目的。这也是我们接下来所要讲解的重点,如何更为精通掌握使用MySQL?如何在利用索引查询手段时更加优化?只有彻底理解此内容,才能帮助我们在PHP进阶路上更进一步,达到中高级程序员水平。 在优化的过程中,我们需要注意一些事项:索引用在where条件经常使用的列; 加索引列的内容不是唯一的几个值; 加索引列的内容不要频繁变化; 加索引列的值可以为null,并且可以有多null ,但不能存有重复的空字符串" "; 对于创建多个列索引,如果不是一起使用的话,则查询时使用索引会不起作用,如 (创建索引A ,B 查询只查询了A );模糊查询时 使用like 前面有百分号开头索引会失效;如果条件中or ,那么条件中带索引会失效,就是说必须作为条件的所有字段都必须带索引 ,建议不要使用or关键字;如果列类型是字符串,哪作为条件查询时该列的值一定用‘ ’引号引用起来,否则索引失效。

SQL优化(三)—— 索引、explain分析

匆匆过客 提交于 2020-02-27 18:51:16
一、什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高效的查找算法.这种数据结构,就是索引 一般来说索引本身也很大,不可能全部存储在内存中,因此往往以索引文件的形式存放在磁盘中 我们平常所说的索引,如果没有特别说明都是指BTree索引(平衡多路搜索树). 其中聚集索引,次要索引,覆盖索引复合索引,前缀索引,唯一索引默认都是使用的BTree索引,统称索引.除了BTree索引之后,还有哈希索引 二、索引优缺点 优点: 提高数据查询的效率,降低数据库的IO成本 通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗 缺点: 索引本身也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间 虽然索引大大提高了查询的速度,同时反向影响增删改操作的效率,因为表中数据变化之后,会导致索引内容不准,所以也需要更新索引表信息,增加了数据库的工作量 随着业务的不断变化,之前建立的索引可能不能满足查询需求,需要消耗我们的时间去更新索引 三、索引的分类 单值索引: 一个索引只包含单列,一个表可以有多个单列索引 唯一索引:索引列的值必须唯一,但是允许有空值 复合索引: 一个索引可以同时包含多列 四、索引结构 1、BTree索引

利用 np.argsort()对某一列(行)进行排序

落花浮王杯 提交于 2020-02-27 18:41:33
我们知道 np.sort()对数组进行排序,如下图,那我们如何将某一行,某一列进行排列呢? 请看我下面的测试: 关键一步是 Z[:,1],这是选择哪一列进行排序,也可以是哪一行进行排列,如下图.然后利用 np.array.argsort()进行排序,返回排序数字的索引位置,最后重新对 Z 进行行索引. 对比下面的对某一行进行排序,在我们利用Z[1].argsort()进行索引时,由于我们要对某一行进行排序,所以我们索引时,要对 Z 列进行索引. 在这里插入图片描述](https://img-blog.csdnimg.cn/20200227144844966.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDQzOTY3NjIw,size_16,color_FFFFFF,t_70)此方法对数据清洗,计算,整理,分析都有帮助. 来源: CSDN 作者: 阿拉祖 链接: https://blog.csdn.net/qq443967620/article/details/104536314

[MySQL]ANALYZE TABLE 更新索引基数

一个人想着一个人 提交于 2020-02-27 17:25:41
MySQL使用存储的键分布基数来确定表连接顺序 在决定对查询中的特定表使用哪些索引时,也会使用使用键分布基数 ANALYZE TABLE 表名 可以更新表的索引基数,使其更接近非重复的记录数,记录数可以使用show index from 表 来查询cardinality字段 mysql> show index from index_test; +------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+--------------------+--------------+-------------+-----------+-------------

ARTS第九周

你说的曾经没有我的故事 提交于 2020-02-27 17:14:02
ARTS第九周 ARTS是什么? Algorithm :每周至少做一个leetcode的算法题; Review :阅读并点评至少一篇英文技术文章; Tip/Techni :学习至少一个技术技巧; Share :分享一篇有观点和思考的技术文章。 Algorithm 题目: 21. Merge Two Sorted Lists 解题思路 此题要求我们合并两个排好序的链表,合并之后的链表要求也是有序的,因此我们在每次做合并操作的时候需要比较两个链表头节点的大小,较小的那个节点加到新链表的尾端。 同时,取较小节点的下一个节点与刚才比较过的较大的节点比较,再把较小的那个节点加到新链表的尾端,重复这两个操作,直到遍历完其中一个链表。 代码 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null){ return l2; } if (l2 == null){ return l1; } if (l1.val < l2.val){ l1.next = mergeTwoLists(l1.next, l2); return l1; }else{ l2.next = mergeTwoLists(l2.next, l1); return l2; } } Review 详见: 一.Java技术现象 Tip/Techni

幂等性笔记

一世执手 提交于 2020-02-27 15:12:34
高并发下接口幂等性解决方案 一、幂等性概念 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。 二、幂等性场景 1、查询操作:查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作; 2、删除操作:删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) ; 3、唯一索引:防止新增脏数据。比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录。要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可); 4、token机制:防止页面重复提交。 原理上通过session token来实现的(

mysql 分页 limit 优化

二次信任 提交于 2020-02-27 14:31:11
1.语法: *** limit [offset,] rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据。 offset是偏移量,表示需要的数据是跳过多少行数据之后的,可以忽略;rows表示要拿多少行数据。 2,场景: 前台要展示数据库中数据,需要后台实现分页,传入数据要有“页码page”跟“每页数据条数nums”。 select * from t_table order by id limit (page-1)*nums,nums 3.问题: 当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢 select * from t_table order by id limit 10000000,10 上边SQL语句表示从表t_table 中拿数据,跳过10000000行之后,拿10行 4.优化思路: 1.能不能跳过10000000条数据然后读取10条,而不是读取10000010条数据然后返回10条数据。 2.order by字段需要建立索引 改进后的SQL语句如下: select * from t_table where id >= ( select id from t_table order by id limit 10000000,1 ) limit 10 注:假设id是主键索引

高级变量

心不动则不痛 提交于 2020-02-27 12:31:08
回顾 Python中数据类型可以分为数字型和非数字型 数字型   整型   浮点型   布尔型   复数型(complex) 非数字型   字符串   列表   元组   字典 在Python中,所有非数字型变量都支持以下特点   1.都是一个序列sequence,也可以理解为容器   2.取值[]   3.遍历 for in   4.计算长度、最大/最小、比较、删除   5.链接 + 和重复 *   6.切片 列表 列表(list)是Python中使用最频繁的数据类型,在其他语言中通常叫做数组 专门用于存储一串信息 列表用[]定义,数据之间使用,分隔 列表的索引从0开始   索引就是数据在列表中的位置编号,索引又可以被称为下标  注意:从列表中取值时,如果超出索引范围,程序会报错 列表取值 列表名[索引值]  #索引超出范围会报错 列表取索引 列表名.index(“想确定的值”)  #传递的数据不在列表中,程序会报错 修改列表的值 列表名[要修改值的索引] = “要修改的值”  #索引超出范围,程序报错 列表增加数据 列表名.append("添加的数据")  #向列表末尾追加数据 列表名.insert(索引值,“添加的数据”)  # 向指定的索引位置添加数据 列表名.extend(列表名)  #将其他列表中的完整内容追加到当前列表末尾 列表的删除 列表名.remove(