1.2.2 使用简单
Doris不仅架构简单,开发和使用也很简单。对于一款OLAP数据库来说,性能不是优劣评估的全部,易用性才是决定是否可持续使用的关键。Doris从设计之初就一直以易用性为出发点。
数据分析全周期一般包含数据建模、数据导入、用户上手分析、持续使用以及维护升级,无不体现Doris的易用性。
在数据建模方面,Doris支持Aggregate、Unique和Duplicate三种模型,可以满足OLAP领域的各种应用场景。同时,相对于MySQL,Doris只增加了一些分布式系统所具有的特性,比如分布键、分桶等。Doris建表语句如图1-5所示。
图1-5 Doris建表语句示意图
在数据导入方面,Doris提供多种数据导入方案(如图1-6所示),同时在数据导入过程中保证原子性。不论使用Broker Load进行批量导入,还是使用INSERT语句进行单条导入,都是一个完整的事务操作。导入事务可以保证一个批次内的数据原子性生效,不会出现部分数据写入的情况。
图1-6 Doris数据导入方案
同时,每一个导入作业都会生成一个Label,这个Label在数据库内用于唯一区分导入作业。Label用于保证对应的导入作业仅能成功导入一次。一个成功导入的Label再次调用时,会被拒绝并报错:Label already used。通过这个机制,数据消费侧可以实现At-Most-Once语义。如果结合上游系统的At-Least-Once语义,我们可以实现端到端数据导入的Exactly-Once语义。数据导入流程如图1-7所示。
图1-7 Doris数据导入流程
在SQL应用方面,Doris支持标准的SQL语言,在方言方面与MySQL兼容。不论简单的单表聚合、排序过滤,还是复杂的多表关联、子查询等,Doris都可以通过SQL语句轻松完成,极大地降低了用户的学习迁移和使用成本。高吞吐的即席查询和库内ETL也是Doris的强项。Doris还支持复杂的SQL语法,包括Grouping Set等高级语法功能,还支持通过UDF或UDAF自定义。在TB级别数据上,Doris可以代替部分Hive等离线系统功能,使得用户在一套数据库中满足所有需求。
在工具方面,Doris在FE节点实现了兼容MySQL协议,方便用户使用标准的MySQL客户端或各种语言的类库进行连接,对各种工具的支持都非常好。在数据库开发方面,Doris支持用户无缝使用DBeaver、DataGrip、Navicat等主流开发工具;在编程应用方面,Doris完全支持MySQL的JDBC和ODBC接口,支持C、Python、Java、Shell等开发语言;在BI应用方面,Doris支持帆软BI、观远BI、永洪BI、Tableau等各种敏捷BI软件;在ETL调度方面,Doris支持Kettle、DolphinScheduler等主流软件。
在集群可靠性方面,Doris使用“内存存储+检查点+镜像日志文件”模式,使用BTBJE(类似于Raft)协议实现元数据的高可用和高可靠。Doris内部自行管理数据的多副本并自动修复,保证数据的高可用、高可靠。在部分服务器宕机情况下,集群依然可以正常运行,数据也不会丢失。Doris部署无外部依赖,只需要部署BE和FE模块即可搭建集群。Doris支持在线更改表(加减列、创建Rollup),不会影响当前服务,不会阻塞读写等操作。
在集群扩缩容方面,Doris基于分布式管理框架,自动管理数据副本的分布、修复和均衡。比如对于副本损坏情况,Doris会自动感知并进行修复。而对于节点扩缩容,Doris会自动进行数据分片均衡,整个过程完全不影响其他服务,无须运维人员进行任何额外的操作。
在集群升级方面,Doris只需要替换二进制程序,滚动重启集群即可。在设计上,Doris完全向前兼容,支持通过灰度发布方式进行新版本的验证和测试。而Doris本身的一些失败重试和故障路由功能也极大地降低了集群升级过程中发生的错误对业务的影响。