#两者概述
DM8具有开放的、可扩展的体系结构、易于使用的事务处理系统,以及低廉的维护成本。DM8是达梦公司在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,推出的新一代自研数据库。DM8吸收借鉴当前先进新技术思想与主流数据库产+品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。
PostgreSQL以加州大学伯克利分校计算机系开发的 POSTGRES 为基础, 是一个功能强大的开源对象关系数据库管理系统。PostgreSQL 由 PostgreSQL 全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制。它是开源的,其源代码是免费提供的。PostgreSQL是跨平台的,可以在许多操作系统上运行。
PostgreSQL支持大部分 SQL 标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、 索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免 费使用、修改和分发 PostgreSQL。
下面我将以表格的形式进行两者的对比,这样看起来更加直观明了。
#整体对比
DM8和PG14整体比较
项目 | 具体内容 | PG14 | DM8 | 备注 |
起源地 | 起源高校 | 加州大学伯克利分校计算机系 | 华中科技大学数据库与多媒体研究所 | |
操作系统 | Windows | √ | √ | |
linux | √ | √ | ||
其他,如UNIX、SOLARIS、AIX等 | √ | √ | ||
国内操作系统,如麒麟、统信UOS等 | √ | √ | ||
国产芯片飞腾、龙芯、鲲鹏等 | √ | √ | ||
功能比较 | 数据类型 | √ | √ | |
用户管理 | √ | √ | ||
模式管理 | √ | √ | ||
基表管理 | √ | √ | ||
数据操作 | √ | √ | ||
视图管理 | √ | √ | ||
索引管理 | √ | √ | ||
全文索引管理 | √ | √ | ||
存储过程 | √ | √ | ||
存储函数管理 | √ | √ | ||
触发器管理 | √ | √ | ||
包管理 | √ | √ | ||
序列管理 | √ | √ | ||
同义词 | √ | √ | ||
类管理 | √ | √ | ||
域管理 | √ | √ | ||
表空间管理 | √ | √ | ||
SQL函数 | √ | √ | ||
系统动态视图 | √ | √ | ||
外部链接-dblink | √ | √ | ||
物化视图 | √ | √ | ||
外部存储过程 | √ | √ | ||
系统包 | √ | √ | ||
数据分区 | √ | √ | ||
大数据装载方案 | √ | √ | ||
编程接口 | SQL92入门级/过渡级 | √ | √ | |
ODBC | √ | √ | ||
JDBC | √ | √ | ||
.NET PROVIDER | √ | √ | ||
PHP | √ | √ | ||
DBEXpress | √ | √ | ||
Python | √ | √ | ||
NodeJS | √ | √ | ||
PDO | √ | √ | ||
Hibernate | √ | √ | ||
OCI | √ | √ | ||
OCCI | √ | √ | ||
OO4O | √ | √ | ||
libsqlora8 | √ | √ | ||
QOCI | √ | √ |
#基础功能对比
编号 | 项目 | DM8 | PostgreSQL14 |
1 | 数据库/实例 | DM8中一个实例对应一个库,允许一台机器上同时运行多个实例。但是在 DM 共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库。 | 一个实例下有多个数据库,每个数据库之间是完全独立的,允许一台机器上同时运行多个实例。 |
2 | 数据类型 | 支持数值类型、日期/时间类型和字符串(字符)类型、布尔类型、多媒体类型、自增列、bit类型、自定义类型、XML数据类型、空间数据类型、JSON类型、序列、带时区时间类型、数组类型、记录类型、集合类型、类类型、%TYPE、%ROWTYPE,还可以用户自定义子类型。 | 支持数值类型、日期/时间类型和字符串(字符)类型、多媒体类型、自增列、bit类型、自定义类型、XML数据类型、UUID类型、空间数据类型、货币类型、几何类型、JSON 类型、布尔类型、枚举类型、网络地址类型、位串类型、文本搜索类型、复合类型、数组类型、范围类型、域类型、二进制数据类型、对象标识符类型、pg_lsn类型、伪类型 |
3 | 数据类型别名 | 支持 | 支持 |
4 | 表 | 支持普通表、分区表(RANGE分区、LIST分区、HASH分区、子分区、垂直分区、组合分区等)、列存表、临时表、对象表、堆表、外部表;支持表截断。 | 支持普通表、系统表、分区表、临时表、列存表、外部表、堆表;支持表截断。 |
5 | 视图 | 支持 | 支持 |
6 | 索引 | 支持普通索引、唯一索引、聚集索引、分区索引、全文索引、位图索引、位图连接索引、函数索引;支持在线重建索引、不可见索引 | 五种索引方式:唯一、主键、多属性、部分索引、表达式索引、组合索引、Indexes and ORDER BY、组合多个索引 ; 六种索引类型:B-tree,Hash,Gist,GIN、SP-GIST、BRIN |
7 | 存储过程/函数 | 支持 | 支持 |
8 | 触发器 | 支持 | 支持 |
9 | 包 | 支持 | 支持 |
10 | 序列 | 支持 | 支持 |
11 | 同义词 | 支持 | 支持 |
12 | 类 | 支持 | 不支持 |
13 | SQL域 | 支持 | 支持 |
14 | 用户管理 | 支持 | 支持 |
15 | 事务管理 | 支持 | 支持 |
16 | 开发接口 | OLEDB、ADO、ODBC、OCI、OCCI、JDBC、 Hibernate、PHP、PDO、DBExpress、Hibernate、libsqlora8、 NodeJS、OO4O、QOCI、Python、以及.Net DataProvider等。 | OLEDB、ADO、ODBC、JDBC、 Hibernate、.Net DataProvider、DBD::Pg、libpqxx、node-postgres、Npgsql、Pgtcl、pgtclng、pq、psycopg、ECPG、libpq 等。 |
#安全性能对比
编号 | 项目 | DM8 | PostgreSQL14 |
1 | 标记与强制访问控制 | DM 作为安全数据库,提供了包括用户标识与鉴别、自主与强制访问控制、通信与存储加密、审计等丰富的安全功能,且各安全功能都可进行配置,满足各类型用户在安全管理方面不同层次的需求。 强制访问控制可以控制系统中信息流动的轨迹,能有效地抵抗特洛伊木马的攻击,这在一些对安全要求很高的数据库应用中是非常必要的。 DM 利用策略和标记来实现 DM 数据库的强制访问控制。执行强制访问控制的用户必须具有 LABEL_DATABASE 数据库权限,在新初始化的数据库中,只有 SYSSSO 具有这个权限。 | 提供权限管理;支持自主访问控制和基于标签的强制访问控制,实现对表中记录的权限控制。 PostgreSQL先通过用户标识和认证来验证访问数据库的用户身份,判断是否为合法用户及是否具有权限访问数据库资源。然后通过基于角色的访问控制(Role Based Access Control, RBAC),并使用存取控制列表(ACL)方法控制访问请求和包含信息。 |
2 | 数据加密 | 为了防止用户直接通过数据文件获取用户信息,DM提供了全面的数据加密的功能,包括:
存储加密在保证数据文件安全性的同时,也会带来一定的性能影响,不同的加密算法对性能的影响各有不同,用户需要根据自己的需求来决定是否进行加密以及加密算法的选择。 | 支持通讯加密,支持对存储数据的透明存储加密和非透明存储加密. PostgreSQL数据库自身提供了加密机制, 在数据库内核实现了存储的加密。这种加密方式能防止磁盘丢失和文件被复制导致的敏感数据泄漏。但是,对于控制了数据库系统的攻击者来说却是开放的, 并没有防护能力。而且其密钥管理通常不会对数据库用户开放,安全性得不到保证,也得不到国内相关评测机构的认可。 |
3 | 加密引擎 | DM系统中内置了常用的DES,AES,RC4等类型的加密算法供用户使用,以此来保护数据的安全性。然而在有些特殊的环境下,这些加密算法可能不能满足用户的需求,用户可能希望使用自己特殊的加密算法,或强度更高的加密算法。DM的加密引擎功能则可以满足这样的需求。 用户只需要按照DM提供的加密引擎C语言编程接口,封装自己的加密算法,并编译成第三方加密动态库,即可以在DM的存储加密中使用自己的加密算法。 | 不支持 |
4 | 密钥自管理 | DM实现了多级密钥管理机制,统一管理不同的用户的密钥,根据用户身份自动使用其密钥进行加解密,还提供简单方便的密钥更换操作接口 | 密钥管理由四部分构成: 密钥生成、密钥保存、密钥交换、密钥轮转 |
#数据可靠性对比
编号 | 项目 | DM8 | PostgreSQL14 |
1 | 备份和恢复 | 支持逻辑备份、物理备份、联机备份、脱机备份、完全备份和增量备份,支持分级别备份、备份加密与压缩;在归档模式下,可将数据恢复到用户指定的任意时间。 | 不支持分级别的备份还原,不支持跨平台备份还原。 备份方式:
还原方式:
|
2 | 双机系统支持 | 支持依赖操作系统HA 的双机热备,以及不依赖于第三方高可用软件的基于 REDO 日志的主备双机系统,支持故障检测与自动恢复,支持自动和手动的故障切换处理,备机可读,可分担主机负载 | 支持依赖和不依赖操作系统的双机热备功能。 对A、B实现双机热备,A作为数据库master主机,对外提供读写服务,B作为slave主机能实时同步A的数据。当A发生故障时,B从slave状态切换到master状态,以保证pg数据库能正常对外提供服务。 |
3 | 数据复制 | 支持同构数据库之间的同步和异步数据复制功能,可以单向,双向以及级联实现数据复制; DM 异构实时同步工具 DMHS,支持异构数据库(Oracle、Mysql、 postgreSQL 等)与 DM 之间的实时同步复制 | 支持同构数据库之间的同步/异步数据复制,不支持异构数据库之间的数据复制。 |
#高性能对比
编号 | 项目 | DM8 | PostgreSQL14 |
1 | 视图查询合并 | 该功能可以将视图查询与视图定义进行总体分析并得出最优的查询计划。 | 不支持 |
2 | 数据分区 | DM支持数据的垂直分区(很少,大部分是水平分区)和水平分区。通过将一个大表按水平或垂直划分成多个子表,并可在子表上建立索引。在大数量情况下,查询往往只涉及到其中一个或几个子表,可减少数据扫描代价,使效率得到大幅提升 | 支持水平分区,垂直分区。 包括范围分区和列表分区。 |
3 | 数据压缩 | 用户可以对整个表进行压缩,也可以选择对部分字段进行压缩。对于I/O密集型的系统来说,通过采取适当的数据压缩的策略,可以减少系统的I/O量,提升查询性能。 另一方面还能为用户节省磁盘空间。 | PG是少有的不支持数据压缩的主流数据库。 但是可以通过第三方产品进行手动压缩,有zfs、ScaleFlus CSD2000、Postgre pro(非pg主分支功能,依赖商业定制版PG)。 注:pg可以对超过2kb的大字段使用toast方式压缩存储,适用场景有限。 |
4 | 函数索引 | 该功能以与列相关的某个表达式为准,计算该表达式的值并储存在索引中,当相关查询来临时可以利用该索引来免除繁琐的运算及全表扫描。 | 支持。基于某个表达式建立索引,索引字段经过了某个函数的处理,达到了在某种特殊的场景下走索引的目的。 |
5 | 位图索引 | 在大数据量情况下,位图索引可极大提升基于低基数列上查询的 性能,且存储空间小,可为OLAP、商业智能、数据仓库和数据挖掘提供有效的支持 | 支持。扫描索引,把满足条件的行或者块在内存中建一个位图,扫描完索引后,再跟 进位图中记录的指针到表的数据文件读取相应的数据。在or、and、in子句和有多个条件都可以同时走不同的索引时,都可能走Bitmap Index Scan 。 |
6 | 大对象存取优化 | DM在原有大对象处理的基础上,对大对象存储组织和生成的日志进行了优化,性能有大幅提升。 | PG中存储二进制数据的类型包括 bytea(等同于 SQL 中的 blob),还有一个PG独有的大对象类型(largeobject)。用大对象类型时,二进制数据统一存储在一张系统表里,提高其他数据读写性能,并能和其他数据分开备份。 |
7 | 基于多版本的并发控制 | DM提供了基于多版本的并发控制处理机制。多版本的最突出的特征是“查询不上锁”(封锁机制),即读操作不被阻塞,可以有效减少冲突,提高并发执行处理效率。 | 在数据库内部,数据的一致性使用多版本模式(多版本并发控制(Multiversion Concurrency Control),即MVCC)维护。这意味着每个SQL语句查询到的数据,是查询开始时间节点的快照(一个数据版本),而与查询期间数据状态无关。此机制确保语句不会查询到由并发事务对同一行数据进行修改而产生的不一致数据,从而为每个数据库会话提供了事务隔离特性。MVCC通过避免传统数据库系统中的锁定方法,最大程度上减小了在多用户并发场景下的锁争用,从而提高了性能。 注:在PG中,mvvc只适用于读已提交、可重复读两个隔离级别。 |
8 | 单表记录支持数据量 | DM单表记录可超过40亿条,可支持50TB级别数据量。 | PG单表记录数无限制。但单表大小限制为32TB,单条记录最大为400GB,一个字段的最大尺寸为1GB,一个表里的最大列数为250--1600(与列类型有关) |
9 | 分布式集群 | 支持基于完全对等不共享架构的并行分布式集群 DMMPP,实现数据分布式存储和并行计算,满足OLAP需求。 支持最多1024个EP(节点),轻松组建超大型集群。 | Citus是Postgres的一个extension扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。 |
更多技术交流,可登录达梦在线服务平台:达梦在线服务平台http://eco.dameng.com