【数据库】积累

常用软件

Dbeaver镜像:
https://mirrors.tuna.tsinghua.edu.cn/github-release/dbeaver/dbeaver/LatestRelease/

https://mirrors.nju.edu.cn/github-release/dbeaver/dbeaver/

DBeaver驱动安装源更换

winodws->preference->maven

数据库设计

理解维度数据仓库——事实表、维度表、聚合表
维表与事实表
简单说维表就是某个维度的可取值,例如商品id信息表,记录了某个商品的名称类别等:事实表就是将多个维表中的取值拼成的一个事实,例如订单表,里面包含着商品名,购买者等等

【面试】redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案

范式

数据库设计三大范式
如何理解关系型数据库的常见设计范式? - 知乎用户的回答 - 知乎
有几个概念要修订:

  • 码:由一些属性组成,能够确定唯一一个元祖(一行数据),例如一个用户表包含【用户id,姓名,身份证号,性别】,这种情况下,用户id是码,身份证号是码,因为他们都可以确定唯一一行数据 ,(身份证号、姓名)也是码也可以确定唯一一个人 ,甚至整个一行数据所有属性也组成了 一个码。
  • 候选码:任何真子集都不是码的码。

针对范式:

  • 第一范式:原子性,每个属性都不可再分。比如说一个字段不能设计成“证件id:1234”,而是应该分成两个字段。
  • 第二范式:主键关联,在第一范式的基础上,不存在非主属性部分函数依赖于候选码的情况。比如一张表有ABCD四个字段,其中A,B组成了唯一候选码也就是主码,但对于C字段来说,只要B字段确定了,C字典就确定了,那么C就 部分依赖于(A,B),解决方法就是拆表,将BC单独记录一张表。。
  • 第三范式:外键关联,在第二范式的基础上,不存在非主属性传递依赖于候选码的情况。比如一张表有ABCD四个字段,其中A,B组成了唯一候选码也就是主码,但对于C字段来说,只要D字段确定了,C字典就确定了,那么C就传递依赖于(A,B),解决方法就是拆表。将CD单独记录一张表

语句分类

SQL语句的四大分类

Hive

通俗易懂的学会:SQL窗口函数

SqlSever

详谈转置 pivot

Pivot

PostgreSQL查询表名称及表结构

redis

数据类型

Skip List–跳表(全网最详细的跳表文章没有之一)

lua脚本

后端程序员必会:并发情况下redis-lua保证原子操作
单线程执行lua

做缓存

广州小公司面试题:如何保证缓存一致性
这就是旁路缓存,为什么更新数据不行而删除就行,我觉得相较于删除,更新数据需要耗费服务器资源更多,而删除缓存成功率和速度都要快得多。为什么后删除的数据一致性可能性更高,关键在于更新db的时候,cpu大概率会交还给读db的线程,这时候即使读db的线程修改了缓存,后续更新数据的线程能够正确的执行删除缓存操作。

先写后删+延迟双删,尽可能保证数据一致性。不可能完全保持啦。 就算是删除,并发的时候,只要不加锁,造成不一致的情况多了去了。
em。。。其实也有解决办法,可以类比mysql的锁策略。 某一条数据如果要更新,就加上写锁,这个写锁锁定的是db+缓存
线程A要更新数据X,为x加上写锁。
线程B要读取数据X,发现X带写锁,那么不写缓存。
线程A更新完之后,删掉缓存,然后释放写锁。

20 图 |6 千字|缓存实战(上篇)
上一篇文章里,关于本地锁的解释不太好,作者实际想说的是,为访问DB的操作加锁,一次只能有一个访问db的线程,这个线程会把访问结果写进缓存,然后释放掉锁,然后如果其他的线程抢到锁了,重新执行get方法,那么这些线程的访问就会去走缓存,而不会去访问db。
所以实际上应该是先判断缓存是否存在,如果不存在,才尝试获取锁,获取锁成功,就执行上述步骤,获取锁失败,应该就等一段时间后,重新执行get方法,而不是block住。如下所示
缓存穿透,缓存击穿,缓存雪崩解决方案分析

做分布式锁

Redis 分布式锁|从青铜到钻石的五种演进方案
钻石方案:原子地加锁+设置过期时间+设置uuid作为value来标识锁,原子地使用uuid+lua脚本解锁
分布式锁中的王者方案 - Redisson

限流器

限流:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全)
计数法:固定每次开始计数的事件点。

固定时间窗口法:每当接收请求,后1s内允许数100个数,其实就相当于定死的每秒开始的时候生成100个令牌。
令牌桶:有一个生产者在生产令牌,而请求消耗令牌,消耗空了就限流。实现上肯定不可能手动造一个生产者线程,实际上让每个请求先扮演生产者计算上次写入到这次写入的时间内会生产多少个令牌,然后再尝试消耗令牌,没有令牌了就限流。并且限制桶的大小避免累计无线的令牌。
令牌桶相较于固定时间窗口法的优势在于就是没有固定开始计数的时间点。相当于令牌桶可以将每一秒拆的无线细,相当于每个时刻都有令牌在生成,而固定事件窗口法相当于是一下子分配很多令牌,这就会导致限流后一段时间无法处理任何请求,而令牌桶还可以处理极少量的请求。

漏桶:其实和令牌桶没区别,只是反过来了,令牌桶的生产令牌是漏桶的漏,令牌桶的消耗令牌是漏桶的灌水。没区别。

令牌桶正统实现:使用Redis实现分布式限流
之所以用lua,是为了原子化。
我司用了 6 年的 Redis 分布式限流器,可以说是非常厉害了!
这个其实是固定时间窗口法,是有问题的。固定事件窗口法相当于是一下子分配很多令牌,而令牌桶的好处就是不依赖expire来模拟限流。

redisson也可,其实更好用。

MongoDB

MongoDB写入安全WriteConcern

etcd

还不了解 etcd?一文带你快速入门(万字长文)

Java中使用etcd,包括基本的set、get、超时设置,watch监听等

jetcd实战之三:进阶操作(事务、监听、租约)
etcd学习和实战:4、Java使用etcd实现服务发现和管理

etcd 中让人头大的 version, revision, createRevision, modRevision

jetcd

浅析jetcd中KeepAlive实现及使用
jetcd实战之二:基本操作
jetcd实战之一:极速体验

ElasticSearch

ElasticSearch (ES从入门到精通一篇就够了)

analysis

elasticsearch分词器 character filter ,tokenizer,token filter
Elasticsearch中什么是 tokenizer、analyzer、filter ?

DSL语法

elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)

ES Field Collapsing 字段折叠使用详解
[Elasticsearch]高亮使用方式及参数详解

索引

Elasticsearch 索引映射类型及mapping属性详解
这个映射,指的就是一个index(简单理解为库表)下的每个doc(每一条数据)的每个字段的类型是什么,这个就是映射的作用,动态映射的意思就是es会去推测并赋予每个字段的类型。
一文搞懂 Elasticsearch 之 Mapping
es的mapping参数-fields
Elasticsearch7.X为什么移除类型(type)
可以不用看,应该就是老es里的一个概念。

应用

Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

clickhouse

DDL

深入理解ClickHouse-本地表和分布式表
分布式表本身并不存储数据,只是提供了一个可以分布式访问数据的框架,查询分布式表的时候clickhouse会自动去查询对应的每个本地表中的数据
ClickHouse表引擎到底怎么选

DQL

ClickHouse分布式IN & JOIN 查询的避坑指南
只要理解了clickhouse分布式表的概念就好说了,两个分布式表可以join,两个本地表(例如子查询生成的表)也可以join,但如果是一个分布式与一个子查询进行join,就需要对子查询进行global

其他

ER图画法及图形含义、举例说明、通俗易懂

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值