暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

信通院HTAP数据库评测那些事——功能篇

原创 多明戈教你玩狼人杀 2024-03-04
897

两年前在做国产数据库的时候,公司其中一项工作重心就是去做信通院的HTAP数据库评测。时至今日,越来越多的国产数据库都通过了这项测试。我想分两三篇的内容,来从几个角度剖析一下。按照功能维度来划分,一共有如下六个方面。

类别一:基本功能

不要被标题所迷惑,这个基本功能范畴非常之广,几乎涵盖了70%的测试用例。一方面确实是一个合格的HTAP数据库需要的功能非常多且覆盖面很全,另一方面也从侧面反映了开发一个HTAP数据库的难度。我们逐个case来分析一下。

  1. 数据类型:是否含盖了数值、字符、日期时间、二进制、大对象等常用类型。值得一提的是,大对象类型并没有一个严格的定义,TEXT或者BLOB其实都可以。而字符和数值是要求需要做计算或者拼接的,这些都被纳入了基础的功能中。

  2. 操作符:需要支持数值运算、逻辑运算、比较运算、字符拼接等等。实际上和上一条有一部分重叠。实际上1与2结合起来,才是一个完整的数据类型功能。

  3. 常用函数:支持数值函数、字符函数、日期函数、类型转化、正则表达式、聚合函数、分析函数等常见函数这里面前面几个都比较明确,唯独这个分析函数到底是什么,在测试过程中,我和同事有过分歧,最终我们以窗口函数作为目标,信通院也认可了。

  4. 条件表达式:空条件、BETWEEN条件、存在条件、IN条件。这项其实更多的是操作符的延申,实际上开发了操作符之后,这些都可以实现。

  5. 隐式转换:支持数据类型的隐式转换。涉及到了数值类型之间的互相转换,比如int转float/decimal,char/varchar转数值类型,需要注意的是类型边界。

  6. DDL:实际上就是CREATE/DROP/ALTER三个常用的,但是支持的对象类型包括库表视图索引序列。这里面比较麻烦的可能是alter table,下一篇我会展开讲讲。

  7. DML:这个没什么好说的,增删改查,基础的SQL,这里值得一提的是,并没有涉及到多表的UPDATE和DELETE。

  8. 数据分布:支持某种数据分区,如Hash分区、Range分区、List分区、二级分区。实际上就是partition功能,而且更重要的是,需要从执行计划里看到,partition正式生效了。这一点在开发过程中让我们当时遇到了不少困难。此外,还有一个子任务,数据分片,证明数据分布到了不同的分片中。

  9. 字符集:支持utf8或者gbk,尤其是对中文的支持。最起码支持一种字符集,可以插入不同的语言而且正常显示。

  10. 执行计划解析:能供直观地看到执行计划,比如explain select a,b,c from t where d=xxxx能看到过滤,也是基础的功能。

  11. 查询:这一项要求可不低,不仅仅是一条select,还需要支持union/join/子查询,而且还要求排序,不同的排序类型结果要正确。

  12. 资源管理:通过数据库自带功能对数据库的CPU、内存进行资源分配、资源隔离。这一项一开始我觉得是个比较高级的功能,比如租户或者用户级别。仔细阅读之后发型,并没有具体要求怎么个隔离法,用户级别、租户级别、实例级别都算。限制住实例上限其实也算。

  13. 索引:能够支持常见的索引类型,如唯一索引、分区索引、全文检索、位图、函数、不可见、支持基于约束自动管理的索引等。功能要求比较多,但是实际上并不是全部都支持,主键唯一键不可见三个是测试中明确要求的。其他几个能支持多少算多少。

  14. 视图:能创建视图并且支持多表关联查询的视图。没有要求物化视图,只需要一个静态视图即可。

  15. 存储过程(可选):支持将特定功能的语句集命名并存储在数据库中,用户可通过命名的存储过程名来调用以实现某种业务功能。难度着实不低,好在可选项。

  16. 自定义函数(可选):支持将特定功能的语句集命名并存储在数据库中,用户可通过调用命名的自定义函数来返回计算结果。仍然是个可选项。

  17. 事务:具备不同隔离级别下的事务能力,既要支持ACID的事务,又要支持最少两个不同隔离级别,下一篇文章我会展开讲讲。

  18. 并行处理(可选):支持高性能的数据处理能力和并行查询能力。并行计算的能力,可选项,但是实际上我觉得已经是对HTAP数据库的基础要求。

  19. 并发处理:支持数据库的高并发访问和数据处理能力,100个会话。评测里面要求使用loadrunner,实际上大家测试的时候用的工具可能更多。

  20. 行列存储支持:同时支持行、列两种数据存储模式。这一项我觉得是一个不太合理的项目,实际上还是有大量的数据库只支持一种。

  21. 导入导出:支持对数据的导入导出,也是很明确的一个测试点,需要注意的是,不仅仅涵盖数据,还要有DDL。

  22. 数据压缩:也是比较明确的测试点,比如导入100GB的CSV数据,在存储中能否少于100GB。

  23. 表类型:支持多种数据库表类型,如普通堆表、索引组织表、簇表、属性簇表、临时表、外部表等。

  24. 多版本:应支持使用多版本并发技术(MVCC)实现并发控制,实现读写不互斥。了解PG的MVCC或者oracle的Undo机制的朋友都秒懂。

  25. 副本定向访问(可选):对于多副本的存储引擎,能够支持定向访问,可选项。

  26. 多计算引擎(可选):同样也是一个可选项,比如OLTP和OLAP各自一套计算引擎的话,可以参加。

  27. 操作日志文件:实际上是两个要求,一个是操作日志,一个是错误日志,要求能够根据这个两个内容进行错误排查,实际要求并不低。

类别二:可靠性

可靠性要求里更多的是整个实例级别的一些功能,和DBA视角里的可靠性还是有一些区别,功能点要求并不是很多。

  1. 负载均衡:部署多个节点,通过TPCH和TPCC测试来压测,观察不同节点的资源使用情况,加减节点之后还需要再观测。实际隐含了一个功能要求,动态加减节点。
  2. 备份恢复:没有要求物理备份或者逻辑备份,也没有明确的增备要求。要求备份恢复后的数据和原数据必须一致。
  3. 高可用:部署集群之后,制造单个节点故障之后,整个集群仍然能够正常工作。实际上是基础的要求,对于灾备之类的没有明确要求。

类别三:运维管理能力

运维管理能力在评测中主要是安装部署和可观测性两个方面,也是比较基础的,主要包含三个项目:

  1. 安装部署:支持通过工具或脚本的安装部署能力,也是对于一个产品基础的能力。当然,脚本和工具做到什么程度并没有明确要求。
  2. 动态运行信息:实际上就是可观测性。查看系统的负载、正在执行的热点SQL、锁争用等等。也是DBA平时最关注的内容之一。
  3. 升级:既包含了对数据库版本的升级,也包含了升级失败的回滚。里面有一个子项目可选,滚动升级。

类别四:扩展性

扩展性在这里的要求我觉得相对不那么严格,就扩容和缩容,而且实际要求并不算高,而且都没有性能要求:

  1. 扩容:增加节点之后,能否继续正常工作,实际上和负载均衡有重叠部分。还有一个可选测试点,是否实现自动扩容
  2. 缩容:删除节点后,能否继续正常工作。如果是存算分离,还要涉及到计算和存储节点的缩容。

类别五:安全性

安全性包含了三个维度,身份鉴别、权限和审计,都是不可或缺的:

  1. 身份鉴别:包含了密码验证以及ssl安全验证两种验证方法。值得注意的是,这里没有包含密码修改功能。
  2. 权限:权限的授权与回收,新用户与新角色的创建与删除。这部分下一篇我会展开讲讲。
  3. 审计:实际上是日志审计功能,能够看到操作日志,也算是一个初步的审计。
  4. 加密(可选):支持对数据传输、数据存储进行加密解密的能力。算是比较高级一点的特性,加密传输和加密存储两个要求。

类别六:易用性

所谓易用性,其实要求并不高,一个是客户端一个是SQL调优工具:

  1. 客户端:除了命令提示行,还需要支持至少一种客户端工具,比如dbeaver,能够接收SQL。实际测试过程中,比较推荐dbeaver。
  2. SQL调优辅助工具(可选):支持提供流程跟踪解析、执行计划、统计信息、hint、awr、wdr等调优工具和报告的能力。这个要求实际上是可观测性的展示,如果没有可观测性打底,工具无从谈起。

回过头看,基础功能是重中之重,占了接近7成的测试点,其他几项相比之下就都只包含了最基础的内容。有关在开发过程中,这些东西遇到了哪些困难,踩了那些坑,篇幅所限,我将会在下一篇中为大家复盘讲解。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论