7.数据存储层设计

数据库架构设计中从性能考虑常用的四种方法:分布数据、数据拆分、读写分离及数据缓存。

  1. 合理选择数据存储方案

1.1直接外观存储

Direct Attached Storage,DAS存储方式的服务器结构如同PC机的架构(即由运算器、控制器、存储器、输入装置和输出装置组成),外部的数据存储设备都可以直接挂接在服务器内部的总线上,数据存储设备是整个服务器结构的一部分,同样服务器也担负着整个网络的数据存储职责。

1.2网络附加存储

网络附加存储(Network attached storage,NAS)方式则全面改进了以前低效的DAS存储方式,它采用的是独立的pc服务器,单独为网络数据存储而开发的一种文件服务器。

1.3存储域网络

存储域网络(storage area network,SAN),它没有把所有的存储设备集中安装在一个专门的NAS服务器上,而是将这些存储设备单独通过光纤交换机链接起来,形成了一个光纤通道的网络,然后再将这个网络与企业现有的局域网连接。在此方案中,起着核心作用的当然是光纤交换机了,它的支撑技术就是Fibre Channel协议,这是ANSI为网络和通道I/O接口建立的一个标准集成,支持HIPPI\IPI\SCSI\IP\ATM等多种高级协议。

1.4选择合理的数据存储方案

1.选择DAS方案

Das直连式存储依赖于服务器主机操作系统进行数据的I/O读写和存储维护管理,数据的备份和恢复会要求占用服务器主机资源,数据流需要回流到主机后再到服务器连接着的磁带机中,数据备份通常会占用服务器20%-30%。

  1. 选择NAS方案

Nas作为一个网络附加的存储设备,它内置了优化的独立存储操作系统,可以有效且紧密的释放系统总线资源,全力支持i/o存储,同时NAS设备会集成本地的备份软件,所以可以不经过服务器就将NAS设备中的重要数据数据进行本地备份,而且NAS设备提供了硬盘RAID、冗余的电源和风扇,以及冗余的控制器,可以保证NAS的稳定应用。

Nas设备主要是用来实现在不同操作系统平台下文件共享应用的,与传统的服务器或DAS存储设备相比,基于局域网而设计的,它按照传统的TCP/IP协议进行通信,且面向消息传递,以文件的I/O方式进行数据传输。在LAN环境下,NAS已经完全可以实现异构平台之间的数据级共享了,比如windowsnt、linux、unix等平台的共享。基于这种种原因,对于企业来说NAS存储方案使用和维护的成本相对较低,完全可以由现有的网管员担当相关的管理职责。

  1. 选择SAN方案

San通常是通过一个单独的基于光纤通道的SAN网络把存储设备及服务器连接起来的,因此当有海量数据的存取需求时,数据完全可以通过SAN网络在相关服务器和后台的存储设备之间高速传输,对于LAN带宽的占用几乎为0,而且服务器可以访问san上的任何一个存储设备,提高了数据的可用性。

SAN将企业的存储和服务器平台分开,可以实现24*7小时不间断的集中管理,在这个平台上,还可以应用一套统一的灾难恢复解决方案,同时可以经济高效的扩展存储环境。因此SAN非常适合非线性编辑、服务器集群、远程灾难恢复、因特网数据服务等多个领域。

2.数据库架构的设计

2.1分布数据

分布数据就是根据某些条件把数据分割成多块,然后放到不同的物理位置。所谓的物理位置是指地理位置:物理主机和物理磁盘。

分布数据的方法有以下几种:

按照国家进行划分。

按照城市进行划分。

按照数据中心进行划分。

按照数据集合进行划分。

2.2数据拆分

数据拆分不是一个某个特定数据库软件所附属的功能,而是在具体技术细节上的抽象处理,它是垂直拆分,水平扩展的解决方案,其主要目的是突破单节点数据库服务器的I/0能力限制,解决数据库的扩展性问题。

  1. 垂直拆分

也叫做行拆分,其实就是把组成一行的多个列分开,放到不同的表中,这些表具有不同的结构,拆分后的每个表中所含的列更少,也就是列的重新分布。垂直拆分也就是"业务拆分"。

  1. 水平拆分

日积月累,数据库表中的数据越来越多,当表记录达到千万甚至亿级别时,数据库表的访问效率将会明显下降,导致外层应用的访问效率非常差,访问时间急剧上升,用户体验下降。如果是表数据太大的原因导致访问速度变慢,一般情况下当访问与此表相关的业务时速度会很慢,而访问与此表无关的业务时速度会很快。

水平拆分其实就是把一个表分成几个表,其原理是根据现有的表克隆出新表,这些表具有相同的列,只是这些表存放不同的数据而已,而且存放的数据相对会少一些。

水平拆分有以下特点:

拆分出来的每一个表结构和原来数据库的表结构完全相同。

拆分出来的每一个表存放着不同的数据。

将需要拆分的表拆分到多个库中,而静态表则同步到各个拆分库中。在系统的表结构中,一般会分动态表(数据变化很大,数据量也可能很大的表)和静态表(数据变化很小的表,一般来说都是基础表,数据量也不会很大),基础的静态表都放在一个公共库中,而动态表则根据标准拆分到分库中,拆分完成后,维护基础数据公共库,然后将其同步到分库中,在分库中维护动态表,在查询时动态表可以与分库中静态表关联查询。

拆分范围的划分,比如将1万-100万条数据放在一个表中,然后将101万-200万条数据放在另外一个表中。也可以按照时间顺序来拆分,比如一年的数据归到一张表中;还可以按照地域范围来分,比如按照地市来分,每个或多个地市一个库等。这是按照具体情况来划分的,一般情况下,对带有较浓分割标志的数据库表,可以根据分割标志来分割,对没有较浓分割标志的数据库表,则只能按照最笨的方法来拆分,有时候为了增加拆分质量,还可以先根据一个分割标志来拆分,然后根据另一个分割标志来进行分区。

数据库表水平拆分后,访问数据库表的sql必须要带上分割标志来确定目标数据库表,如果要对多个拆分数据表进行查询,则需要通过多次访问数据库表来完成,同时要在应用层面将数据合并。

2.3读写分离

读写分离架构利用了数据库的复制技术,它将读和写分布在不同的处理节点上,从而达到可用性和扩展性的目的。

2.4数据缓存

2.4.1缓存什么数据

将公共的、使用频繁的数据缓存起来。在初期,可以对应用中的核心功能所使用的公共数据进行缓存,在一个用户量比较大火活跃用户比较多的系统中,可以为活跃用户缓存数据。

2.4.2数据缓存多长时间

在缓存世界中,有一个"5分钟法则":如果一条记录被频繁的访问,就应该放在内存中,否则,就应该放在硬盘上按需访问,这个临界点就是5分钟。

2.4.3如果缓存在数据库中已经被修改,如何处理

很多的缓存api是有通知机制的,也可以自己编写轮询机制。

2.4.4为了节省内存,如何在多台服务器之间共享缓存数据

分布式缓存技术。

  1. 数据库设计

在创建数据库之前,首先要创建一个数据库计划。这个计划的目的就是列出系统或客户对数据库的要求,减少数据库实现时的风险。

一般来说,创建数据库计划的核心步骤如下:

理解系统需求

列出系统中主要的实体对象

表明系统中核心实体之间的关系

列出系统在相关特性上的要求,例如稳定性、安全性、性能等方面。

3.1逻辑数据库设计

逻辑设计主要是建立系统中核心实体之间的关系。一般使用ER图来描述实体之间的关系。

实体关系确定之后,我们可以在此基础上进一步分析系统中的核心业务,并进行领域建模。

3.2物理数据库设计

1.反范式的考虑

范式是数据库设计的指导理论,但不是"金科玉律",也不是强制性必须遵循的,一切还是要看实际情况。范式越高,设计出来的表就越多,关系可能就越复杂,虽然增加了关联性,但是性能却不一定很好。

最明显的打破范式的设计方法就是冗余法,以空间换取时间,把数据冗余在多个表中,当查询时可以减少或避免表之间的关联。

2.数据存储考虑

数据等正确存储至关重要。要确保数据的功能被正确的存储,也就是说在存储时要选择正确的数据类型及数据的大小,避免出现格式错误和数据截断的问题。

  1. 表设计的考虑

还要考虑是否需要分区。分区就是将数据表划分为不同的几个区域,然后分别在不同的区域中进行读写操作。

例如:

在sqlserver中,每个数据库都对应着某些文件组,在采用分区之后,每个分区就会在不同的文件组上,其好处如下所示:

增强了可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用。

维护方便:如果表的某个分区出现故障,需要修复数据时,只修复该分区即可。

均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。

改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高了检索速度。

posted @ 2016-06-10 14:23  常想一二,不思八九  阅读(2945)  评论(0编辑  收藏  举报