索引

CDH版本Hbase二级索引方案Solr key value index

▼魔方 西西 提交于 2020-01-28 12:30:11
概述 在Hbase中,表的RowKey 按照字典排序, Region按照RowKey设置split point进行shard,通过这种方式实现的全局、分布式索引. 成为了其成功的最大的砝码。 然而单一的通过RowKey检索数据的方式,不再满足更多的需求,查询成为Hbase的瓶颈,人们更加希望像Sql一样快速检索数据,可是,Hbase之前定位的是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色。于是,针对HBase Secondary Indexing的方案出现了。 Solr Solr是一个独立的企业级搜索应用服务器,是Apache Lucene项目的开源企业搜索平台, 其主要功能包括全文检索、命中标示、分面搜索、动态聚类、 数据库 集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr 4还增加了NoSQL支持,以及基于Zookeeper的分布式扩展功能SolrCloud。SolrCloud的说明可以参看: SolrCloud分布式部署 。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展

MySQL索引数据结构分析

霸气de小男生 提交于 2020-01-28 11:53:21
什么是数据库调优?说得高大上,实际上就是减少磁盘IO次数。 众所周知,为数据表增加索引会使查询速度大大提升,MySQL索引其实是一种数据结构,有“哈希”和“B+树”可供用户选择。为什么只能用这两种呢?为什么不能用二叉树、平衡二叉树、红黑树等等呢? 首先,来说一下MySQL增加数据的方式:一般都是主键自增的。根据二叉 树的特性:“左子树小于根节点,右子树大于根节点”,如果索引采用这种数据 结构,会生成一个向右倾斜的树,而且不会生成平衡二叉树。存放的数据越多, 树就越深,不能达到快速查询的目的。 如果采用红黑树,也一样只是生成一个比二叉树稍微改善一点的向右倾斜 的树而已。 上述两种数据结构并没有使磁盘IO次数减少。 我们知道“哈希”是一种散列算法,给定一个数据经过哈希运算后,能得到 一个固定长度的数列(哈希值)。MySQL索引存放哈希值,而哈希值所对应的是数 据的指针,因此哈希索引时间复杂度为O(1),查询速度极为迅速。 哈希索引有两个特点: 1.数据并不是按照索引值顺序存储,所以也就无法用于排序。 2.不支持任何范围查询 因为这两个缺陷,哈希索引只适用于某些特定的场合。 那B+树是怎么来解决上述的各种问题呢? 不了解B+树是什么的同学可以点击链接 数据结构可视化 ,手动生成B+树并观察。 B+树允许每个结点拥有多个内部结点,“Max. Degree”代表每个结点的最大内部结点数量,B

详解numpy的argmax

感情迁移 提交于 2020-01-28 05:49:39
从最简单的例子出发 假定现在有一个数组a = [3, 1, 2, 4, 6, 1]现在要算数组a中最大数的索引是多少.这个问题对于刚学编程的同学就能解决.最直接的思路,先假定第0个数最大,然后拿这个和后面的数比,找到大的就更新索引.代码如下 a = [3, 1, 2, 4, 6, 1] maxindex = 0 i = 0 for tmp in a: if tmp > a[maxindex]: maxindex = i i += 1 print(maxindex) 这个问题虽然简单.但是可以帮助我们理解argmax. 解释 还是从一维数组出发.看下面的例子. import numpy as np a = np.array([3, 1, 2, 4, 6, 1]) print(np.argmax(a)) argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值.看二维的情况. import numpy as np a = np.array([[1, 5, 5, 2], [9, 6, 2, 8], [3, 7, 9, 1]]) print(np.argmax(a, axis=0)) 为了描述方便,a就表示这个二维数组.np.argmax(a, axis=0)的含义是a[0][j],a[1][j],a[2][j](j=0,1,2,3)中最大值的索引

序列——列表和元组

南笙酒味 提交于 2020-01-28 05:02:01
Python包含6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。 1、列表和元组的主要区别在与,列表可以修改,元组则不能。 列表如下例所示:   >>> edward=['Edward Gumby',42]   >>> database=[['Edward Gumby',42],['Allen',22]] 2、通用序列操作   所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(slicing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度,找出最大元素和最小元素的内建函数。 ①索引 序列中的所有元素都是有编号的,从0开始递增。这些元素可以通过编号分别访问,如下例所示:   >>> greeting='Hello'   >>>greeting=[0]   'H'   >>>greeting=[-1]   'o' ②分片   与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。 示例:   >>> tag='<a href="http://www.python.org">Python web site</a>'   >>>tag[9:30]  #从第10个字符截取到第30个字符   'http://www

Hive学习笔记--基本操作2

≯℡__Kan透↙ 提交于 2020-01-28 04:51:52
Hive的Join连接: HiveQL 也支持inner join、left join ,right join,full outer join(全外连接),left semi join(左半连接);、 left semi join是一种更高效子查询的实现。 例如:select * from product_t left semi join order_t on product_t.pid=order_t.pid; 查询的是product_t中的数据在order_t_pid中出现过的(查询的结果是prduct_t的元素) SerDe: 是Hive 提供用于进行序列化和但序列化的机制 针对不同规则的数据利用表达式进行处理 在处理的时候,每一个字段对应一个捕获组。 语句: create table log(ip string,time string,timezone way string,resource string,protocal string…) 、 row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe’ with serdeproperties ( “input.regex”="(. ) -- \[(. ) (. )\] "(. ) (. ) (. )" (.*) -") stored as textfile;

Mysql优化

帅比萌擦擦* 提交于 2020-01-28 04:42:12
一、Mysql的逻辑架构 二、存储引擎 Mysql5.5之前,默认存储引擎是MyISAM,5.5之后默认存储引擎变成 InnoDB 。 MyISAM和InnoDB的区别: 1)MyISAM不支持事务、InnoDB支持事务 2)MyISAM只有表锁、InnoDB引入了行锁 3)MyISAM支持全文索引、InnoDB 5.5不支持,5.6以后支持 4)MyISAM的读写速度会优于InnoDB 三、MySQL优化(SQL优化) · 数据类型的优化(创建表的时候,选择合适的数据类型) · 索引优化(SQL优化成本最低并且最有效果的优化方式) · 查询优化(SQL自带的检测工具、SQL结构) · 库表结构优化(分库分表、读写分离) · 硬件优化(cpu、固态硬盘、内存) · 参数优化(系统运行参数)- DBA 四、数据类型的优化 数据类型的选择原则: · 选择最小的数据类型,同时需要保证能够放下所存储的数据 · 选择最合适的数据类型,比如使用int表示年龄,而是不是varchar表示年龄 · 尽量让需要添加索引的列为not null 五、索引优化 什么是索引? 索引是一本书的目录,可以快速找到相应的内容。 索引是一个帮助我们快速查询内容的 数据结构 。   无索引的查询方式: 有索引的查询方式: 索引失效: 当写了一个索引后,开发者认为执行的sql会用上该索引

Elasticsearch-集群原理

一个人想着一个人 提交于 2020-01-28 04:02:24
Elasticsearch版本:6.0 一、ES的集群 由一个或多个相同cluster.name的节点组成,共同承担数据和负载的压力。 被选举的主节点将负责管理 集群范围 内的所有变更,如增加/删除索引、增加/删除节点等,但是不涉及 文档级别 变更和搜索等操作。 请求可以发送到集群中的任何节点上,每个节点都知道任意文档所处的位置,并且能把请求直接转发到存储我们所需文档的节点,它都能负责从包含我们所需文档的节点收集回数据,并将最终结果返回给客户端。 二、ES的分片 ES添加数据用到的索引实际上指向了一个或者多个物理分片的逻辑命名空间。 一个分片是一个底层的工作单元,保存了一部分数据,一个分片是一个Lucene实例。 索引内任何一个文档都归属于一个 主分片 ,所以主分片的数目决定着索引能保存的最大数据量。 一个副本分片是一个主分片的拷贝,作为保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。 索引建立的时候就确定了主分片数,但是副本分片可以随时修改, 分片创建方法:(索引名为test,分配了3个主分片和一个副本分片,每个主分片有一个副本分片) PUT /test { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } } 三、单机环境 此时的ES健康状态status字段是yellow

数据库基础名词

拜拜、爱过 提交于 2020-01-28 02:03:48
写在正文前:内容涉及到一些数据库的基础名词和及其简单介绍 存储引擎 数据库通过存储引擎进行CURD,存储引擎主要有:MyLsam,InnoDB,Memary,Archive,Federated 索引 索引是对数据库种一列或者多列的值进行排序的一种结构。 常见的索引原则: 1.为经常需要排序、分组、联合操作的字段建立索引。 2.为经常需要查询的字段建立索引。 3.限制索引的数目(索引太多,写操作速度降低) 4.尽量使用数据量少的索引 5.索引字段值较长的时候,最好使用值的前缀来索引。 6.最左前缀匹配原则 7.尽量选择区分度高的列作为索引 8.索引列不要参与计算 数据库三范式 第一范式的目的是确保每列的原子性 第二范式每个表只描述一件事情 第三范式是满足第二范式,并且表中的列不存在对非主键列的传递依赖。 数据库ACID 原子性:事务各部分是一个完整的操作,要么全部执行、要么全部不执行。 一致性:当事务处理完成之后,数据必须是一致的。 隔离性:对数据修改的所有并发事务是彼此隔离的,事务必须是独立的,不影响或者依赖其他事务。 永久性:事务完成之后,数据被永久保存。事务日志能够保证事务的一致性。 存储过程 一组为了完成特定功能的sql语句集,存储在数据库中,编译之后再次调用不需要编译,只要指定名称和传入参数(如果有参数)就可调用。 触发器 触发器是一段能自动执行的程序,是特殊的存储过程。

高性能的索引策略4-冗余和重复索引

让人想犯罪 __ 提交于 2020-01-28 01:48:06
如果创建了索引(A,B),再创建索引(A)就是荣誉索引,因为索引(A)是索引(A,B)的前缀索引,因此索引(A,B)可以当做索引(A)来使用【仅仅针对B Tree索引来讲】 针对InnoDB,ID为主键,索引(A)可当做 (A,ID)来使用,不用再创建索引(A,ID) 表中的索引越多,则insert 、update、delete的操作会变得越慢,一般来讲,会选择扩展现有的索引,而不是 增加新的索引。 来源: https://www.cnblogs.com/wooluwalker/p/12237337.html

Oracle索引碎片检查及定期重建常用表的索引

♀尐吖头ヾ 提交于 2020-01-28 01:19:19
背景说明: 今天查阅书籍时,偶然间发现“在对某个索引行执行删除操作时,只是为该行增加了一个删除标记,这个索引行并不会释放它的存储空间,Insert产生的新的索引行也不能被插入到该位置。索引列的修改过程其实是将对应的列值删除,然后再插入新的列值(与数据行本身的修改是不一致的,这也正是我们尽量不使用修改频繁的列来创建索引的原因)。所以,无论是插入、修改、删除,都需要消耗存储空间,增大B-Tree索引结构的深度,影响数据的查询速度。尤其是删除和修改,不仅造成了存储空间的浪费,而且增加了扫描索引块的数量”,这就是所谓的索引碎片问题,建议定期对经常使用的表执行检查和重建索引操作。 问题重现: 经测试,收集统计信息等操作,无法释放索引删除块所占用的存储空间。 analyze table tkk29 compute statistics; select t.index_name, t.distinct_keys, t.num_rows, t.sample_size, t.last_analyzed , t.blevel, t.leaf_blocks, t.* from user_indexes t where t.table_name = upper('tkk29'); delete from tkk29 where mod(trunc((sysdate-createddate) * 24 *