OushuDB学习心得
一、概念
oushudb 是新一代云原生数据库,什么是云原生?云原生数据库 <> 云上数据库,云原生数据库是一种通过云平台构建、部署和交付的数据库服务,可提供可扩展的、可靠的数据库解决方案;云数据库是一个作为服务的云平台,这种模式允许组织、最终用户及其各自的应用程序在云上存储、管理和检索数据。
二、架构特性
1、oushudb 计算层可以划分为多个虚拟计算集群,在每个虚拟计算集群下节点可以分属于不同的虚拟集群实例,每个虚拟计算集群实例下有多个计算节点,在每个计算节点上会运行一个 oushudb segment。segment 实现了 oushudb 的计算,如果说一个查询启动了 1000 个虚拟 segment,意思是这个查询被均匀的分成了 1000 份任务,这些任务会并行执行,虚拟 segment 数其实表明了查询的并行度。查询的并行度是由弹性执行引擎根据查询大小以及当前资源使用情况动态确定的。
2、事务管理,oushudb 支持事务的所有 ACID 属性,支持快照隔离。事务发生有 master 节点协调和控制,采用的是泳道模型,并发插入时每个并发会使用各自的泳道,互不冲突。
3、资源管理,oushudb 支持三级资源管理,
全集群资源管理:可以进行集群级别的资源虚拟化,监测全集群资源的健康状况。
用户资源管理:可以支持用户级别的资源管理,支持多租户用户。
操作符级别资源管理:可以针对操作符分配和强制资源使用。
4、执行器是数据库最核心的部件之一,oushudb 对执行器进行了完全重新设计使用率向量计算外加 SIMD 优化技术,很大程度上提升了数据库性能。
三、分区方式
oushudb 的分区方式有:range 分区,list 分区。分区适用于当表中访问率较高的行位于一个单独分区或少数几个分区时,大幅减少搜索空间,从而提升访问性能;当需要大量加载或者删除的记录位于一个单独分区或者少数几个分区时,可以直接读取或删除对应分区,从而提升处理性能,同时由于避免大量零散的删除操作,可减少清理碎片工作量。range 分区适用于一段范围内的连续数据经常被一起访问的表,list 分区适用于不连续集合内的数据经常被一起访问的表。分区数不宜设置过多。
四、基本用法
1、oushudb 启动或停止 magma 服务有两种方式,方式一,启动 oushudb 集群时,使用--with_magma 选项,同时启动 magma 服务,如 oushudb init/start/stop cluster --with_magma,需要注意的是 3.x 版本不支持。方式二,magma 服务单独启停,magma start/restart/stop cluster。
2、用\timing 命令可以打印出查询执行的时间。
3、oushudb 和 PostgreSQL 兼容,oushudb 的使用方式和 PostgreSQL 的使用方式基本相同,注意:schema 不可以嵌套,也就是说,schema 中不可以再包含 schema。添加分区时,如果分区表有一个默认分区的话,不可以向该分区表添加分区,只可以通过分裂默认分区的方法来添加分区。
4、如果 oushudb 默认存储方式是 hdfs,则创建表默认存储格式是 orc,创建 magma 格式的表要指定表空间,如 create table test(a1 int,a2 text,a3 numeric(20),primary key(a1)) tablespace magma_default;且 magma 格式的表支持主键约束。