JAVA天下

小小博客,包罗万有.
随笔 - 16, 文章 - 5, 评论 - 11, 引用 - 0
数据加载中……

数据库设计和数据库重构--小小心得

对于一个软件系统,数据库设计是整个系统最核心的部分。

但由于系统的需求是不断变化,使得在数据库设计变得十分重要而且困难。
在需求变化非常快情况下,有一部分人会认为要寻找一种设计方法以固定不变的表结构来适用不断变化需
求。这个观点是十分不明智和以现时的技术上暂时不能实现。对于软件功能程序在需求不断变法时候,为
了适应新的需求,不断重构系统的代码。以相同的道理,数据库设计也是程序设计的一部分。那么,数据
库一样可以使用重构来实现适用不断变化的软件系统。

本人认为数据库设计将会分为两个阶段进行:

第一阶段:数据库功能上的设计,由于在软件系统的数据库建立初期,数据库也只是以实现系统同能为目
标,对于系统性能优化将不会是数据库设计的重点。

·建立软件系统的比较通用功能基础表。在基础功能建立后,系统使用者会对系统部分功能作出评价和修
改要求。而功能基础表设计为减少日后修改和维护量,会尽量设计通用和冗杂结构。

·收集软件系统的一些基本信息。对于软件系统设计者来说,对软件系统的中每个表数据量,程序上SQL的
使用,系统的繁忙时段以及周期等都会有比较初步评估。但对于数据库设计者来说,这些估计都是只一些
推断并没有实际数据支持。为第二阶段数据库修改和维护,对软件系统作一些基本数据收集是必要的。

第二阶段为数据库系统能上优化,主要是通过第一阶段收集系统数据库一些信息来对系统做修改和优化
数据库具体优化方案需要以收集信息为基础来之际来进行指定。

下面本人总结下,数据库中一般有哪些方面需要进行优化。

1优化系统的SQL,具体有下面几点可以进行:
·对使用频繁的SQL以创建具体功能存储过程来代替,可以减少数据库系统对SQL编译和解析
·涉及到数据量大的表,尽量建立基本视图来完成数据查询工作
·在程序中尽量使用批量提交
(注:此方法在多数据更新和插入软件系统中 ,可以比较显著提高性能。
     在提高系统性能的同时,对程序的多线程控制技术上增加不少难度。
     若线程控制出现问题,会对数据库带来灾难性破坏)
·程序在使用SQL的时候,尽量使用少消耗数据库资源的运行方式

2 数据库表结构的
·在数据量大表中,尽量减少非必要字段索引建立。
(注: 索引建立多了查询速度是可以很有效的提高,但随之而来的是插入数据消耗的数据库资源也提高了很多)
·大表需要进行分区存储
(注:现在主流数据库都已经开始支持分区存储数据)
·在不影响系统的业务逻辑上,清理数据表中被废弃使用的字段
 (注:在清理废弃的字段需要关注的确定这些字段是否真的已经被废弃,程序真的不再启用)

3 修改有问题的SQL
·在实现功能时候,由于时间或者其他原因整个系统中肯定会有部分性能不优的SQL存在。第一阶段收集的数据,现在就可以有效的进行使用。通过这些数据我们可以很有效地把这些不优的SQL[甚至是很烂]找出来,一条一条进行调整
·在调整SQL外,还需要对数据库内存或者共享空间等等进行调整;使得数据库永远是处于最优的状态。

以上是本人一些小小心得,如果不对的地方欢迎指教。

      MK-TIANYI


MK-TIANYI

posted on 2008-11-25 21:53 天一 阅读(3113) 评论(3)  编辑  收藏 所属分类: 其他

评论

# re: 数据库设计和数据库重构--小小心得  回复  更多评论   

啥年代了,OO都来不及,还数据库,设计好OO模型,数据库只是存储工具而已。
2008-11-26 10:17 | 天好冷

# re: 数据库设计和数据库重构--小小心得  回复  更多评论   

首先,感谢“ 天好冷” 热情的评论。

以下是本人意见:
各人从事的岗位不同,关注的侧重点都会是有所不同。
在面对几亿或者几千万的数据量,再好的OO设计也会出现性能问题。
虽然,数据库只是存储工具。但如何使得程序通过更加优化路径向存储工具获取对应信息是由DBA关心和关注;也是DBA 不断努力提高数据库性能一个最基本标准。

所以,在万变需求中,DB 需要找一条合适道路来继续走下去。不能由于数据库关系而拖项目或者应用程序后腿。
2008-11-26 12:09 | 天一

# re: 数据库设计和数据库重构--小小心得  回复  更多评论   

@天好冷

两个不同的概念,OO能使结构清晰,高内聚等..这是从软件设计方面的考虑,数据库的优化在性能方面带来的优势,是OO不能代替的,各施其职。如果数据库只是存储数据的工具,那为什么大家都要用数据库,而不用文本文件?
2010-09-08 23:24 | Edwin.Koo

只有注册用户登录后才能发表评论。


网站导航: