达梦数据库(DM8)相关概念理解

您所在的位置:网站首页 pno是什么意思数据库 达梦数据库(DM8)相关概念理解

达梦数据库(DM8)相关概念理解

2024-07-10 05:18| 来源: 网络整理| 查看: 265

        按照国人的习惯,达梦的汉语拼音是DaMeng,简称DM,DM现阶段主要推出的是DM7和DM8数据库产品,是达梦公司具有完全自主知识产权的高性能数据库管理系统,可以说是国产数据库里的正规军。

        DM8则是在总结DM系列产品研发与应用经验的基础上,坚持开放创新、简洁实用的理念,历经五年匠心打磨,推出的新一代自研数据库。

        DM8吸收借鉴当前先进新技术思想与主流数据库产品的优点,融合了分布式、弹性计算与云计算的优势,对灵活性、易用性、可靠性、高安全性等方面进行了大规模改进,多样化架构充分满足不同场景需求,支持超大规模并发事务处理和事务-分析混合型业务处理,动态分配计算资源,实现更精细化的资源利用、更低成本的投入。一个数据库,满足用户多种需求,让用户能更加专注于业务发展。

        在接触DM8之前,本人也使用过其它很多的数据库管理系统,如MySQL、Oracle、SQL Server、PostgreSQL等等。总体感觉上与本人使用最多的MySQL相似度较高,都是采用单进程多线程的模型。事实上这里就有疑问了,什么要这样的模型呢,什么不使用Oracle或PostgreSQL那样的多进程模型呢?

        关于上面这个问题,我们可以来分析一下,进程和线程模型都有什么样的好处和不足。

        首先来说说进程。进程通常的理解是一个正在运行的程序的实例,但对于一个单核的处理器,不可能一直只运行一个程序,所以,在每一个时间段,它可能运行多个进程,这样就自然就会发生进程的切换。那么进行如何切换呢?操作系统内核维护了一个进程表,也称为进程控制块(PCB),进程表项为一个进程启动的必要信息,包括进程管理(寄存器,PC,PSW,调度信息,打开文件的状态等)、存储管理(代码段、数据段、堆栈段指针等)、文件管理(目录、PID等)信息。当进程从运行态进入其他状态时,PCB保存启动它的所有信息,当该进程再次被调度程序选中时,就要恢复这些信息。保存的步骤是先硬件压入PC等,再把中断向量装入新的PC,然后通过汇编语言保存寄存器并设置新的堆栈,运行中断服务程序(通常为C),再通过调度程序选中一个进程,把它的运行信息载入寄存器以及PC等。

        可以看出,进程的创建、撤销、切换的代价都很大,如果不同进程间进行通信,就必须要有共享内存空间和数据,才能提高运行速度,这也就是像Oracle、PostgreSQL、人大金仓等数据库的内存模型都会设置有共享内存区的原因所在。尽管如此,还是有这么多的知名大型数据库选择了多进行模型,为什么呢?有历史的原因,在早期的操作系统基本上是没有线程的,那就只能是进程;也有稳定的要求,进程有自己独立的地址空间,进程本身的崩溃不会影响其它进程的正常运行,比较稳定可靠,这也是大型商业数据库系统所必须的特性。

        再来说说线程。线程的目的是共享资源,并共同完成一个任务。也就是多个线程可以共享同一个进程的地址空间,因此,线程只需要保存PC、寄存器、堆栈等,无需保存大量的文件、进程管理信息。线程之间也是没有保护并且平等的,因为它们共享了同样的资源,包括打开的文件、子进程等。这样线程的切换就变得很简单、容易且快速,更容易获得比较高的性能和并发。虽然线程更高效,但代价就是需要线程调度,线程必须按调度算法主动让出CPU,不然其他线程无法抢占。线程调度需要消耗CPU,在适量需要调度的线程数量下,系统能达到比较好的平衡,但是大量线程情况,将需要消耗大量的CPU资源进行调度,用于执行线程计算的CPU减少,反而得不尝失。为控制这一情况,MySQL设置了连接池,限制最大用户连接数量不超系统的负荷。本人也参考了DM8的结构,并没有设置连接池,而是换了另外的处理方式,还是存在连接池大小类似的一个阀值,超过这个值进来的连接不直接进入工作,而是选择排队处理,一个可能情况就是排队长时间得不到执行。

        比较有意思的是,也有些数据库同时支持两种模型,比如Oracle,在Linux环境下是多进程模型,在Windows环境下则是多线程模型,有没有感觉Oracle在Windows环境下执行速度会快些。好的,这其实是一种错觉,按Oracle官方的解释,使用多进程还是多线程,对用户来说都是透明,感觉没差就行了,管那么多呢!

        接着正式来看看DM8中的一些核心概念。

        我觉得要学习一个数据库系统,最重的是首先要搞清楚其中的一些关键概念,更重要的就是要把这些概念与其它一些类似的东西区分开来。

1、数据库(Database)

        从概念上来理解,数据库是保存有组织数据的容器,通常是一个文件或一组文件,这些有组织的数据具体表现为表、索引等。但是要知道,我们是不能直接操作具体的数据文件的,所以还需要一个能操作这些的文件的管理系统,即数据库管理系统。所以,数据库应是包括数据库管理系统和数据库文件两部分内容。

        对于用多了MySQL的人来说,经常会使用CREATE DATABASE这样的语句来创建一个数据库,但时也发现使用CREATE SCHEMA是同样的效果,就有些搞不清了,是创建DATABASE还是创建SCHEMA呢?注意到在DM8创建数据时,会有是否创建示例数据库(示例库BOOKSHOP和DMHR)选项,如果勾选创建示例数据库,感觉是要创建两个数据库,但完成后使用Manager工具查看,并没有发现与“数据库”关键字相关的内容,而是多了一堆模式(SCHEMA)。可以看出DM8一个实例之下没有如MySQL中DATABASE这样的隔离机制,甚至可以理解为一个DM8实例即是一个数据库,如果要创建另外一个DM8数据库那就是需要另外建立一个DM8实例,在同一个机器上的多个DM8实例必须不同的端口、实例名和数据库名。

 ​​​​2、实例(Instance)

        在安装DM8程序的时候,会事先规划相关安装目标,比如DM8安装在“/dm8/dmdbms”目录,在创建数据实例的时候会再指定一个数据位置“/dm8/data”。所以首先安装的是DM8数据库管理系统,还不是真正具体保存有组织数据的容器,只有在使用达梦数据库配置助手创建了数据库实例才是真正的数据容器。创建数据实例时需要指定数据库目录,如“/dm8/data”,这个目录则保存数据存储文件的地方。DM8的实例概念和通常理解的数据库是事实上的同一意思。

3、用户(User)

        用户自然是连接和访问数据库的凭证,安装完达成梦数据库,系统默认会有一些系统级的用户。“Sys”是达梦数据库内置管理用户,不能登录数据库,数据库使用的大部分的数据字典和动态性能视图,“Sysdba”为数据库的管理员用户,“Sysauditor”为审计用户,“Syssso”是安全用户,也可以自定义创建其它用户。

        在达梦数据库里每一个用户都有一个默认的表空间,对于 SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。

​​​​​​​4、模式(Schema)

        ISO/IEC 9075-1 SQL标准中将Schema定义为持久命名集合的描述符(a persistent, named collection of descriptors)。个人觉得有点抽象,不太好理解。总结一下schema就是一个个存放了一组相关数据库对象的逻辑容器。其实Schema和数据库实例是非常相似的,不同的数据库对于Schema的支持程度也不太一样,MySQL中直接将schema与database等同,执行"create schema"相当于执行"create database",Oracle、SQL Server中也都有Schema,但含义也都不一样。

        简单来讲,模式就是数据库数据的逻辑结构。在SQL环境下,schema就是数据库对象的集合,所谓的数据库对象也就是常说的表,索引,视图,存储过程等。在schema之上就是数据库的实例。也就是说一个DM8 实例可以有多个schema, 可以给不同的用户创建不同的schema。

        有意思的事是,在不同Schema中可以存在相同结构的表,同一用户只要有权限,可以使用Schema名称访问这些同构的表。

​​​​​​​5、表空间(Tablespace)

        直接字面意思,就是数据库对象存放的地方。表空间是一种逻辑存储结构,数据库的对象如表、索引等在逻辑上都是存储在指定的表空间中。表空间可以指定大小,也可以自动大小,具体落到磁盘上可以是一个或多个DBF文件。

        由于表空间就是用来的存放数据对象的,那么存放的是哪个用户或哪个模式的数据对象就显得不那么重要了。通常一个用户对应一个默认表空间(没有指定时会自动创建同名默认表空间),创建数据库表的时候也可以指定表空间,一个模式下通常有多个表,也就意味着一个模式可以使用多个表空间。

​​​​​​​​​​​​​​6、数据文件(Data File)

        DM8数据文件由表空间指定的存储文件决定,表空间存储文件即数据文件。

7、​​​​​​​段(Segment)

        在DM8中,段(Segment)是一个对数据文件管理的逻辑概念,是簇的上级逻辑单元,一个段可以跨多个数据文件。

​​​​​​​8、簇(Extent)

        簇(Extent)由磁盘上连续的页组成,一个簇总是在一个数据文件中。在DM8管理系统安装的时候可以选择簇的大小,即一个簇包含页的数量,默认一簇16个页。

​​​​​​​9、数据页(Block)

        页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。在数据库安装的时候可以选择页的大小,默认8KB。这个页的大小从很大程度上决定了数据库的整体性能极限。

        DM8与在MySQL的InnoDB一样,均使用一个主键聚集索引。假设一个页大小为16K,那根据B+Tree索引原理,以主键为BigInt类型计算,占8 bytes,索引节点的前后指针占6 bytes,两者加起来14 bytes,一级节点可以存储 16 * 1024 / 14 = 1170个索引节点,二级节点就可以存储1170*1170=1368900个索引节点,此时,如果三级为叶子节点,叶子节点存储的是主键值+记录数据,记录数据最多为1K,这个时候主键值8bytes则可以忽略不计了,所以每个叶子节点最多能存储16k/1k = 16条记录,共1368900 * 16 = 21902400条数据。所以,因为这个页大小,MySQL数据库InnoDB可以支持在单表2000W记录时不会明显影响查询性能。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3