近些年来,数据库产业发展迅猛,各种数据库产品层出不穷。那么如何选择一款数据库产品成为很多企业面临的问题?特别是随着数据规模、计算能力等需求,分布式数据库产品成为很多企业的新宠。那么这类数据库较传统数据库又有何差异?在数据库选型中,需要注意哪些方面?本文尝试描述数据库(特别是分布式数据库)选型需考虑维度,希望帮助企业可以做出最适合的选择。
1. 数据库评估维度概览
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
因需对比的维度很多,故将其大致做了个分类,归纳为下面脑图所示。下文将按各分类详细描述。在各对比维度分类之上,又抽象出非交互式测试与交互测试两大类。之所以做了这样的划分,是因为曾参与过多款数据库产品评测,大量的人工测试方式非常低效。这里是尝试将部分对比维度分类提取出来,可尝试使用自动化方式解决上述问题。则后者的交互式测试,则还需要人工介入;但可通过此方法固化对比维度,减少交互成本。
2. 评估维度:基本功能篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
- 表达式
- 操作符
- 字符集:支持常规的UTF8MB4及定长字符集GBK等。
- 函数:支持基本函数、扩展函数(如正则函数、安全函数、窗口分析函数等)、自定义函数。
- 计算:虽然不提倡在数据库端进行计算,但如果支持计算的话,将有利于将传统数据库应用迁移到新型数据库中。在分布式架构下,这部分实现较难。
3. 评估维度:数据对象篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
- 序列:对分布式数据库,需提供全局唯一、单调递增的序列对象。
- 视图:对分布式数据库,需提供满足全局性、一致性的视图访问。扩展要求,可提供参数视图、动态视图、物化视图等能力。
- 约束:支持常规的主键(PK)、外键(FK)、唯一(UK)、非空(NULL)、条件(CHECK),特别是分布式条件下的约束能力。此外,支持非分布键下的约束。
- 表:支持常规的表(例如堆表、簇表)。表的存储方式是行存、列存亦或是混存。支持全局表(广播表)、ER表、追加表、只读表等特殊表类型。
- 索引:支持多种类型索引(如B树、哈希等),支持函数索引等。对于分布式环境支持全局索引、二级索引。对于分区条件下,是否支持本地、全局分区索引。
- 同义词
- 数据类型:对多模场景,丰富的数据类型十分必要。此外,在金融场景中,对高精度数据类型也有特殊的要求。
- 分片:支持的分片算法,支持自定义分片策略。在单分片键基础上,支持多字段分片或自定义分片等。
- 分区:支持的分区类型(如HASH、LIST、RANGE等),支持复合分区。常规分区操作支持增加、删除、移动、截断、分裂、合并等。
4. 评估维度:SQL篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
- DML
- DDL
- DQL:对于分布式数据库而言,灵活复杂的查询能力实现难度较高。很多产品在这部分都有所取舍,没有实现全集。
5. 评估维度:内核功能篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
- 锁:支持乐观、悲观锁机制。提供完善的死锁检测机制。
- 事务:支持标准的ACID能力。
- 隔离级:提供常规的RC、RR等隔离级别,支持MVCC,提供全局一致性数据读取能力,支持强一致性的数据读取并可读到最新数据。
- 并行:支持并行计算,已利用多核能力加速执行。
6. 评估维度:性能篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
- 通用模型:支持通过常规的事务型、分析型测试标准,提供基础的性能测试指标。
- 业务模型:通过抽象业务模型,提供近似业务访问的性能指标。
- 其他场景:提供诸如导入导出等场景的性能数据。
7. 评估维度:安全篇
人生基本上就是两件事,选题和解题。最好的人生是在每个关键点上,既选对题,又解好题。人生最大的痛苦在于解对了题,但选错了题,而且还不知道自己选错了题。正如人生最大的遗憾就是,不是你不行,而是你本可以。
❖ 数据管理
- 数据加密:数据存储加密,是保证数据安全的根本方法。即使发生了数据泄漏,也不用担心数据为他人所用。针对加密的要点在于加密算法及效率,除常规加密算法外,是否支持国密算法及自定义算法?此外,最为重要的是对应用透明。
- 数据传输:在数据传输方面,支持数据的加密传输方式。
- 数据访问:在数据访问方面,支持行级、列级数据访问控制。
- 生命周期管理:建立全生命周期的数据安全策略,在后续的数据归档、备份、导出直至销毁阶段均需考虑必要的数据安全。
- 敏感数据:具备建立敏感数据识别、分级,根据不同级别采取不同策略,支持数据脱敏访问。
❖ 用户管理
- 用户:具备唯一标识的用户名,采用满足复杂度要求的口令策略并加密存储。同时,具备多种鉴权方式。
- 角色(组):通过角色或角色组方式,简化权限管理。支持所谓“三权分立”,即系统管理员、审计管理员、安全管理员三权分立
- 权限:具备多种对象不同粒度的权限控制能力。
❖ 访问控制
- 对象:针对不同对象,可设置访问、执行、变更等不同的控制权限。
- 集群:在多个应用共享集群时,应支持多个应用间自有数据库对象的访问控制。
- 会话:支持基于IP、端口、数据库、用户和密码的连接认证功能,会话应进行安全隔离,不同会话应具备独立的上下文。
- 节点:分布式数据库的不同节点(如计算节点、存储节点),支持白名单信任策略,复合要求的地址才能连接访问。
❖ 安全管理
- 密钥管理
- 安全告警
- 安全审计:支持安全审计的长久保存。
8. 评估维度:兼容篇
人生基本
- 客户端:支持标准的客户端访问方式。提供不同语言的访问驱动。
- 应用:支持常规数据应用的访问。
- 语法:兼容部分事实标准,例如Oracle、MySQL等。这对于业务的迁移意义很大。
- 硬件:支持多种硬件平台,特别是国产化硬件平台。
9. 评估维度:运维篇
人生基本
- 备份恢复:支持物理备份、逻辑备份。支持全量、增量备份。提供时点还原能力。提供对象级闪回能力。
- 数据迁移:在分布式环境下,提供全局一致性的数据迁移能力。
- 系统配置
- 租户管理
- 审计管理
- 容量管理
- 版本升级
- 监控
10. 评估维度:架构篇
人生基本
- 读写分离
11. 评估维度:实例管理篇
人生基本
- 执行计划:支持分布式环境的执行计划显示。
- 统计信息
- 空间管理
- 模式管理
- 时区
- 可扩展:支持不同层次的扩展能力,从前端接入层、计算层到存储层。
12. 评估维度:高可用篇
人生基本
- 高可用:高可用包括多种维度,例如服务层高可用、数据层高可用、接入层高可用。服务高可用包括全部组件支持高可用;出现组件异常时自动恢复;在常规变更操作时(例如扩缩容)支持高可用。数据高可用,则从数据的RTO角度来考虑。接入层,则是指诸如Proxy代理组件的高可用。
- 高可靠:数据的整体可靠性,例如常见的通过多副本技术保证,且副本间是否满足强一致等。还包括通过全量 增量 日志的备份策略,满足数据还原需求。
- 容灾:提供单机、机架、可用区、同地域、跨地域不同层级的容灾能力。