KANG's BLOG

Let's have some fun

clickhouse基础概念

Clickhouse特点 Clickhouse(后面简称ck)主要用于在线分析处理查询,得益于优秀的设计,成为OLAP领域的佼佼者。 下面就来看看它具体采用了哪些设计来达到高性能的实时分析能力。 对于数据库来说,高性能的核心问题就是并行处理和减少磁盘IO,所以ck采用了MPP架构,底层数据基于列式存储。 MPP 大规模并行处理架构,是share nothing类型的,特点是每个计算单元内所有的资源完全独立,包括CPU、内存、硬盘、甚至操作系统,节点间数据完全隔离,仅靠网络进行通信。 计算时各个节点单独计算,最后汇总后进行整理。所以上层用户使用时,MPP架构可以被视作整体。 share nothing的流行,也是因为随着时代发展,硬件层级能够带来万兆带宽和RDMA技术的支撑。

数据库的索引类别

一、哈希索引 由于Hash查询时O(1)的特性,非常适合用来缩短查询路径。 数据插入时,不断append到一个文件中,这个文件可以是CSV,也可以是二进制格式。然后在内存中记录这条数据的K-V对,key是数据的查询键,value是数据在文档中的偏移量。 对原始数据更新也不会定位到原来的数据位置,而是将索引指向数据在文件中新追加的位置,所以文件通常采用分段的方式,不断的压缩合并,来释放磁盘空间。 并发控制 一写多读:对于文件的追加,只能有一个写线程;而由于文件不可变的特性,可以采用多线程读取的方式。 删除记录 删除数据时,实际上是一个插入动作,在数据文件中追加特殊的删除记录,也叫墓碑(tombstone),等到执行合并时,如果发现墓碑标记的key,则删除该key在数据文件中所有对应的数据。 崩溃恢复 通常会将整张哈希表的快照定时持久化到磁盘上。

分布式数据库架构类别和主流方案

一、分布式场景下数据库架构方式 1. Share nothing 顾名思义,就是什么都不共享。 Mysql 的分库分表和大部分的Nosql都是这样的方案,底层实际上完全分离,节点之间单独计算,不共享数据。 好处很明显,设计简单,扩展灵活,并行度较高。 缺点也很明显,跨分片查询困难,数据一致性难以保证。 能够实现强一致的只有zookeeper这种轻量级的分布式存储框架,但是它是牺牲了可用性的前提来保证的一致性,这也是Kafka和Dubbo这种主流中间件在逐渐抛弃zookeeper的原因,详见Zab1.0。

数据库类型和查询语言的分类

关系型数据库和文档型数据库差别 1. 数据联结 在表示一对一和一对多的数据联结上,二者差别在于存储方式不同: 关系型数据库通过数据键联结,文档型数据库通常采用嵌套的方式将相关数据存储在一起。 表示多对一和多对多时,也没有明显不同:都是采用唯一标识符来进行引用。该标识符在关系模型中称为外键,在文档模型中称为文档引用。 2. 查询场景不同带来的性能差异 存储方式的不同,也带来查询性能的不同: 如果查询某项业务相关的完整数据,在关系型数据库中,多表关联需要对多棵树进行查询,但对于文档型数据库仅需要查询当前数据即可。