索引

Elasticsearch

蓝咒 提交于 2020-02-08 23:26:51
本文简单介绍了ES、Kibana和Go语言操作ES。 Elasticsearch 介绍 Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch能做什么 当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用ElasticSearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。 当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这引起数据存储到ElasticsSearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。 对于程序员来说,比较有名的案例是GitHub,GitHub的搜索是基于ElasticSearch构建的,在github.com/search页面,你可以搜索项目、用户、issue、pull request,还有代码。共有40~50个索引库

Elasticsearch常用命令

和自甴很熟 提交于 2020-02-08 22:17:48
Elasticsearch查询语法 关于倒排索引的一点思考: ES在保存文档时,会将原始文档通过_source字段保存,同时构建倒排索引,保存词项跟文档ID的关系。那么接下来有一个问题: 一个Type有一个倒排索引,还是一个Field对应一个倒排索引 ? 假设一个Type一个倒排索引,那么文档中所有分词的字段,都会进入这个唯一的倒排索引表里。举个例子,Type包含title字段和content字段,文档A的title和content都包含java这个词项,文档B只有content中包含java这个词项,那么在这个唯一的倒排索引表中,java词项对应A、B两个文档,你如果查询title中包含java词项时,ES就不知道要给你返回文档A还是B了!!! 所以,倒排索引是在Field维度,那么在组合查询时,即有多个查询条件,ES是如何处理的呢?比如查询title中包含java词项,content中包含作者Bruce Eckel的文档。那么,假设title的倒排索引表里,包含java的文档有A、B、C,在content的倒排索引里包含Bruce Eckel的文档有A、D、E,那么计算这2个倒排索引表结果的交集,即A就是满足条件的文档。 故在组合查询时,最终的结果为每个查询子项结果集的交集 cat API 查询当前ES集群相关的消息,包括集群中index数量、运行状态、当前几圈所在的ip

MySQL(InnoDB剖析):25---B+树索引的管理(索引管理、Fast Index Creation、Online Schema Change、Online DDL)

心已入冬 提交于 2020-02-08 22:17:08
一、索引管理 索引的创建和删除可以通过两种方法: 一种是ALTER TABLE 另一种是CREATE/ DROP INDEX 使用语法 例如下面有一个表,创建表时 指定了一个主键索引 create table t( a int not null, b varchar(8000), primary key(a) )engine=innodb; 现在添加一个字段c,并 对字段c进行索引 alter table t add c int not null; alter table t add key idx_c(c); 也可以只索引一个列的开头部分数据,例如 只对b字段的前100个字段进行索引 alter table t add key idx_b(b(100)); 当然也可以 进行联合索引 alter table t add key idx_a_c(a,c); SHOW INDEX命令 该命令可以用来查看索引的信息,可以看到 表t上有4个索引,分别为: 主键索引 c列上的辅助索引 、 b列的前100字节构成的辅助索引 、以及 (a、c)的联合辅助索引 show index每列的含义如下: Table: 索引所在的表名 Non_unique: 非唯一的索引,可以看到parimary key是0,因为必须是唯一的 Key_name: 索引的名字,用户可以通过这个名字来执行DROP INDEX

es学习(二):基本操作

扶醉桌前 提交于 2020-02-08 21:58:25
集群健康 请求 GET http://192.168.247.8:9200/_cluster/health 结果 { "cluster_name": "kevin-elasticsearch", "status": "green", "timed_out": false, "number_of_nodes": 1, "number_of_data_nodes": 1, "active_primary_shards": 5, "active_shards": 5, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100.0 } 创建索引 请求 PUT http://192.168.247.8:9200/index_str { "settings": { "index": { "number_of_shards": "2", "number_of

MySQL(二)之B-Tree和B+Tree

别来无恙 提交于 2020-02-08 15:38:04
B-Tree 叶节点具有相同的深度,叶节点的指针为空 所有索引元素不重复 节点中的数据索引从左到右递增排列 由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败。 例如一个度为d的B-Tree,设其索引N个key,则其树高h的上限为logd((N+1)/2),检索一个key,其查找节点个数的渐进复杂度为O(logdN)。从这点可以看出,B-Tree是一个非常有效率的索引数据结构。 另外,由于插入删除新的数据记录会破坏B-Tree的性质,因此在插入删除时,需要对树进行一个分裂、合并、转移等操作以保持B-Tree性质. B+Tree(B-Tree变种)(mysql索引存储结构) 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引 叶子节点包含所有索引字段 叶子节点用指针连接,提高区间访问性能 为什么根节点不存储数据,叶子节点存储数据? 希望树的横向(根节点)能存储更多的索引,将具体的数据存储到叶子节点上 InnoDB一棵B+树可以存放多少行数据 ? 一般主键为bigint为8 Byte,指针为6 Byte,InnoDB存储引擎最小储存单元为页(Page),一个页的大小是16KB,16KB (16

MySql中什么时候创建索引?

这一生的挚爱 提交于 2020-02-08 14:33:58
一、什么是索引 索引(Index)是帮助Mysql高效获取数据的数据结构。所以说索引的本质是:数据结构。 简单理解就是:排好序的快速查找数据的数据结构。 一般来说,索引本身也很大,不可能全部保存在内存中,所以通常以索引文件的形式保存在磁盘上。 二、索引的优势和劣势 1、优势 高效的检索数据 通过索引列队数据排序 2、劣势 更新表(增、删、改)的同时也需要更新索引,降低了更新表的速度。 由于索引通常保存在磁盘上,所以占用了额外的空间。 三、什么情况下适合创建索引 主键自动建立唯一索引。 频繁作为条件查询的字段。 查询中与其他表关联的字段,比如外键。 单键/组合索引对比,组合索引性价比更高。 查询中需要排序的字段。 查询中需要统计或分组的字段。 四、什么情况下不适合创建索引 表记录太少,比如只有几行,几百行记录。 经常增、删、改的表或字段。 where条件里用不到的字段。 过滤性不好的字段。(过滤性不好表示不能唯一定位一条记录或者每次定位记录行数太多,比如性别。而身份证号过滤性就很好。) 来源: CSDN 作者: qq_24552437 链接: https://blog.csdn.net/qq_24552437/article/details/104221548

数据库必知知识

不想你离开。 提交于 2020-02-08 10:40:08
1、触发器的作用: 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。 3、存储过程的优缺点: 优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。 缺点:移植性差 4、存储过程与函数的区别 存储过程 1、用于在数据库中完成特定的操作或者任务(如插入、删除等) 2、程序头部声明用procedure 3、程序头部声明时不需描述返回类型可以使用in/out/in out 三种模式的参数 4、可作为一个独立的PL/SQL语句来执行 5、可以通过out/in out 返回零个或多个值 6、SQL语句(DML

SQL学习笔记

浪子不回头ぞ 提交于 2020-02-08 10:33:17
目录 SQL(Structured Query Language)学习笔记 Terminal登录数据库 SQL特性 SQL约束 SQL索引 触发器 SQL优化执行计划 索引唯一扫描(index unique scan) 索引范围扫描(index range scan) 索引全扫描(index full scan) 索引快速扫描(index fast full scan) 检索数据 排序检索数据 过滤数据(字符需要用'' 数值不需要'') 通配符过滤数据 拼接字段(||) SQL函数 分组 select执行顺序 子查询 联结 等值联结/内联结 自联结 自然联结 外联结 组合查询 UNION SQL(Structured Query Language)学习笔记 Terminal登录数据库 1.登录 mysql -u root -p ; 2.显示所有数据库 show databases ; 3.使用数据库 use “database name” ; 4.显示数据库中所有表 show tables; 5.删除表 drop table ”Customers“; SQL特性 SQL约束 1.主键 CREATE TABLE OrderItems ( order_num int NOT NULL PRIMARY KEY, order_item int NOT NULL , prod_id char

【Android 应用开发】多点触控 ( 多点触控事件 | PointerId | PointerIndex | 坐标获取 | 触摸点个数 )

醉酒当歌 提交于 2020-02-08 10:05:46
文章目录 I . 多点触控事件 II . PointerId 与 PointerIndex 简介 III . 本次 PointerId 与 PointerIndex 获取 IV . PointerId 与 PointerIndex 互相转化 V . 触摸点个数获取 ( getPointerCount ) VI . 触摸点坐标获取 VII . 多点触控 示例代码 ( 参考 ) I . 多点触控事件 1 . 多点触控事件 : ① ACTION_DOWN : 第一个手指按下 ② ACTION_MOVE : 所有的手指移动 ③ ACTION_UP : 最后一个手指抬起 ④ ACTION_POINTER_DOWN : 中间的手指按下 ( 已经有手指按下 ) ⑤ ACTION_POINTER_UP : 中间手指抬起 ( 还有手指在触摸中 ) 2 . 获取多点触控事件 : 调用 MotionEvent 对象的 getActionMasked() 可以获取多点触控事件 , 即上面的 5 种触摸事件 ; 3 . 获取并处理多点触控事件代码示例 : ① 获取多点触控事件 : //获取当前的多点触控触摸事件 int actionMasked = event . getActionMasked ( ) ; ② 处理多点触控事件 : //处理 5种多点触控事件 switch ( actionMasked )

索引优化、索引的优点、使用条件

别来无恙 提交于 2020-02-08 08:16:35
1、独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引。 例如下面的查询不能使用 actor_id 列的索引: SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5; 2、多列索引 在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好。例如下面的语句中,最好把 actor_id 和 film_id 设置为多列索引。 SELECT film_id, actor_ id FROM sakila.film_actor WHERE actor_id = 1 AND film_id = 1; 3、索引列的顺序 让选择性最强的索引列放在前面。 索引的选择性是指:不重复的索引值和记录总数的比值。最大值为 1,此时每个记录都有唯一的索引与其对应。选择性越高,每个记录的区分度越高,查询效率也越高。 例如下面显示的结果中 customer_id 的选择性比 staff_id 更高,因此最好把 customer_id 列放在多列索引的前面。 SELECT COUNT(DISTINCT staff_id)/COUNT(*) AS staff_id_selectivity, COUNT(DISTINCT customer_id)/COUNT(*) AS customer_id