在一个 "常规" 的行式数据库管理系统中数据按下面的顺序存储:
换言之,所有相关的值在一个行里面一个挨一个存储行式存储的的数据库管理系统有:MySQL, Postgres, MS SQL Server 等。
在一個列式存储数据库管理系统中数据存储的方式如下所示:
列式存储的数据库管理系统更适合于 OLAP 场景(对于大多数查询,至少有 100 倍的处理速度提升)的原因有:
执行一个查询需要处理大量的行,它有助于调度所有操作对整个向量而不是单独的行或实现查询引擎,这样几乎没有调度成本,洳果不这么做对于任意还过得去的磁盘子系统,查询解释器不可避免地分摊 CPU因此,把数据以列的方式来存储和处理是很有意义的
有兩种方法可以做到这一点:
不是所有的列式存储数据管理系统都会进行数据压縮如:InfiniDB CE 和 MonetDB。然而数据压缩真的提高了性能
不支持 NULL,不支持相关子查询支持 JOIN,支持茬 FROM、IN、 JOIN 子句中的子查询和标量子查询
不止以列的形式存储数据,部分列还经过向量处理这样能取得高 CPU 性能。
CckHouse支持主鍵表为了迅速查询某个范围内的主键,数据使用合并树增量地进行排序因此,数据可以不断被添加到表中添加数据时没有加锁。
这使得 CckHouse 可以用作 Web 系统的后端低延时意味着查询可以被及时处理。
使用多主节点复制。数據被写入任何可用的复制节点后分发给其他的复制节点。系统在不同的复制节点中维护相同的数据在出现失败之后,数据会自动回复或者在复杂的情况下使用一个 "按钮"。
也可以手动下载安装包:
还可以指定将用于处理查询的任何设置如:cckhouse-cent --max_threads=1,表示查詢处理线程的最大数量为 1