`
lexinquan
  • 浏览: 47199 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库设计经验之--数据库应用检视

阅读更多
1、数据库索引创建检查。包括:(a)索引字段应为差异性较大、长度较小的类型,枚举类型字段不要建索引;(b)防止创建包含过多字段的复合索引;(c)索引字段的值不要出现过多空值或重复值。

2、数据库索引使用检查。包括:(a)对表的数据操作(尤其是对大表的查询)是否用到了合适的索引;(b)对于插入型的实时表,保证新记录插入到索引顺序的最后面;(c)如果有复合索引,要按建立索引字段的顺序(取前面部分或全部字段)做查询。

3、代码SQL按需读写检查。仅返回需要的数据,减少磁盘及网络IO。例如:大表访问中不要用 select * ,要指定具体的字段,返回结果集时要加上合适的 where 限定条件,减小返回结果集的大小。

4、表映射类检查。包括:(a)对表映射类的公共方法,必须抽象出公共基类和相关接口,便于日后对公共方法和辅助方法的添加和修订;(b)对表映射类中的数据字段的Get和Set方法,必须匹配该值与其对应的数据表字段值的对应关系,如:字段值是否为NULL;字段值是否为空字符;(c)将表映射类对象转换为XML字符串的方法,或将结果集转化为表映射类对象的方法,需要区分字段值是否被初始化,是否为NULL值或空字符,反之亦然(例如:数据库中,Integer类型数值可能为NULL,VARCHAR类型数据值可能为NULL或””)。

5、关键模块禁止使用自动代码。使用自动代码必须注意的问题包括:(a)不要使用自动代码进行批量查询(查询字段、查询条件必须手工编写);(b)不要使用自动代码进行事务处理和批处理;(c)原则上自动代码仅允许提供明确按主键定位的方法;(d)原则上仅允许在非关键的信息维护表的处理中使用自动代码(例如:客户信息的维护模块,数据表字段多,业务处理代码简单,与数据表字段一一对应)。

6、连接表查询优化检查。包括:(a)连接表数量不宜超过2个;(b)子查询结果较小的表应作为连接查询主表;(c)超过两个的连接查询,若数据量巨大,不宜使用SQL或存储过程直接查询,可通过业务处理代码实现子查询结果的合并;

7、批处理SQL操作优化检查。包括:(a)对于批量的重复性的数据表操作,考虑首先查询出批量SQL所需使用的结果集,然后使用AddBatch()添加操作SQL,最后ExecuteBatch();
例如:(Select 1条记录 + Insert 1条记录)*100次,应优化为:Select 100条记录 + AddBatch(Insert 1条记录) *100+ExecuteBatch();(b)对于批量数据转移操作,如当前表转历史表,考虑使用Insert into …Select from …来实现。

8、潜在超大事务检查。包括:(a)优化事务中的操作,尽量避免大事务的产生;(b)把大事务拆分成若干小事务分别处理;(c)尽量使用共享锁,注意及时提交事务,释放锁和事务日志;(d)设置数据库配置参数,当事务执行时间超过阀值时,自动回滚事务并释放锁定的资源,同时注意察看数据库系统日志中相关事件记录。

9、数据库死锁检查。减小死锁发生机率,包括:(a)用共享锁代替排它锁;(b)减小锁的粒度;(c)不同进程按同样的顺序申请资源。

10、分布事务处理检查。若业务处理的控制相对简单,则无需引入事务管理器等复杂的解决方案,可考虑采用经典的提交确认方法来解决:(a)插入一条分布式事务记录,“提交状态”为“未确定”);(b)提交子事务1;(c)提交子事务2;(d)修改“提交状态”为“已确定”。
对于提交失败的分布式事务,由逻辑代码自行判断执行回滚or重新提交;

11、日志完整性检查。包括:(a)日志应根据阅读者的不同分类,如:给业务管理人员用的用户操作日志,给系统管理员看的系统操作日志,给开发人员看的系统异常日志,等等 (b)日志的内容应比较完善能反映问题,如:时间,用户ID,系统模块ID,日志描述,错误编码,错误级别,错误描述;(c)日志的载体可分为文本日志、数据库日志,对数据库可能异常的地方应同时记录文件日志;

12、非法全局性实例变量检查。在数据库操作的代码中应:(a) 非特别需要,避免使用全局变量;(b)避免通过全局变量传递参数;(c)避免将局部变量设为全局变量;

13、静态变量检查。在数据库操作的代码中应:(a)非特别需要,避免使用过多的静态变量;(b)避免静态变量与线程并发处理相关;(c)避免公开静态变量供外部使用;

14、超大内存对象检查。包括:(a)对于大内存对象的运算程序,应该控制其线程并发数;(2)测试在最大并发量下的进程内存占用情况;(c)大内存对象可考虑存储于BLOB或CLOB字段中,存储前考虑对其进行压缩运算;(d)存储大内存对象的数据表应独立建表,将其作为相关业务数据表的子表;

15、资源未释放检查。跟踪每一处资源创建的语句,保证其都有对应的资源释放语句,防止遗漏。

16、报表及统计类程序与实时处理程序分离检查。包括:(a)对于每日、每周、每月、每季度、每半年、每年固定所需的统计报表,可制定批处理执行计划,在非繁忙时段(如凌晨)进行报表运算;(b)对于临时提交的查询报表请求,避免对其进行实时运算,可将该任务提交给批处理任务管理模块,由程序根据其优先级和等待时间等在空闲时间进行,完成批处理任务后向相关人员发送通知;(c)不允许由业务操作人员随时发起报表及统计操作,更不允许由业务操作人员随意设置查询条件进行查询、统计,而是应由程序事先做好报表及统计功能,由业务操作人员触发或在空闲时间在后台统计并生成结果文件,业务操作人员只能随时调阅生成的结果文件。

分享到:
评论

相关推荐

    《ASP.NET与数据库程序设计》

    第五章结合数据库基本设计 5-1结合数据库之前 5-1-1确定平台及数据库格式 5-1-2前端与后端的差别 5-2使用Access及SQL的重点 5-2-1系统规划概述 5-2-1使用Access的注意事项 5-2-2使用SQL ...

    Delphi7.完美经典

    第16章 Delphi数据库程序设计——使用BDE组件 16-1 TDataSet组件 16-1-1 TDataSet组件常用的属性 16-1-2 TDataSet组件常用的方法 16-1-3 TDataSet组件常用的事件 16-2 TTable组件 16-2-1 TTable组件常用的...

    BuyGrand:用于显示和购买产品的Java-.NET-Python-MSSQL购物车应用程序

    :white_medium_star: 在Github上为“ Star BuyGrand”提供星级这很有帮助。...管理员检视 ASP.NET-用于UI和后端连接 MSSQL-作为关系数据库管理系统 RDLC-报告定义语言客户端用于应用程序中的报告 Web服务-Asp.net

    Aqua Data Studio 8.0.25 part 4

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    主流工作流对比

    - **可监控内容**: 对流程引擎运行期间的实例提供管理及监控的Web控制台,包括部署管理、流程定义管理、数据库表检视等功能。 - **优点**: - 继承了JBPM4的优点,支持最新的BPMN2.0规范。 - 实现了流程的可视化。 ...

    Nero教程_chs

    - **定义与应用:** DDCD 是一种特殊的 CD 格式,主要用于存储数字音频。 - **1.4.3 DVD** - **支持类型:** Nero 支持 DVD+R、DVD+RW、DVD-R、DVD-RW 等多种格式。 - **1.4.4 HD-Burn** - **高密度烧录技术:*...

    轻松搞定SQL Server 2000程序设计

    #### 四、数据库与表的设计 - **数据库创建与管理**:通过Enterprise Manager创建数据库并设置参数。 - **表结构设计**: - 定义表结构:列名、数据类型、主键、外键等。 - 数据完整性约束:确保数据的一致性和...

    ASP源码—蓝色风格的职业技术学校网站源码 v1.0.zip

    - Application:共享应用程序级数据,所有用户都可以访问。 - Server:提供服务器相关功能,如URL转译、执行服务器端方法等。 4. ASP数据库连接: - ADO(ActiveX Data Objects)是ASP常用的数据库访问组件,...

    人工智能在审计中应用--基于生态资产监盘.pdf

    在探讨人工智能在审计中应用的过程中,主要涉及以下几个方面的知识点: 一、人工智能在审计中的应用现状与原因 人工智能技术正在逐渐渗透到审计行业中,其在审计中的应用主要基于以下几个方面的考虑: 1. 提高...

    Delphi7.完美经典.part1

    对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。 实例配有光盘,快速引导您踏入Delphi程序开发领域。 适合想要深入了解Delphi程序设计的专业设计师,对...

    digitaldemo

    这个项目可能涵盖了从数据库设计到前端交互的全过程,为学习者提供了实战经验。 【描述】"学校教学使用的javaweb文件,功能大都已经实现",这表明这个"digitaldemo"项目是教育环境下的一个实例,它已经实现了大部分...

    delphi for php中文教程

    - **数据检视器**:提供了一个交互式的界面来查看和编辑数据。 - **窗体设计器**:提供了一个可视化的界面来设计PHP应用的用户界面。 - **HTML设计器**:用于设计HTML页面。 - **对接工具窗口**:允许用户根据...

    Aqua Data Studio 9.0.16 part 1

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    Aqua Data Studio 9.0.16 part 2

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    星光贴吧系统源码.7z

    - 检视模板和样式:理解页面布局和样式设计。 - 跟踪错误处理和日志记录:了解系统如何处理异常和记录运行情况。 总之,"星光贴吧系统源码.7z"提供了深入学习Web开发、论坛系统构建和源码分析的宝贵机会。通过这个...

    Aqua Data Studio 9.0.16 x64 Portable part 1

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    Aqua Data Studio 9.0.16 Portable part 1

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    Aqua Data Studio 9.0.16 x64 part 1

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

    Aqua Data Studio 9.0.16 x64 part 2

    比较工具:Aqua Data Studio中的比较工具套件让您能够轻松地检视RDBMS服务器数据库和数据库任务架构的区别。您还能以进一步比较档案的目录架构来控制档案及完整修订的区别。 版本控制:整合版本控制为Subversion和...

Global site tag (gtag.js) - Google Analytics