索引

深入Kafka - 日志存储

感情迁移 提交于 2020-02-26 02:03:59
Kafka中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区。 不考虑多副本的情况,每个分区对应一个日志(Log),每个日志包含多个日志分段(LogSegment),对应到物理存储,可以理解为Log对应日志一个目录,每个LogSegment对应一个日志文件和两个索引文件,以及可能的其他可能文件(比如事务索引文件)。 举例说明,假设有名为topic-log的主题,此主题有4个分区,那么在实际物理存储上表现如下图。 1. __consumer_offsets- * 如图中绿色标记部分,用来保存客户端消费消息之后提交的消费位移,以便在机器重启或者宕机恢复之后正确得知客户端消费消息的位置。(不是本章重点,不再赘述) 2. Log目录 图中蓝色标记部分,可以理解为每个分区对应一个目录。本例中topic-log主题包含四个分区,所以有"topic-log-0",“topic-log-1”,“topic-log-2”,"topic-log-3"这4 个文件夹。 3. 检查点文件 与Log目录平级的,存在4个检查点文件,用于日志的compaction。 cleaner-offset-checkpoint文件是 清理检查点文件 ,记录每个主题的每个分区中已经清理的偏移量,如下图(下文介绍日志压缩时会详细阐述) 4. 日志分段

使用Python脚本进行es数据清理

青春壹個敷衍的年華 提交于 2020-02-26 01:38:09
需求背景 业务系统将各类的报表和统计数据存放于ES中,由于历史原因,系统每天均以全量方式进行统计,随着时间的推移,ES的数据存储空间压力巨大。同时由于没有规划好es的索引使用,个别索引甚至出现超过最大文档数限制的问题,现实情况给运维人员带来的挑战是需要以最小的代价来解决这个问题。下面以内网开发、测试环境举例使用python脚本解决这个问题。 Each Elasticsearch shard is a Lucene index. There is a maximum number of documents you can have in a single Lucene index. As of LUCENE-5843, the limit is 2,147,483,519 (= Integer.MAX_VALUE - 128) documents. You can monitor shard sizes using the _cat/shards API. 实现思路 es本身支持“_delete_by_query”的形式对查询出来的数据进行删除。首先我们通过”_cat/indices“入口获取当前es服务上所有的索引信息。 第一列表示索引当前的健康状态 第三列表示索引的名称 第四列表示索引在服务器上的存储目录名 第五、六列表示索引的副本数和分片信息 第七列表示当前索引的文档数

为什么我使用了索引,查询还是慢?

[亡魂溺海] 提交于 2020-02-26 01:36:27
作者:张飞洪 地址: cnblogs.com/jackyfei/p/12122767.html 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM,可以参考我的另外一篇<ORM的权衡和抉择>。 合理利用的是ORM在面向对象和写操作方面的优势,避免联合查询上可能产生的坑(当然如果你的Linq查询能力很强另当别论),因为ORM屏蔽了太多的DB底层的知识内容,对程序员不是件好事,对性能有极致追求,但是ORM理解不透彻的团队更加要谨慎。 案例剖析 言归正传,为了实验,我创建了如下表: CREATE TABLE `T`( `id` int(11) NOT NULL, `a` int(11) DEFAUT NULL, PRIMARY KEY(`id`), KEY `a`(`a`) ) ENGINE=InnoDB; 该表有三个字段,其中用id是主键索引,a是普通索引。 首先SQL判断一个语句是不是慢查询语句,用的是语句的 执行时间 。 他把语句执行时间跟 long_query_time 这个系统参数作比较,如果语句执行时间比它还大,就会把这个语句记录到慢查询日志里面,这个参数的默认值是10秒。 当然在生产上,我们不会设置这么大,一般会设置1秒,对于一些比较敏感的业务

MySQL索引那些事

亡梦爱人 提交于 2020-02-25 21:35:56
原文链接 大家有没有遇到过慢查询的情况,执行一条SQL需要几秒,甚至十几、几十秒的时间,这时候DBA就会建议你去把查询的 SQL 优化一下,怎么优化?你能想到的就是加索引吧? 为什么加索引就查的快了?这就要从索引的本质以及他的底层原理说起。 索引是什么 那索引到底是什么呢?你是不是还停留在大学学『数据库原理』时老师讲的“索引就像字典的目录”这样的概念?老师讲的没错,但没有深入去讲。 其实索引就是一种用于快速查找数据的数据结构,是帮助MySQL高效获取数据的排好序的数据结构。 索引的好处 举例说明索引的好处以及是怎么加快查询的。 假设我们有一个表t,它有俩字段,Col1和Col2,如下: 不加索引 不加索引的情况下,SQL: select * from t where t.col2=89 ,需要从表的第一行一行行遍历比对col2的值是否等于89,这样需要比对6次才能查到。这只是只有几行记录的表,那如果是百万级千万级的表呢?是不是就比较的次数就更多了,那还不得慢死。 加索引 如果col2这列加了索引,mysql内部会维护一个数据结构。假设mysql用的数据结构是红黑树(右子树的元素大于根节点,左子树的元素小于根节点)的数据结构建立索引,那就像上图右边那样。这样的话,刚才的那条SQL是不是只需要2次磁盘IO就查到了,是不是快很多了。 这就是索引的好处。索引使用比较巧妙的数据结构

58到家数据库30条军规解读

故事扮演 提交于 2020-02-25 20:51:31
军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用 InnoDB 存储引擎 解读:支持事务、行级锁、并发性能更好、CPU 及内存缓存页优化使得资源利用率更高 (2)必须使用 UTF8 字符集 解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释 解读:N 年后谁 tm 知道这个 r1,r2,r3 字段是干嘛的 (4)禁止使用存储过程、视图、触发器、Event 解读:高并发大数据的互联网业务,架构设计思路是“解放数据库 CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU 计算还是上移吧 (5)禁止存储大文件或者大照片 解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存 URI 多好 二、命名规范 (6)只允许使用内网域名,而不是 ip 连接数据库 (7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范 业务名称:xxx 线上环境:dj.xxx.db 开发环境:dj.xxx.rdb 测试环境:dj.xxx.tdb 从库在名称后加-s 标识,备库在名称后加-ss 标识 线上从库:dj.xxx-s.db 线上备库:dj.xxx-sss

Numpy&pandas(三)--pandas索引

亡梦爱人 提交于 2020-02-25 20:14:12
import pandas as pd import numpy as np #以下所有代码都以此为基础 pandas索引 #重新索引Series s = pd.Series([1, 3, 5, 6, 8], index=list('acefh')) s.reindex(list('abcdefgh')) #本来没有的index值为NaN s.reindex(list('abcdefgh'), fill_value=0) #将NaN替换成0 s.reindex(list('abcdefgh'), method='ffill') #ffill是front fill向前填充,将前面的值带给NaN #重新索引DataFrame df = pd.DataFrame(np.random.randn(4, 6), index=list('ADFH'), columns=['one', 'two', 'three', 'four', 'five', 'six']) df2 = df.reindex(index=list('ABCDEFGH')) #之前没有的index也是一样的NaN,而且df2是df的副本,改变其中值不会改变df中的值 df.reindex(columns=['one', 'three', 'five', 'seven']) #只要写出来的这几列值

b树与b+树原理解析

喜你入骨 提交于 2020-02-25 19:55:50
B树原理 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。 B+树原理 B+树其实和B树是非常相似的, 相同点 根节点至少一个元素 非根节点元素范围:m/2 <= k <= m-1 不同点。 B+树有两种类型的节点:内部结点(也称索引结点)和叶子结点。内部节点就是非叶子节 点,内部节点不存储数据,只存储索引,数据都存储在叶子节点。 内部结点中的key都按照从小到大的顺序排列,对于内部结点中的一个key,左树中的所有 key都小于它,右子树中的key都大于等于它。叶子结点中的记录也按照key的大小排列。 每个叶子结点都存有相邻叶子结点的指针,叶子结点本身依关键字的大小自小而大顺序链接。 父节点存有右孩子的第一个元素的索引。 B树与B+树的区别 其实二者最主要的区别是: (1) B+树改进了B树, 让内结点只作索引使用,

Python入门——基本数据类型的操作

不羁的心 提交于 2020-02-25 19:41:00
一、数字类型(int、float类型) 1、操作: 比较运算: int 与 float 之间是可以比较大小( 同类型之间才能比较大小 ) 数学运算: +-*/ , int 与 float 之间也可以进行数学运算 print(10 > 3.1) print(10 * 3.1) print('x' > 'y') print([1,2,3] > [4,5]) 二、字符串 优先掌握的操作: 1、按索引取值(正向取+反向取) :只能取 name='egon' print(name[0]) print(name[-1]) # name[0]='E' # 错误,字符串只能按照索引取值 # 列表可以修改指定位置的值 # l=['aaa','bbb','ccc'] # l[0]='AAA' # print(l) 2、切片(顾头不顾尾,步长):从一个大的字符串中copy出来了一个子字符串,原字符串不变 msg='hello egon' print(msg[1:4]) print(msg) msg = 'hello egon' # 把原字符串完成拷贝一遍 print(msg[0:10]) print(msg[0:len(msg)]) print(msg[0:]) print(msg[:]) # 隔一个取 msg='hello egon' print(msg[0:10:2]) # 0 2 4 6 8 h

MySQL 教程

杀马特。学长 韩版系。学妹 提交于 2020-02-25 19:32:46
MySQL 教程 Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握Mysql的基本知识,并轻松使用Mysql数据库。 什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS即关系数据库管理系统(Relational Database Management System)的特点: 1.数据以表格的形式出现 2.每行为各种记录名称 3.每列为记录名称所对应的数据域 4.许多的行和列组成一张表单 5.若干的表单组成database RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: 数据库: 数据库是一些关联表的集合。. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。 列:

索引维护:添加,删除,修改与维护

天大地大妈咪最大 提交于 2020-02-25 19:24:21
Field域属性分类 添加文档的时候,我们文档当中包含多个域,那么域的类型是我们自定义的,上个案例使用的TextField域,那么这个域他会自动分词,然后存储 我们要根据数据类型和数据的用途合理的选择合适的域 Field类: StringField(fieldName,fieldValue,Stroe.YES/NO) 存储的数据类型为字符串,包含索引,是否存储根据Stroe定义,不会经过分析器 StroeField(fieldName,fieldValue) 支持多种数据类型,不分析,不建立索引,默认保存到索引库当中 LongPoint(name,value) 会进行分析,会创建索引,但是不会保存到索引库当中 TextField(fieldName,fieldValue,Stroe.YES/NO) 会分析,会创建索引,是否保存取决Stroe 索引添加 @Test public void createDocument() throws IOException { //创建IndexWriter对象 参数一:索引库位置 参数二:指定配置 IndexWriter indexWriter=new IndexWriter(FSDirectory.open(new File("C:\\Users\\FLC\\Desktop\\授课内容\\授课资料\\Y2170\\Luncen\\Index")