为oltp选择rdmbs时,你都需要考虑哪些

合集下载

服务器选型方案(二)

服务器选型方案(二)

服务器选型方案(二)引言概述:在选择服务器时,要考虑到企业的需求、预算和未来的扩展计划。

本文将从性能、可靠性、安全性、扩展性和成本五个方面,详细讨论服务器选型方案。

正文内容:一、性能1.1 根据业务需求确定服务器的处理器类型和核心数1.2 考虑服务器的内存容量和类型,以满足系统的负载需求1.3 选择高性能的硬盘和存储技术,提升数据读写速度1.4 考虑网络带宽和接口类型,确保服务器能够满足网络传输需求1.5 考虑服务器的扩展槽位和插槽类型,为未来的升级留下余地二、可靠性2.1 考虑服务器的冗余设计,如双电源、热插拔硬盘等,提高系统的稳定性2.2 选择具有良好维护支持的服务器品牌和型号,以确保能够及时获得技术支持和维修服务2.3 考虑服务器的散热设计和温度监控功能,以防止过热损坏硬件2.4 考虑服务器的硬件故障预测和自动修复机制,提高系统的可靠性2.5 考虑服务器的数据备份和恢复功能,保证数据的可靠性和安全性三、安全性3.1 考虑服务器的远程管理功能,以便进行及时的监控和管理3.2 选择具有安全启动功能的服务器,确保系统启动过程的安全性3.3 考虑服务器的防火墙和入侵检测系统,保护系统免受网络攻击3.4 考虑服务器的身份验证和访问控制机制,限制未经授权的访问3.5 考虑服务器的数据加密和安全传输机制,保障数据的保密性和完整性四、扩展性4.1 考虑服务器的机箱大小和扩展槽位数量,以支持未来的硬件升级4.2 选择支持虚拟化技术的服务器,提升资源利用率和系统扩展能力4.3 考虑服务器的网络拓扑和连接方式,确保能够满足未来的扩展需求4.4 考虑服务器的存储扩展能力,以支持数据容量和性能的提升4.5 考虑服务器的软件兼容性和接口标准,确保能够与其他系统互联互通五、成本5.1 根据性能需求和预算限制,选择性价比高的服务器5.2 考虑服务器的能耗和运行成本,以降低总体拥有成本5.3 考虑服务器的硬件和软件许可费用,确保在授权范围内使用5.4 考虑服务器的维护费用和延保机制,避免额外的支出5.5 考虑服务器的长期投资回报率,综合考虑总体成本和长期性能稳定性总结:在选择服务器时,性能、可靠性、安全性、扩展性和成本是关键考虑因素。

数据库管理系统的设计原则

数据库管理系统的设计原则

数据库管理系统的设计原则数据库管理系统(Database Management System,简称DBMS)是指用来管理数据库的软件系统。

在当今信息时代,数据库的应用越来越广泛,数据库管理系统的设计也变得至关重要。

本文将介绍数据库管理系统的设计原则,以帮助读者了解如何设计一个高效可靠的数据库管理系统。

一、数据安全性原则在设计数据库管理系统时,数据安全性是首要考虑的因素。

以下是一些关键原则:1. 访问控制:确保只有授权用户可以访问数据库,并限制他们的操作权限。

这可以通过身份验证和授权机制来实现。

2. 数据加密:对敏感数据进行加密,以避免未经授权的访问。

使用强大的加密算法来保障数据的保密性。

3. 完整性约束:使用完整性约束来确保数据库中的数据符合特定的规则和要求。

例如,主键约束、外键约束等。

4. 定期备份:定期备份数据库,以防止数据丢失。

这是非常重要的措施,可以在系统遭受故障或数据损坏时恢复数据。

二、性能优化原则为了提高数据库管理系统的性能,以下是一些设计原则:1. 数据库索引:创建适当的索引可以加快查询速度。

根据查询需求,选择合适的索引类型来优化数据库性能。

2. 数据库范式:将数据库设计为满足某种范式(如第三范式)的结构,可以减少数据冗余和更新异常,提高数据的一致性和查询效率。

3. 查询优化:针对常见的查询操作进行优化,例如使用合适的连接操作、使用子查询等。

4. 缓存机制:使用缓存机制可以减少对数据库的频繁访问,提高查询的响应速度。

可以将经常访问的数据缓存在内存中,避免每次都从磁盘读取数据。

三、可扩展性原则设计可扩展的数据库管理系统是为了应对数据量不断增长的需求。

以下是一些关键原则:1. 分区和分片:将数据库分区或分片可以提高系统的扩展性和性能。

根据数据的特点和访问需求,选择合适的分区策略。

2. 集群和负载均衡:通过建立数据库集群和使用负载均衡技术,可以平衡数据库服务器的负载并提高系统的可用性和性能。

数据库选型的五大要素

数据库选型的五大要素

数据库选型的五大要素在进行数据库选型时,有五个重要要素需要考虑。

这些要素包括:数据类型、访问模式、规模和性能需求、安全性和可靠性以及成本效益。

在选择合适的数据库时,这些要素是至关重要的,可以帮助组织更好地满足业务需求和目标。

首先,数据类型是选择数据库的重要考量因素之一、不同类型的数据库适用于不同的数据类型。

例如,关系型数据库适用于结构化数据,而文档型数据库适用于半结构化和非结构化数据。

因此,在选择数据库时,需要仔细考虑组织所需处理和存储的数据类型。

其次,访问模式是选择数据库的另一个关键因素。

访问模式涉及到数据的读取、写入、更新和删除方式。

不同的应用程序可能具有不同的访问模式需求。

例如,一些应用程序需要大量的读取操作,而另一些应用程序可能需要频繁的写入和更新操作。

因此,在选择数据库时,需要根据应用程序的访问模式需求来评估不同数据库的性能和效率。

第三个要素是数据库规模和性能需求。

数据库的规模涉及到数据量的大小,而性能需求涉及到对数据的处理和响应时间的要求。

数据库规模和性能需求对于数据库的选择非常重要。

在选择数据库时,需要考虑数据库的扩展性、吞吐量和响应时间等因素,以满足组织的数据处理需求。

安全性和可靠性是数据库选型的另一个关键要素。

数据库需要保护组织的敏感数据,并提供对数据的权限管理和身份验证。

此外,数据库还需要能够处理故障和数据丢失的情况,并提供数据备份和恢复的能力。

因此,在选择数据库时,需要考虑数据库的安全性和可靠性功能。

最后,成本效益是数据库选型的重要考量因素之一、不同类型的数据库具有不同的成本结构和授权模式。

一些数据库是开源的,可以免费使用,而另一些数据库则需要支付许可费用。

此外,数据库还涉及到硬件和维护成本。

因此,在选择数据库时,需要考虑数据库的总体成本效益,并权衡成本和性能之间的关系。

综上所述,数据库选型的五大要素包括数据类型、访问模式、规模和性能需求、安全性和可靠性以及成本效益。

使用这些要素作为决策依据,可以帮助组织选择最适合其需求的数据库,并满足业务目标。

数据库中数据类型选择的考虑因素

数据库中数据类型选择的考虑因素

数据库中数据类型选择的考虑因素数据类型是关系型数据库中非常重要的一部分,它决定了数据的存储方式、操作方式和计算规则,因此在设计数据库时,选择合适的数据类型十分关键。

本文将探讨数据库中数据类型选择的考虑因素。

一、数据需求的考虑因素确定数据类型之前,首先要考虑数据库所能存储的数据类型范围是否满足业务需求。

在这一过程中,需要考虑以下几个方面的因素:1. 数据属性的特点:不同的数据属性对应不同的数据类型。

例如,整数、字符串、日期、布尔型、浮点数等属性需要选择相应的数据类型来存储。

2. 数据的有效性与完整性:数据类型的选择要基于数据的有效性和完整性。

数据的有效性是指数据值是否符合预定义的规则和约束,而完整性则是指数据是否完整且符合逻辑。

通过选择合适的数据类型,可以有效地维护数据的有效性和完整性。

3. 存储空间的要求:不同的数据类型占用的存储空间是不同的,选择合适的数据类型可以节省存储空间,提高数据库的性能和效率。

二、性能考虑因素除了数据需求外,还需要考虑数据库性能方面的因素。

以下是一些常见的性能考虑因素:1. 数据访问速度:不同的数据类型对数据的读写操作的速度有不同的影响。

例如,使用整数类型比使用字符类型的操作速度更快。

2. 索引效率:数据库索引是提高数据检索速度的重要手段。

选择合适的数据类型可以提高索引的效率,加快数据的检索速度。

3. 运算效率:不同数据类型的计算效率也存在差异。

选择合适的数据类型可以提高计算的效率,减少系统资源的使用。

三、存储需求的考虑因素在选择数据类型时,还需要考虑存储需求的因素。

以下是一些常见的存储需求的考虑因素:1. 存储空间的占用:不同的数据类型占用的存储空间是不同的。

选择占用存储空间较小且满足业务需求的数据类型可以节省存储资源。

2. 存储精度的要求:某些数据类型对数据存储的精度要求较高,例如浮点数和日期时间类型。

选择合适的数据类型可以确保存储的精度满足业务需求。

3. 性能的平衡:在存储需求与性能之间需要进行权衡。

数据库选型的五大要素

数据库选型的五大要素

数据库选型的五大要素■ 余詠衡如果引用结构化的决策方法,确保本文所介绍的数据库选型应考虑的五大要素都得到全面及客观的评估,那么根据其与项目、产品和组织的关系进行利害权衡,就能做出理智的数据库选型决策。

面对品种繁多的数据库产品,如何才能独具慧眼,选中适合自己的数据库产品呢?众所周知,正确的评估、选型与数据库技术本身同样重要。

而通常,数据库厂商都会在性能清单和技术基准表中尽量展现产品最佳的一面,对产品弱点却避免提及或进行遮掩,关于这一点,业界已经是人尽皆知了。

其实在挑选和评估过程中,首要目标是选择一款能够满足甚至超过预定要求的技术或解决方案。

选型的正确方法将使用户在面对众多产品时,提高其做出最佳选择的能力。

而数据库选型时,必须考虑以下五大因素。

开发要求首先,需要清楚自己究竟想使用什么开发技术。

例如,你是要以访问传统的关系型数据库?还是要以纯面向对象技术构建J2EE应用平台?又或是需要建设XML Web Services?如果你要实现的是纯关系型的开发典范,那么实际要使用的受支持的标准(和非标准)SQL功能有多少?如果你要规划的是面向对象开发策略,那么在原计划里的数据库支持真正的面向对象吗?它是如何支持的?若有需要,它能同时提供SQL的功能吗?数据库支持这个功能吗?虽然有些关系型数据库声称支持面向对象开发,但实际上并不是直接支持的。

这种非直接的体系结构将导致更多的事务处理故障,以及潜在的可升级性和性能问题。

另外,你还需要确定自己的前端技术如何与后端进行“对话”。

你的业务逻辑是放在客户机一端呢?还是放在服务器一端?你要使用哪些脚本语言?它们与后端服务器的兼容性如何?它们是快速应用开发(RAD)环境吗?目前,实现基于关系型数据库的应用可以选择传统的主流品牌,这些数据库产品有着很成熟的关系技术以及广泛的应用资源。

但是,如果实现的是基于面向对象技术的应用、又或是数据结构更为复杂时,不妨考虑目前一些公司推出的所谓后关系数据库。

数据库选型依据

数据库选型依据

数据库选型依据在选择数据库时,有许多因素需要考虑,包括但不限于以下几个方面。

1. 数据类型和量:不同的数据库适用于不同类型和量的数据。

例如,关系型数据库适用于结构化数据,而NoSQL数据库则适用于非结构化数据。

因此,在选择数据库时,首先需要考虑数据的类型和量。

2. 数据处理需求:不同的应用对数据的处理需求也不同。

一些应用需要快速的读取和写入,一些需要高并发处理,还有一些需要支持大规模的数据分析。

因此,在选择数据库时,需要考虑应用的数据处理需求。

3. 可扩展性与可靠性:应用可能需要支持不断增长的用户和数据量,因此,数据库的可扩展性和可靠性也是考虑的重要因素。

一些数据库具有水平扩展能力,可以通过添加更多的节点来增加容量和性能,而一些则具有高可靠性和故障转移能力,可以确保数据的安全性和可用性。

4. 性能和成本:性能和成本往往是相互矛盾的。

一些高性能的数据库可能需要高昂的许可费用和硬件成本,而一些低成本的数据库可能性能较低。

因此,在选择数据库时,需要平衡性能和成本,找到最佳的平衡点。

5. 社区支持和生态系统:数据库的社区支持和生态系统也是重要的考虑因素。

一些数据库拥有庞大的开发者社区和丰富的生态系统,可以提供丰富的工具和插件,促进开发和部署。

这些数据库也更容易得到帮助和支持,遇到问题可以快速解决。

因此,在选择数据库时,需要考虑其社区支持和生态系统。

综上所述,选择数据库需要考虑许多因素,包括数据类型和量、数据处理需求、可扩展性与可靠性、性能和成本、社区支持和生态系统等。

在选择时,需要平衡这些因素,找到最适合应用的数据库。

OLAP OLTP优化

Oracle决策支持系统下的性能调整和优化原则DSS 系统的特征是从大量的数据中产生有意义的报告。

DSS 应用可能会经常与OLTP 一起使用,但因为它们的设计要求差异很大,把OLTP 系统用于决策支持不是好的主意。

OLTP 的用户一般很多,而DSS 系统的用户一般较少。

决策支持系统的例子有与定单录入系统(OLTP系统)一起工作的现金流预测工具,该工具可以帮助决定需要多大的现金储备。

另一个决策支持的例子是客户需求分析工具,该工具可以找出某个地域客户对哪个产品购买量最大。

决策支持系统的主要特征是:读取大容量的数据,经常使用全表扫描作为存取数据的方法。

极少量地更新数据。

一般而言,从OLTP 系统的数据(也可能是其它的数据源)会以批的方式流向DDS 系统,用户自己极少会更新DSS 的数据。

下图反映了DSS系统的特征:DSS系统在运行时,有如下的一些要求:合理的响应时间。

结果是准确的。

可以在白天使用。

为了满足上面的要求,应当从以下几个方面考虑调节数据库DSS应用系统。

1. 在使用应用逻辑和声明约束来维护完整性方面,切记声明完整性约束的代价要小。

在DSS系统中,相关完整性约束和表的check 约束是主要使用的约束形式。

2. 尽量要使代码被存储过程对象共享。

3. 即使一条SQL语句在不同的运行环境下捆绑变量(bind variable)取了不同的值,Oracle认为他们是同样的SQL语句。

因此,要使分析SQL语句的工作减少到最抵,应当使用捆绑变量,而不是将这些不同的值直接放到SQL语句中(使用literal)(如果这样做了,Oracle 认为它们之间是不同的SQL,需要重新分析)。

但是,这样做会有如下的损失:优化器无法知道列的可选择性。

而完全写出来的SQL 语句(使用literal),可使基于成本的Oracle优化器使用直方图统计(histogram)。

4. 无论如何,对DSS系统来说,分析SQL 用的时间要比执行SQL语句用的时间要少的多。

数据库设计指南

数据库设计指南数据库是现代信息系统中至关重要的一部分,数据库的设计能否合理与科学,直接影响着信息系统的性能、数据质量以及系统安全等方面。

如何进行数据库的设计呢?在此,我们将为大家详细讲解一下数据库设计指南。

1. 数据库需求分析首先,我们需要对数据库进行需求分析,明确系统所需要记录的信息内容、数据规模、数据结构和业务逻辑等方面。

在考虑数据库需求的过程中,我们要注意一下几点:1.了解用户需求:了解用户的需求非常重要,因为用户在使用数据库时会根据自己的实际需求选择相应的功能。

2.明确要存储的数据类型:在进行数据库设计之前,我们应该明确要存储的数据类型,因为不同的数据类型有不同的属性,有时候需要特殊处理。

3.规模的考虑:规模是数据库设计的一个重要方面,因为规模的变化会对数据库的性能产生影响。

在设计之前,需要对系统的数据量进行估计和预测。

2. 数据库设计范式在进行数据库设计时,必须要按照一定的规范进行,这就是数据库设计范式。

当前所使用的数据库设计范式主要有三种:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

1. 第一范式(1NF):第一范式是数据库设计的基础,它要求表中的每个属性都是原子性的,也就是不能再分解成更小的单位。

2. 第二范式(2NF):第二范式要求表中的非主键属性必须完全依赖于表的主键。

如果一个非主键属性依赖于表中的某个非主键属性,那么这个非主键属性就不满足第二范式。

3. 第三范式(3NF):第三范式要求表中的非主键属性必须只与主键相关,不能存在传递依赖关系。

如果一个非主键属性依赖于表中的其他非主键属性,那么这个非主键属性就不满足第三范式。

3. 数据库表结构数据库表的结构是指表中的各个字段,包括字段名称、数据类型、长度、约束、默认值等方面。

在进行数据库表设计时,我们需要注意以下几点:1. 命名规范:表的命名应该简洁明了,符合命名规范,便于程序员进行程序开发和维护。

2. 数据类型的选择:在选择数据类型时,应该根据实际需求来进行选择,同时更加注重查询效率和空间利用率。

rdb面试题目(3篇)

第1篇一、RDB面试题目概述RDB(关系型数据库)面试题目主要考察应聘者对数据库基础理论、SQL语言、数据库设计、性能优化等方面的掌握程度。

以下将针对这些方面提供一系列RDB面试题目,并附上解析和备考指导。

二、RDB面试题目及解析1. 基础理论(1)题目:什么是关系型数据库?请简述关系型数据库的几个主要特点。

解析:关系型数据库是一种基于关系模型的数据库管理系统,它将数据组织成一张张二维表,表之间通过外键关联。

关系型数据库的主要特点有:- 数据结构:以表的形式组织数据,表由行和列组成,行表示数据记录,列表示数据字段。

- 数据独立性:逻辑结构、物理结构和视图分离,方便管理和维护。

- 数据一致性:通过事务管理确保数据的一致性。

- 数据完整性:通过约束保证数据的正确性。

- SQL支持:提供结构化查询语言(SQL)进行数据操作。

备考指导:掌握关系型数据库的基本概念和特点,理解其与传统文件系统、NoSQL 数据库的区别。

(2)题目:什么是SQL?请列举几个常见的SQL语句。

解析:SQL(Structured Query Language)是一种用于数据库管理的语言,包括数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)等。

常见的SQL语句有:- 数据定义语句:CREATE TABLE、ALTER TABLE、DROP TABLE等。

- 数据操作语句:INSERT、UPDATE、DELETE等。

- 数据查询语句:SELECT、WHERE、GROUP BY、HAVING等。

- 数据控制语句:GRANT、REVOKE等。

备考指导:熟练掌握SQL语句的语法和功能,能够编写简单的SQL查询、更新和删除数据。

2. 数据库设计(1)题目:请简述数据库设计过程中的ER图和范式。

解析:ER图(Entity-Relationship Diagram)是数据库设计过程中用于描述实体、关系和属性的工具。

范式是数据库设计中用来规范表结构的规则,分为以下几类:- 第一范式(1NF):满足原子性,每个字段值不可再分。

选择数据库的标准

选择数据库的标准选择数据库是建立一个可靠、高效的软件系统的关键。

不适当的数据库选择可能导致严重的系统性能问题、数据安全问题以及维护困难等问题。

因此,选择数据库的标准是非常重要的。

一、可扩展性随着业务的发展,数据库不仅要满足当前数据存储需求,还需支持未来业务规模扩大的需求。

因此,可扩展性是选择数据库的重要标准之一。

在考虑可扩展性的时候需要考虑:1、数据量:数据库需能够存储大量数据,并能够高效地处理和查询这些数据。

如果数据量很大,分布式数据库是一个不错的选择。

2、负载:数据库需能够支持大并发,高负载的业务场景。

如果负载较高,则需要选择一些支持多线程和分布式的数据库系统。

3、网络:如果是跨地区的分布式业务,则要考虑网络数据传输的复杂度。

需要考虑如何处理延迟和故障。

二、可靠性1、数据完整性:数据不仅要存储,还要保证其完整性,确保系统中的数据准确无误。

2、数据安全性:数据库需要提供相应的数据加密和数据保护措施,确保数据安全。

3、备份和恢复:数据库需要提供可靠的备份和恢复机制,当出现灾难性状况时,能够快速恢复系统的数据。

三、性能对于任何数据库来说,如何提供良好的性能的问题是至关重要的。

在选择数据库时,以下几个方面需要考虑:1、读写性能:对于大型企业级应用程序来说,读/写性能直接影响到业务的响应。

2、部署结构:有些数据库可以做成主备结构,实现高可用性,更好的读写分离;另外,有些场景下可以采用分布式存储技术,甚至采用大数据技术去做一些数据分析和计算工作。

3、索引和优化:对于大量数据的场景下,索引以及优化是必不可少的,具体需根据场景进行规划。

四、可维护性一个系统的数据库选型虽然只有在开始时做一次,但在后期的运维升级过程中,数据库维护是至关重要的。

在选择数据库的时候,可维护性也是一个需要考虑的标准。

在考虑数据库的可维护性的时候需要考虑:1、易于管理:需要简单易用的管理工具,以及能够提供有效的提示和警报的机制。

2、标准化的应用程序接口:数据应遵循标准化的应用程序接口,容易移植和升级。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

为OLTP选择RDMBS时,你都需要考虑哪些? 译者 | 大愚若智策划|木环我们经常需要为自己的OLTP(事务/运营)数据库选择适合的RDBMS(关系型数据库管理系统)。虽然通过编写可移植的SQL可以暂时避免进行这样的选择,但迟早要做出这样的选择,至少需要进行这样的尝试(比如,意识到具体的选择不够明确,因此决定选择跨RDBMS的SQL)。生产环境中选择 RDBMS 的标准是? 在发起“到底哪个RDBMS最好”的讨论圣战之前,也许需要首先明确一下对于24x7运行的生产级OLTP RDBMS,到底需要具备哪些必不可少的功能。一、 基于锁,或是基于MVCC 考虑到并发性,目前几乎所有RDBMS无外乎基于锁的(Lock-Based),或基于MVCC(多版本并发控制)的。从写负载更重的OLTP处理角度来说,我曾经见到过:对于读写混合型负载(例如OLTP事务和报表),基于MVCC的RDBMS表现会比基于锁的略好一些。如果使用高于Read Uncommitted的隔离级别,效果还会更好,最适合用于读取/报表用途。另一方面,OLTP很少会遇到大量并发读取的情况,如果真的遇到这种情况,通常可通过副本(Replica)执行此类读取,因此不会造成太严重的问题。对于大部分情况下以写入为主的OLTP(没有太多报表需要创建),基于锁的RDBMS要比基于MVCC的表现略好一些。然而如果能让OLTP工作负载使用INSERT代替UPDATE,此时MVCC的效率更高。另外,值得注意的是,如果使用了单一写入连接(Single-write-connection)数据库架构,基于锁和基于MVCC的RDBMS之间的逻辑差异将显得微乎其微(尽管性能略有差别,但其他方面几乎相同,基于锁的RDBMS通常略微领先一些)。二、ACID保障 对于OLTP数据库,我们需要为涉及多行和多表的事务提供ACID保障。如上所述,对于OLTP数据库,我们需要为事务提供全面的ACID保障。更重要的是,需要保障涉及多行和多表的事务具备ACID特性。虽然这一规则也有例外,但这种例外情况实际上极为罕见。这几乎已自动将MySQL+MyISAM用作OLTP数据库的可能性彻底排除在外。但是也要注意,MySQL+ISAM可能是少数应用(例如作为快递追踪系统或系统监视工具的后端)的好选择,但并不适合涉及某类与金钱有关信息的常规OLTP处理。此外RDBMS提供的ACID保障差不多等同于意味着需要使用数据库日志,同时也意味着一旦RDBMS崩溃,随后需要通过数据库日志进行自动恢复(并自动前卷Rollforward)。三、 支持24×7运行 作为联机备份的备选方案,可使用异步主从复制(Replication)我们需要的另一系列功能主要与24×7不间断运行有关(例如游戏服务器,总得全天候运行对吧)。这些功能包括:联机备份。无论做什么都肯定需要备份,24x7不间断运行更是少不了联机备份。1、通常来说,联机备份意味着需要具备“日志前卷”能力。大部分时候是这样工作的:创建两个数据库,一个作为“主”,一个作为“从”;随后从“主”获取日志文件并发送给“从”,然后在从数据库上进行“前卷”。此外,有些数据库可以对处于“日志前卷”状态下的“从”数据库执行只读请求(实际上等同于创建了一个只读从副本)。然而其他一些RDBMS不能处理这样的请求(例如需要首先完成“日志前卷”操作才能让从RDBMS能够接受查询操作)。2、作为联机备份的备选方案,也可以通过异步主从复制获得近乎完全同步的备份副本(这种做法对MySQL+InnoDB是一种尤为有趣的选项)。需要注意,这样的副本也许可以或无法支持联机备份+前卷那样的“时点”恢复(具体情况请参阅文档)。虽然只在从一些非常糟糕的情况下恢复时需要“时点”恢复(实际生产环境中我从未遇到需要这种恢复的情况),不过真遇到这种糟糕的情况至少也能助我们一臂之力。3、“即时”的ADD COLUMN语句。我们可能需要对生产环境的数据库进行扩展,这一点是确定无疑的。大部分时候这是通过ALTER TABLE… ADD COLUMN语句实现的。面对ADD COLUMN语句,很多RDBMS会简单地将整个表重写为新格式的行。如果表包含10亿行,这一过程可能需要数小时?(在进行复制的过程中,整个表将完全无法访问,导致数据库在数小时内无法使用?)。让ADD COLUMN能够近乎即时(考虑到表的大小,可能需要几毫秒的时间)执行完成并不需要什么艰深的技术,有些RDBMS也确实能做到这一点,但是也不能忽视,这并不是一种普遍特性。预算不足时的备选方案是实现无锁ADD COLUMN(以及常规的ALTER TABLE),方法如下:用新的结构创建“影子”表通过触发器将对当前表的所有改动写入影子表将数据从当前表复制到影子表(一定要忽略已存在的行,因为触发器已经在其中写入内容了)用影子表取代当前表这种“廉价”的ADD COLUMN方法相当繁琐(全过程会对性能产生极大影响),但如果没有其他更好的方法,这种做法至少可以起到一定的效果。“即时”ALTER COLUMN(字段拓宽,Widening field)也是个很好的功能,但因为字段拓宽可通过ADD COLUMN模拟,因此显得并不是太重要。4、联机表优化。这个功能需要介绍一下。由于RDBMS会不断修改表内容,表的性能会逐渐退化(实际上取决于所用存储引擎,从“行溢出(Overflow row)”到“死行(Dead row)”,我们会遇到各种不希望出现的情况)。为此有必要进行一定的优化(例如InnoDB的OPTIMIZE TABLE,DB/2的REORG TABLE,Postgres的VACUUM等),并且我们会需要联机完成这些操作(无需让整个数据库彻底停摆,因为对包含数百万行内容的表进行优化通常需要花很长时间)。大部分时候,此类优化需要创建“影子副本”(由数据库自行创建,这总好过需要我们手工创建),这也意味着需要额外的存储空间。不过至少有一个RDBMS提供了“原地”表优化功能。5、容器的重新平衡。虽然不像上文列出的其他问题那么重要,但我始终认为“容器的重新平衡”也是RDBMS需要考虑的一个重要问题。简单来说,这个问题主要出现在添加存储数据的新硬盘(这种情况时有发生),以及通过将数据分散在所有硬盘上实现提速时。此时可通过下列两种方法之一实现:(a) 使用RAID-10(这样就无需考虑数据库存储数据的方式了)(b) 通过多个RAID-1磁盘使用数据库容器(因为数据库本质上采用了类似RAID-0的工作原理)。只要无需添加新硬盘(实际上通常在添加时,为了实现冗余往往会成对增加硬盘),所有系统基本上是均等的,然而在添加了一对新硬盘后,我们需要对硬盘进行“重新平衡”,借此实现负载的重新平衡,这一“重新平衡”的工作分别是由RAID或数据库进行的。RAID级别的重新平衡对服务器性能的影响远大于数据库级别的重新平衡(尤其是有些情况下系统甚至完全无力承担RAID级别重新平衡过程中产生的负荷)。因此我更乐于选择使用由数据库管理的容器(会在增加容器后重新平衡,整个过程会保持尽可能平缓)。四、 性能 不幸的是,缺乏具体用例情况下进行的数据库性能评测其实没有任何意义。当然,性能(尤其是写性能)对OLTP数据库至关重要。不幸的是,缺乏具体用例情况下进行的数据库性能评测其实没有任何意义。因此我只能尽量介绍一些与性能有关的知名RDBMS架构功能及对某些功能的误解。 SQL编译器的提示人类从不以史为鉴,这本身就是最重要的“鉴”。—— 奥尔德斯·赫胥黎在向RDBMS提交SQL语句时,语句会被编译为“执行计划”。而(无论数据库开发者怎么想或数据库产品的销售人员怎么说)这样的编译器时不时总会出错。例如下面列出了一个常见的此类错误:我们正在使用基于统计信息(即基于成本)的SQL编译器。有一个很大的历史表,其中包含一个TIMESTAMP字段(很常见的情况)。统计信息恰好有些陈旧,例如晚了几小时/几天(总是会这样)。我们正在编译的SQL语句会获取“T=上一小时”之后的数据。此时SQL编译器查看统计信息发现我们所请求的T之后没有任何数据,并决定针对上一小时的数据进行索引扫描(并预期到将会读取回0行数据)。其实还有其他(实际上更好的)执行计划(基于其他索引),但SQL优化器(预期会通过索引扫描取回0行数据)决定使用基于时间的索引。然而在上一个小时里产生了几百万笔事务,导致这次索引扫描工作需要耗费极长的时间。 OLTP的性能问题某些RDBMS会让人感觉它们在设计时从未考虑过主要以写操作为主的OLTP(而是更专注于读取查询)。虽然这并不意味着此类RDBMS从本质上就很糟糕(毕竟大部分数据库确实主要以读取查询为主要任务),但在现实世界中,面对需要执行大量写操作的OLTP环境,这会成为一个不容忽视的问题。一起看看这些相当著名的问题吧。Postgres:甚至对非索引字段进行更新也会导致Ctid的变化(存在争议)有报道称现实用例中对包含大量索引的数据库进行更新时,Postgres的数据库会遇到严重的性能问题。相关问题的详细讨论可参考StackOverflow.PostgresUpdates和Klitzke,在我看来问题主要在于:“由于索引需要通过Ctid引用行,一个简单的UPDATE(哪怕针对非索引列执行)也会改变Ctid,导致引用了被更改行的表中每个索引中的Ctid均需要重写。”这就很糟了,对写操作负担重的OLTP数据库尤为如此。另外从Postgres 8.3开始提供了一种所谓的Heap-Only Tuples(HOT)功能,该功能至少在理论上应该能消除大部分相关问题(然而我没找到任何能确认这一点的现实用例),该功能的简要介绍可参阅Postgres.HOT。这个功能的大致思路是:在HOT正常工作的前提下,如果新行可以放入同一页,那么无论Ctid如何变化,索引依然会指向同一页,因此无需更新索引。当然这种想法有一定效果,但前提是新行可以放入同一页,为此似乎可以通过“机会型的(Opportunistic)

相关文档
最新文档