# 数据存储和操作
数据存储和操作包括对数据存储设计、实施和支持,最大化实现数据资源价值,贯穿数据创建、获取到处置的整个生命周期。数据管理的全生命周期分为:采集、传输、存储、处理、交换、分析与使用、归档和销毁几个阶段。数据存储和操作是管理“介质”的过程,在“介质”外也是管理数据本身的过程。
数据的存储和操作分为如下两个方面:
- 数据库操作支持:主要关注与数据生命周期相关的活动,即从数据库环境的初始搭建,到数据的获取、备份再到处置数据。同时,它还包括需要确保数据库性能状态良好,监控和优化数据库性能对数据库支持非常重要。
- 数据库技术支持:包括定义满足组织需要的数据库技术要求,定义数据库的技术架构,安装和管理数据库技术,以及解决与数据库相关的技术问题。
# 目标和原则
数据存储与操作的目标包括:
- 在整个数据生命周期中管理数据的可用性。
- 确保数据资产的完整性。
- 管理数据交易事务的性能。
数据存储与操作代表了数据管理高度技术性的一面,在遵循指导原则的情况下,有助于数据管理的整体工作:
- 识别自动化的开发过程并采取行动。
- 构建时考虑重用的思想,抽象可重用的数据对象推广使用,降低应用程序与数据库的耦合度。
- 理解并适当的使用最佳实践。
- 支持数据库的标准需求。
- 为项目中的DBA角色设置期望值。
# 基本概念
# 数据库术语
数据库术语是专有的、技术性的,理解这些技术语言的特定含义是非常重要的。
- 数据库:数据库是存储数据的集合。
- 实例。通过数据库软件,执行对某一特定存储区域的控制访问,一个组织通常使用不同的存储区域,同时执行多个实例,每个实例与所有其他实例相互独立。
- 模式。模式是数据库或实例中的数据库对象的一个子集,模式被用来将数据库对象组织成多个可管理集合。通常,一个模式拥有一个用户以及访问该模式内容的特定访问列表。模式的常见用法是将包含敏感数据的对象与普通用户群隔离,或者是在关系数据库在中将只读视图与基础表隔离。模式还可以表示具有相似性的数据库结构的集合。
- 节点。一台单独的计算机作为分布式数据库处理数据或者存储数据的一个部分。
- 数据库抽象。通用应用接口(API)通常用来调用数据库函数。这样一个应用可以链接到多个数据库,而开发者不必知道所有函数调用了哪些数据库。数据库抽象的优势是可移植性很强,缺点是对于某些针对特定数据库的函数,很难跨库使用。
# 数据生命周期管理
贯穿数据设计、实现到使用(任何系统存储、处理和检索数据)的整个数据生命周期,数据生命周期管理包括为数据的获取、迁移、保留、过期和处置进行的实施策略的过程。稳妥的做法是准备好检查表,确保所有任务都能高标准、高质量完成。应该采取一种可控制、可记录、可审计的流程,将应用程序的数据库表更实施到QC环境和生产环境中。另外,也应该有一个回退计划,在变更出现异常的情况下可以撤销变更。
# 数据库类型
数据库可以分为集中式数据库和分布式数据库。集中式系统管理单一数据库,而分布式系统管理多个系统上的多个数据库。分布式系统组件可以根据组件系统的自治性分为两类:联邦(自治)的和非联邦的(非自治的)
- 集中式数据库。集中式数据库将所有数据存放在一个地方的一套系统中,所有用户连接到这套系统进行数据访问。对某些访问受限的数据来说,集中化可能是理想的,但对于需要扩大范围、广泛使用的数据来说,集中式数据库可能存在风险。例如,如果集中式数据库不可用,就没有其他途径能访问到数据。
- 分布式数据库。分布式数据库通过扫描大量节点来快速获取数据。主流的分布式数据库技术是基于普通的商业硬件服务器来实现的。它呗设计成横向可扩展,即从一台到成千上万台服务器,而每台服务器提供本地的计算和存储能力。高效能力不靠单一硬件,而是依靠数据库管理软件在服务器间复制数据来实现,因而可以让整个计算机集群提供高效的服务。一些分布式数据库通过
MapReduce
模型进一步提升性能,在模型中数据请求会被分成许多小的工作模块,每个工作模块都可以在集群内任一点执行或重复执行。数据位于各个计算节点上,通过集群提高带宽的聚合数据访问能力。 - 联邦数据库。数据联邦提供是数据不需要对数据源进行额外复制或持久化。联邦数据库系统将多个自治的数据库映射成一个单一的联邦数据库。组织联邦的数据库有时是分散在不同地理位置,通过计算机网络连接在一起。他们保留本地的自治操作,同时参与到一个联邦中,允许部分和受控的共享他们的数据。如下图:
- 区块链数据库。区块链数据库术语一种联邦数据库,用于安全管理金融交易,它们也能用来进行合同管理或健康信息交换。区块链数据库有两种结构类型:单条记录和块。每个交易包含一条记录,每个区块包含一组带时间戳的交易,整个数据库由多个区块形成的链状结构组成,每个区块还包括链中前一个区块的信息。存储在区块中的交易信息生成时使用了哈希算法,新生成区块位于整个链的末端。一旦新的区块生成,旧的区块的哈希值就不再变化。这意味着,区块内的交易信息也不会再发生变化,如果交易信息在传输过程中发生了任何变化,那运行哈希计算得到的哈希值与原来的哈希值将不匹配。
- 云计算。虚拟化或云计算提供计算、软件、数据访问和存储服务,不要求终端用户了解提供服务系统的物理位置和相关配置。云计算的概念和电网的概念非常相似,即最终用户使用电但不必了解提供电力服务的基础设施,也不必理解供电设备。虚拟化既可以本地部署,也可以远程部署。云计算是虚拟化、面向服务架构(SOA)和效用计算广泛使用的自然演进形态,有一些云上实施数据库的方法,如:虚拟机镜像、数据库即服务(DaaS)、管理托管在云上的数据库。
# 数据处理类型
数据库处理有两种基本类型:ACID和BASE。
ACID的含义是保证数据库事物可靠不可或缺的约束,其基本特征为:
- 原子性(Atomicity)。所有操作要么都完成,要么一个也不完成。因此,如果事务中的某些部分失败,那么整个事务都会失败。
- 一致性(Consistency)。事务必须时刻完全符合系统定义的规则,未完成的事务必须回退。
- 隔离性(Lsolation)。每个事务都是独立的。
- 持久性(Durability)。事务一旦完成,就不可撤销。
在关系型数据库存储中,ACID相关技术是最主要的工具。随着数据增长规模空前,数据新增种类繁多,记录和存储非结构化数据的需要,读优化和数据负载性能需要以及后续在横向扩展、设计、处理、成本及灾难恢复方面有更大灵活性的需要等,BASE应运而生,满足了这些需要。BASE的基本特征为:
- 基本可用(Basically Available)。即使节点发生故障,系统仍然能保证一定级别数据的可用性,数据可能过时,但系统仍然会给出响应。
- 软状态(Soft State)。数据处于持续流动状态,当给出响应时,数据不保证是最新的。
- 最终一致性(Eventual Consistency)。数据在所有节点、所有数据库上最终状态是一致的,但并非每时每刻在每个事务里都是一致的。
通常在大数据环境里会使用BASE类型的系统,因为他们的业务场景任何时候都不需要立即准确的拿到所有数据。CAP定理是集中式系统在朝着分布式的系统方向发展过程中提出的理论。CAP定理指的是分布式系统不可能同时满足ACID的所有要求,系统规模越大,满足的要求点越少。分布式系统必须在各种属性间进行权衡。CAP定理有如下几个特点:
- 一致性(Consistency)。系统必须总是按照设计和预期的方式运行。
- 可用性(Availability)。请求发生时系统时刻都保持可用状态,并对请求做出响应。
- 分区容错(Partition Tolerance)。偶尔发生数据丢失或者部分系统故障发生时,系统依然能够运行并提供服务。
# 数据库环境
在系统的开发生命周期中,数据库在不同的环境中都会用到。当测试到一些变化时,开发团队应该严格遵循标准流程和实施步骤。在数据库环境中,常用的数据库有:层次性数据库、关系型数据库、多维数据库、时序数据库、非关系型数据库、列式数据库、空间数据库等。数据库大致分为如下几个环境:
- 生产环境。生产环境是处理所有生产业务流程发生的技术环境。
- 用户验收环境(UAT)。此环境是在真正部署到生产环境之前,需要进行的必要的开发和测试存在的。在UAT环境下,变更引发的问题可以被提前检查和处理掉,不会影响正常的业务流程,为了尽可能检测出潜在的问题,UAT环境的配置要和生产环境非常接近。
- 开发环境。开发用的环境通常是生产环境的精简配置版本,相对而言是更少量的磁盘空间,更少的CPU及内存等。开发人员在这个环境下编写代码,并测试不同环境下对代码的变更,然后在测试环境对这些代码进行集成测试。开发人员可能会拥有多个生产数据模型的副本,大型企业可能会给开发人员独立的环境,通过合适的权限来进行开发管理。
- 测试环境。测试环境通常用于执行质量保证,有些情况下也用于压力测试或性能测试。测试环境或许可以通过网络连接读取生产数据,但是,测试环境永远不要写数据到生产系统。
- 数据沙盒或实验环境。数据沙盒是允许以只读的方式访问和管理生产数据的另一个环境,数据沙盒用于实验开发或者验证相关假设的数据,或者将用户自己开发的数据或从外部补充的数据与生产数据进行合并,数据沙盒的价值是进行一场概念验证。
# 常见的数据过程
# 数据归档
归档(Archiving)是将数据从可立即访问的存储介质迁移到查询性能较低存储介质的过程。归档后的数据可以恢复到原系统,供短期使用。不需要活跃的支持应用程序处理数据,应迁移到价格较低的磁盘中,从归档中恢复的过程简单来说就是将归档文件中的数据,复制回原系统。
归档过程必须与分区策略保持一致,以确保最佳的可用性和数据保留度。通常的方法包括:
- 确定是否保留历史归档或者有多少历史归档需要保留,不需要的历史归档可以清除。
- 对于重大技术调整,在调整前将归档回复到原始系统、升级或迁移到新系统,并在新系统下重新归档数据。
- 对于源数据结构发生更改的高价值归档数据,恢复归档,并对数据结构进行重新更改,用新结构重新归档。
- 对于相对低价值的低频访问归档,在源系统的技术或结构发生改变时,保持旧系统的小版本,供有限的数据访问,并根据需要用旧系统的数据格式从归档中抽取数据。
# 变动数据捕获
变动数据捕获(Change Data Capture,CDC)是指检测到数据的变动并确保与变动相关的信息被适当记录的过程。CDC通常指的是基于日志的复制,是一种非入侵的方式,将数据更改复制到项目标端而不影响源端。在一个简化的语境中,一台计算机系统的数据可能在前一个时间点发生了改变,在第二台计算机系统里需要反映这些变化,与通过网络复制整个数据库的数据来反映一些微小的变化不同,CDC只发送变化的内容(增量信息),接受系统就可以进行恰当的更新。
CDC有三种实现方法来实现:
- 通过标识变化的数据进行识别,如:时间戳、版本号。
- 通过读取数据库日志(log)来进行识别。
- 通过数据比对来进行识别。
# 数据清除
如果所有数据都要永远保存在主要存储中,那么最终数据会填满所有的可用空间,从而使性能开始下降,此时需要将数据存档、清除。有些数据的价值如果被降低,不知道继续保留也应该及时将其删除。清除是指从存储介质中彻底删除数据并让它无法恢复的过程,数据管理的主要目的是维护数据的成本不超过其对组织的价值。清除数据也可以降低成本和风险,通常来说,要清除的数据即使从监管的角度来,也应是被认定为不必要的才可以清除。某些数据如果超过保存的必要时间,将会成为企业的负担,清除这些数据还可以降低它被滥用的风险。
# 数据复制
数据复制意味着多个存储设备上存放着相同的数据,在某些情况下,拥有重复的数据库很有用。例如,在高可用性环境中,在业务高峰期或者灾难发生时,可以在不同服务器甚至不同数据中心的相同数据库之间分配工作负载,保持业务连续性。
数据复制有两个维度的拓展方式:
- 水平数据扩展。其使系统拥有更多的数据副本。
- 垂直数据扩展。将数据副本放到距离更远的不同地理位置上。
# 数据恢复
数据库可用性是衡量系统对错误条件容忍的指标,如果一个系统能够容忍高级别的处理错误,并且仍能想预期那样工作,那么它就能有很强的可用性。通常我们要求数据库可以检测异常,并提前终止或从通用的错误处理办法中自动恢复,一下是常用的三种恢复类型:
- 立即恢复(Immediate Recovery)。通过预判并自动解决问题,如切换到备用系统。
- 关键恢复(Critical Recovery)。尽快恢复以尽量减少业务延迟或业务中断的恢复计划。
- 非关键恢复(Non-critical Recovery)。指该类业务可以直到关键系统恢复完毕延迟恢复。
# 数据保留
数据保留是指数据保持可用的时间,数据安全性会影响数据保留计划,出于合规考虑,某些数据需要保留到特定的时间段,未能将特定数据保留到合适的时间周期,可能会产生法律隐患,各组织应根据监管要求和风险管理规定,来制定保留策略,这些策略应该有助于建立数据清除和数据归档的规范。
# 数据分片
分片是一个把数据库中的一部分独立出来的过程,因为分片的复制只是一个很小的文件,使用分片可以独立于其他分片进行更新,因为分片通常比较小,使用更新甚至整个分片刷新都相对更容易。
# 主要的管理工作
数据存储和操作包括数据库技术支持和数据库操作两个方面,数据库技术支持侧重选择和维护用于存储和管理数据的软件,而数据库操作支持侧重软件所管理的数据和进程。
管理数据库技术主要包含:
- 理解数据库的技术特征。
- 评估数据库技术。
- 管理和监控数据库技术。
管理数据库操作具体如下:
- 理解数据存储和操作需求。
- 识别数据库使用模式。
- 定义数据库访问需求。
- 规划业务连续性(备份、恢复数据)。
- 创建数据库实例。
- 管理数据库性能。
- 管理存储数据集。
- 管理数据迁移。