`
xinklabi
  • 浏览: 1586480 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

提高系统性能数据库设计的横向分割和纵向分割技术

 
阅读更多

本文介绍一些关于提高系统性能方面的知识,列分割,行分割,实例分割,物理存储分割等技术。

这篇主要讲解一下数据库的设计,因为一个好的数据结构,对整体系统的运作太重要了,请看看本文的内容。

提到程序性能,大家都知道时间复杂度的公式O(f(n))。在提高性能的这个迷局中,很多人都会想尽办法降低算法函数f的复杂度,或者是提高函数f的运行 速度。但是这些都是没有办法的办法,是舍本求末的办法。如果基数n巨大,这类方法都不会有很好的效果,因为问题的本身在于基数 n。千方百计减少基数n的数量才能获取质的提高。

如何才能达到降低基数n的效果呢?假设你一个杂货店的老板,你有一个杂志货柜。可是杂志的种类越来越多,货柜放不下了,这时你会怎么做?是延长货柜的长度 还是把杂志分类后,再增加一个货柜?我更愿意增加一个货柜,而不是无限制的延长原来的货柜。从杂货店货柜的启示,我觉得降低基数 n的数量的有效办法是分而治之:

一、 列分割

通常,随着开发过程的推进,系统中主表的字段数会越来越多。但是一个表的字段个数,是受数据库规范和性能限制的。例如,SQL Server 数据库中一个表最多可以包含1024个字段,而实际应用中一般不能超过246个字段,每行数据可以存储8060字节。(参见 http://msdn.microsoft.com/zh-cn/library/ms143432.aspx)

另外,对于大数据表来说,列的数量直接影响存取速度。数据的存储结构对行的存取更加优化,而不是列的存取。下面,提出几种分割存储列的情形。

1、  列数太多时。

我在2004年曾经做过一个失败的项目。在设计一个5年的采购计划表时,我把每个月的采购计划设计成列,这样表的列说增加了60 列,这张表最终达到120个列。这种设计导致的结果是,当表有100万条记录时,采购计划的计算要花费2.5小时。改进方案是把列改成行存储,增加一个计 划年份字段,这样,总的列数减少了近40%,表的行数增加了增加到了500万条,但是存取速度提高了很多,使采购计划的计算时间降低到0.5小时。

所以,我给出的意见是

l         表的列数最好不要超过80个

l         行存储比列存储的存取速度更快

2、  表中列的数据相对较大或不经常用到时

表中存在下面的字段时需要隔离出去:

l         图片对象

l         附件(文件等)

l         大量的备注信息

l         几乎不被查询的列

3、  表中的字段,可以按照业务逻辑分类时。

按照数据库的设计规范,一个同一个对象的属性应该属于一张表。可是,实际情况是,如果按照业务逻辑来划分表,能获得更好的性能。

二、行分割

对于记录行数巨大的表来说,最好的办法是按分类进行行分割,让数据存储在多个表内。自然界有一个放之四海皆准的“二八”定律,把它应用到数据上,就可以这样解释:在所有的数据中有20%的数据是可以满足我们80%的需求的。“ 

根据这个原理,通常有两种分类方法:

1、  按时间分类

如果数据的时效性很强,我们可以认为所有数据中,20%近期更新的数据能够满足业务80%的需求。例如,如果我们有5年的历史数据,那么就可以认为 其中在1年内(20%)更新过的数据(也可以是1年内创建的数据),能满足80%的业务需求;所以我们可以把这张表拆成两个表,分别存储20%和80%的 数据,以达到提高效率的目的。如果两张表仍然没有有效的提高性能,还可以利用“二八”定律再次分割。

实效性数据量和使用量关系:

2、  按索引分类

当数据的时效性不明显时,可以按索引分类数据。所谓索引可以是任何可以用于分类的字段,比如部门编号,员工编号,工艺编号等等。我们可以这样假设, 表中存储了所有零件的信息,但是在80%的情况下,1号生产车间只会存取自己部门用到的零件。于是,我们可以按照部门编号,把表分成多个。  

三、数据库实例分割

一般情况下,开发人员习惯于给每个项目配置一个数据库。但是实际上我们可以给一个应用程序更多的数据库实例。比如,在一个网络游戏服务器中,经常会 有账户数据库(用于认证)、存储数据库(用于存储状态)、日志数据库(用于存储监控状态)、地图数据库(用于存储地图状态)等等。类比到ERP系统中,我 们可以把许多项目共同的部分抽象出来,分别存储在不同的数据库实例中。例如,用户信息、部门信息、系统日志信息等可以定制成通用的数据库,每个软件项目都 可以去使用。

四、数据库实例物理部署的分割

表分割、数据库实例的分割,为物理部署带来了灵活性。例如,我们对物料表按照不同的品目,进行了表分割;又对这些表部署在了不同的数据库实例中;这 样我们就有条件把这些数据库实例分别部署在不同的物理数据库服务器上。这种部署给我们带来的好处是,物料计算时,我们可以指令所有的数据库服务器分布式计 算,大大提高运算速度。

分享到:
评论

相关推荐

    oracle大数据量的系统的数据库结构如何设计

    Oracle数据库在处理大数据量时,其结构设计至关重要,因为正确的设计可以显著提升系统性能和效率。以下是一些关键的设计策略: 1. **表的横向和纵向切分**:横向切分是将表按照数据的使用频率进行分离,将频繁查询...

    大数据量的系统的数据库结构如何设计

    在面对大数据量的系统设计时,数据库结构的设计成为至关重要的环节。有效的数据库设计不仅能够提升数据处理的速度,还能确保系统的稳定性和效率。以下是从给定文件的标题、描述、标签及部分内容中提炼出的关键知识点...

    如何提高数据库访问效率

    3. **表的分割**:可以通过纵向和横向分割表来减小表的尺寸,减少查询时的数据量。这有助于提高查询效率。 4. **硬件升级**:增加内存、提升CPU性能或增加CPU数量都是提高数据库性能的有效方法。确保虚拟内存设置...

    基于SOA技术架构的多并发异构业务系统中台技术设计.pdf

    为了应对多并发场景,SOA技术架构在设计时考虑了负载均衡的问题,比如通过Nginx集群实现基于会话的单schema多门店场景的横向扩展,以及应用服务器按功能分组、Docker集群按性能分配的纵向扩展。此外,使用如Memcache...

    SQL2000数据库优化及安全建议.doc

    2. 纵向、横向分割表:纵向、横向分割表可以减少表的尺寸,提高查询速度。 3. 升级硬件:升级硬件可以提高数据库性能。 4. 根据查询条件,建立索引:根据查询条件,建立索引可以提高查询速度。 5. 优化索引:优化...

    如何用SQLServer将数据库横向扩展-电脑资料.pdf

    在数据库管理领域,横向扩展(Scaleout)是指通过增加服务器的数量来提高系统处理能力,而SQL Server提供了多种方法来实现这一目标。以下是一些关键的知识点: 1. **SQL Azure**: 微软的Windows Azure云服务提供...

    SQL server 2000性能优化

    2. **表的分割**:通过纵向和横向分割表,可以减少表的尺寸,降低查询负担。使用`sp_spaceuse`存储过程可以检查表的使用空间。 3. **硬件升级**:提高服务器硬件性能,包括CPU、内存和网络速度,都是性能优化的重要...

    50种方法优化SQL Server数据库查询

    * 表设计:纵向、横向分割表,减少表的尺寸。 * 数据库 normalization:数据库 normalization可以减少数据冗余,提高查询性能。 其他方法 其他方法还包括: * 重建索引:使用DBCC REINDEX和DBCC INDEXDEFRAG重建...

    DB2分区数据库简介-DPF

    该特性属于DB2企业版的一部分,即Data Partitioning Feature (DPF),主要用于解决大型数据库的可扩展性和性能问题。在V9版本中,IBM进一步优化了这一特性,使其能够更好地服务于多种应用场景。 #### 二、为什么及...

    SQL数据库优化宝典

    3. **表的分割**:通过纵向(按列)和横向(按行)分割表,可以减小单个表的大小,从而提高查询效率。 4. **硬件升级**:增加CPU数量、提升内存容量、提高网络速度等都是硬件层面的优化,有助于提升整体性能。 5. ...

    50种方法巧妙优化你的SQLServer数据库

    2. **表的纵向和横向分割**:将大表拆分为多个小表,通过减少表的尺寸(sp_spaceuse)来提高查询效率。 3. **硬件升级**:升级服务器硬件,如增加CPU数量、提升内存容量和提高网络速度,都是提升数据库性能的有效手段...

    sqlserver数据库优化50法

    2) 纵向和横向分割表,减小表的大小,可以使用sp_spaceuse检查表占用空间。 3) 升级硬件,包括增加CPU数量,扩展内存至4-8GB,甚至更高,以满足更高的处理需求。 4) 创建和优化索引,根据查询条件设计访问策略,...

    SQLserver数据库优化[归类].pdf

    - 纵向和横向分割大表以减小表的尺寸。 - 升级硬件,例如增加内存,尤其是对于大型数据库。 - 根据查询条件创建和优化索引,但注意填充因子的设置。 - 使用字节数小的列创建索引,避免在有限值的字段上创建单一...

    可伸缩的系统技术方案

    在“可伸缩的系统技术方案”这一主题下,我们探讨了一系列旨在提高系统处理能力和适应性的技术策略与实践,下面将对这些知识点进行详细解析。 ### 垂直伸缩 垂直伸缩,又称纵向伸缩,是指通过增加单一服务器的硬件...

    超大型网站架构设计模型

    在网站架构设计中,需要考虑到系统的可扩展性、数据一致性、服务器分布和性能优化等多个关键因素。本文以社交网站Myspace的六次重构为例,详细介绍了其在用户数量增长过程中所面临的挑战及解决方案。 在Myspace最初...

    提高SQLSERVER性能方法大全.pdf

    然而,随着业务规模的不断扩大和技术需求的日益复杂化,如何有效地提高SQL Server的性能成为了一个亟待解决的问题。本文将全面介绍提升SQL Server性能的各种方法,涵盖索引优化、硬件升级、查询优化等多个方面。 ##...

    SQL Server数据库优化方案

    2. **表的分割**:通过纵向和横向分割表来减小表的尺寸,提高查询效率。 3. **硬件升级**:提升服务器硬件配置,如增加内存或CPU数量。 4. **创建和优化索引**:根据查询条件建立索引,注意填充因子的设置,避免对...

    sqlserver的大批量数据的处理以及数据库的优化

    2. **表的纵向和横向分割**:减少单个表的尺寸有助于提高性能。 3. **硬件升级**:增加 CPU 数量、内存容量等硬件资源可以直接提升系统性能。 4. **索引优化**:根据查询条件合理创建和优化索引可以极大提高查询速度...

Global site tag (gtag.js) - Google Analytics