数据库ABC

引子

工作中一直做算法,对于数据库的知识仅仅是select等简单sql。

这段时间倒腾clickhouse,发现知识储备不足,利用端午假期,搜罗了一些简单的知识,集成到这里。

事务

定义:

事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

我的理解:

也就是说事务就是一堆sql的集合,定义了一个最小的action,例如一次转账。类似于面向对象语言里的一个函数体。但是要保证事务的完整性,不能存在执行到一半的情况。

知乎上一个不错的讲解:https://www.zhihu.com/question/31346392

存储过程

定义:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,特点是经过第一次编译后再次调用时不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。可以由数据库自己去调用,也可以由java程序去调用。类似于一个函数集合,但是这个函数是存储于远程服务器端的,是经过编译之后的。下次再执行就可以不用再传输过去了。

我的理解:

事务可以算是一个最小业务单元,存储过程实现的业务要复杂一些,类似于一个模块。

详细讲解见:https://zhuanlan.zhihu.com/p/137896709

数据库分类

 

  1. OLTP:是传统的关系型数据库,主要操作增删改查,强调事务一致性,比如银行系统、电商系统。
  2. OLAP:是仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策支持,提供直观简单的结果。

行式与列式的区别

Clickhouse特殊之处

主键

  • clickhouse不要求主键惟一。
  • 如果不指定主键,可以使用ORDER BY tuple()

clickhouse为什么这么快

  • 只需要读取要计算的列数据,而非行式的整行数据读取,降低 IO cost。
  • 同列同类型,有十倍压缩提升,进一步降低 IO。
  • Clickhouse 根据不同存储场景,做个性化搜索算法。

稀疏索引&稠密索引

  1. 稀疏索引使得你可以处理极大量的行,因为大多数情况下,这些索引常驻与内存(RAM)中。稠密索引就是每个主键值都建立索引,但是这样检索虽然会快,但是存储也会大。而稀疏索引就是平衡了一下,每隔index_granularity建立一个索引。

主键(primary xxx)和排序键(order by xxx)

  1. 主键和排序键。主键和排序键可以不同,但是主键得是排序键的前缀。CK设计排序键的时候,要充分与应用场景结合,要考虑到经常做的groupby()操作。groupby有两类指标:维度指标和度量指标。可以把维度指标加入到排序键里,以提高聚合效率。

引擎的功能

与引擎有关的功能如下:

存储机制、索引技巧、锁定水平、是否支持事务(是否支持commitrollback)、存储位置(是否保存在内存中)、插入或者查询的速度(如果用来存储历史数据,比较关心插入速度;如果数据已经不怎么更新但是需要经常查询,更关心查询速度)、是否支持分布式数据库、安全性支持。数据的存储方式和位置,写到哪里以及从哪里读取数据。支持哪些查询以及如何支持。并发数据访问。索引的使用(如果存在)是否可以执行多线程请求。TTLtime to live。设置生存周期,过期后数据会自动删除。这样可以有效控制数据库的容量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值