摘要:
概述 数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用 数据分层的作用 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是数据分层。数据分层的好处有 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解 阅读全文
摘要:
数据库优化: 数据库设计: 1.字段选型: 数字类型: tinyint smalint mediumint int bigint 字符类型: char varchar 事件类型: date datetime timestamp 首先秉承的原则: 1.小就是美 2.简单就是美 3.先规范,必要时灵活 阅读全文
摘要:
InnerDB实现原理 它是MySQL 从5.5 版本卡死的默认的存储引擎, 是第一份支持ACID特性的MySQL存储引擎, 特点是行锁设计, 支持MVCC(多版本并发控制), 支持外键, 提供一致性非锁定读, 同时尽可能高效的利用计算机硬件资源. MVCC MVCC( Multiversion C 阅读全文
摘要:
InnoDB MVCC InnoDB 的 MVCC, 其实是通过 undo log 来实现的, 可以理解为是通过在每行记录后面保存两个隐藏的列来实现的, 分别保存了这个行的创建时间, 一个保存的是行的删除时间. 这里存储的并不是实际的时间值, 而是系统版本号(可以理解为事物的 Id), 每开始一个新 阅读全文
摘要:
MySQL 主要集中索引类型:FULLTEXT,HASH,BTREE,RTREE 1. FULLTEXT 即为全文索引,目前只有MyISAM支持。不过目前只有 CHAR,VARCHAR,TEXT列上 可以创建全文索引。 2. HASH 由于 HASH 的唯一(几乎100%的唯一)及类似键值对的形式, 阅读全文
摘要:
联合索引 所谓最左原则指的就是如果SQL语句中用到了联合索引中额最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配,需要注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。 假设,我们对(a,b)字段建立一个索引,也就是说 where条件后为 a = 1 an 阅读全文
摘要:
InnoDB索引实现 InnoDB也使用 B+Tree作为索引结构,但具体实现方式却与 MyISAM截然不同。 InnoDB的主索引: MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnooDB中,数据本身就是按 B+Tree 组织的一个索引结构,这颗树的叶节点 dat 阅读全文
摘要:
聚簇索引和非聚簇索引 在InnoDB中,表数据文件本身就是按 B+Tree 组织的一个索引结构,聚簇索引就是按照 每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚簇索引的叶子节点称为数据页。这个特性决定了索引组织表中的数据也是索引的一部分。 一般建表会用一个自增主键做聚 阅读全文
摘要:
什么是MySql的“回表”?如何减少回表的次数 两类索引 主键索引,其实就是聚簇索引;主键索引之外,其他的都称之为非主键索引,非主键索引也被称为二级索引,或者叫做辅助索引。 对于主键索引和非主键索引,使用的数据结构都是B+Tree,唯一的区别在于叶子节点中存储的内容不同: 主键索引的叶子节点是一行完 阅读全文
摘要:
解决思路: 1. 如果仅仅是 Consumer消费速度落后于消息生产的速度的话,可以考虑采用扩容消费者群组的方式。 2. 如果积压比较严重,积压了上百万、上千万的消息。 a. 修复现有 Consumer问题,并将其停掉。 b. 重新创建一个容量更太的 topic,例如 patition是原来的 10 阅读全文
摘要:
设置过期时间 expire key time(以秒为单位) -- 比较常用的方式 setex(String key,int seconds,String value) -- 字符串独有的方式 1. 三种过期策略 定时删除: 含义:在设置 key的过期时间 的同时,为该key创建一个定时器 ,让定时器 阅读全文
摘要:
数据安全与性能保障 持久化选项 redis提供了两种不同的持久化方法来将数据存储到硬盘里面. 一种方法叫快照(snapshotting), 它可以将存储在于某一时刻的所有数据都写入硬盘里面. 另一种方法叫只追加文件(append-only file, AOF), 它会在执行写命令时, 将被执行的写命 阅读全文
摘要:
Set 结构存储值与结构读写能力: 包含字符串的无序收集器(unordered collection), 且数据不重复. 添加,获取,移除单个元素; 检查一个元素是否存在于集合中; 计算交集,并集,差集; 从集合里面随机获取元素. 存储不可以重复的数据 ZSet(有序集合) 结构存储值与结构读写能力 阅读全文
摘要:
Hash 结构存储值与结构读写能力: 包含键值对的无序散列表 添加,获取,移除单个键值对; 获取所有键值对. 存储类似HashMap的数据 hash是日常开发过程中使用的 Redis 的一个数据结构,其底层实现方式有量汇总,如下所示。一种是 zipList,这种是 hash 结构的 v 值较小的时候 阅读全文
摘要:
List 结构存储值与结构读写能力: 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素; 根据偏移量对链表进行修剪(trim); 读取单个或多个元素; 根据值查找或者移除元素. 存储可以重复的数据 List 其底层有 LinkedList,ZipList 和 QuickLi 阅读全文
摘要:
1. Redis简介 Redis是一个远程内存数据库,具有复制特性. Redis数据结构共有5种,致力于帮助用户解决问题, 而不会像其他数据库那样要求用户扭曲问题来适应数据库. 除此之外,通过复制,持久化和客户端分片( client -side sharding )等特性,用户可以很方便的将Redi 阅读全文
摘要:
Redis 中 hash 扩容与缩容 当哈希表中元素数量逐渐增加时,此时产生 hash 冲突的概率逐渐增大,且由于 dict也是采用拉链法解决 hash 冲突的,随着 hash冲突概率上升,链表会越来越长,这就会导致查找效率下降。相反,当元素不断减少时,元素占用 dict 的空间就越少,出现对于内存 阅读全文
摘要:
缓存穿透和缓存失效的预防和解决 缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。 解决办法: 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有 阅读全文
摘要:
RabbitMq笔记 使用rabbitMQ的好处 1. 解耦 2. 异步 3. 削峰 RabbitMQ中的broker是 指什么?cluster又是指什么? broker是指一个或多个 erlang node 的逻辑分组, 且 node上 运行着RabbitMQ应用程序。cluster是在broke 阅读全文
摘要:
ThreadLocal是什么? ThreadLocal是一个本地线程 副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成的场景。 ThreadLocal的内部结构 从上面的结构图 阅读全文