一、数据库的设计
当然首先要懂得数据库的基本理论。在设计E-R模型之前,首先要进行深入的需求分析,需求了解的越透彻,数据模型才能越稳定。
在E-R模型向关系模型转换时,既要深入理解规范化理论与转换原则,也要知道,并不是范式越高越好,为了加快查询速度可以适度加入冗余。非BCNF范式的关系虽然理论上可能会发生更新异常与冗余,但如果实际中该关系并不进行更新或更新的频度很小,其造成的负面影响也将十分有限。软件与数据库设计也是一门平衡的技术,范式究竟要达到什么程度,也要看具体的需求及平衡各方面的利弊,而没有一定之规。
在物理设计方面,要考虑索引列及索引方法的选择,将可能同时频繁访问的数据在物理位置上分开,预计一定时期内数据的增长情况并预留出空间。需要强调(因为有不少朋友并没有意识到)的是索引不是越多越好,增加索引要慎重、要有充分的理由,增加索引会增加DML(增、删、改)操作的开销、会消耗更多的空间、还可能使原先好的查询执行计划变坏。
有关历史数据的保留、清理与转储问题,应尽早了解用户这方面的需求,并制订合理的方案,否则可能给日后数据库的维护带来麻烦;最好能跟建设数据仓库项目结合起来考虑。
另外,一定要利用成熟的设计工具(如IBM Rational Rose、PowerDesigner等等),这些工具使你的设计更规范、清晰、易于维护,还能产生各种报表供不同层面的人员查阅。
二、应用软件开发
关于这方面,我首先不赞成“一味强调软件的数据库独立性”,因为要达到该目的不仅非常困难而且成本很高。当然这也不是绝对的,也需要
具体问题具体分析。关于这方面的详细论述,大家可以参看Thomas Kyte先生所著《Effective Oracle by Design》。
另外,在编码调试时,开发环境应模拟真实的数据量,这样可以使许多性能问题提前暴露,有助于开发人员早期认识到性能的重要性。
在对敏感数据(如用户口令)加密算法的选择上,不要相信数据经MD5摘要算法处理后就是安全的,现在网络上已出现相关的海量数据库,尽量穷举出各字符串对应的MD5摘要值并提供反向查询。如果口令设置得比较简单(如4位或6位全数字的口令),其被破解的可能性非常大。
三、测试
应组织专门的测试队伍对系统进行功能与性能方面的测试。
应牢记,测试的目的是为了发现软件当中的错误,而不是证明软件的正确性。
应针对不同应用建立其相应的性能测试环境,引入相关测试工具或根据实际情况自行开发一些测试驱动程序,检验系统对负荷的承载能力。
四、数据库项目实施
系统设备选型、规划时,不应只考虑一时的购买成本,还应考虑长远的维护成本。很多大型企业或机构在进行信息系统建设时,建设者与维护者分属不同的部门,有的建设部门往往孤立地看待每个项目,只考虑一时的购买成本,造成各类设备五花八门、平台异构情况极其复杂,不仅增大了日常维护的成本,还给日后各系统的集成与数据共享造成了很多麻烦。
系统上线前,要充分重视原系统数据的转换与导入,做好细致的审核工作,确保数据的准确性。有条件的话建议进行新旧系统的并行测试。
五、数据库运行维护
建立完善的备份/恢复策略,并定期测试,确保系统发生故障时能确实恢复成功;备份与原始数据存放在不同的物理设备上。建立完善的数据库用户口令管理机制,规定口令的复杂度、有效期限等。在满足需求的前提下,尽量减少数据库用户的各类权限。每天检查数据库各种日志,定期进行阶段性的系统健康检查,尽早发现潜在的问题。实时监控数据库的运行状况,及时发现异常并处理。任何配置或数据结构的改动都要先在测试库测试成功后再应用到生产库,并准备应急恢复方案。根据运行状况,有计划地对数据库进行重组织。
六、其它
参加数据库应用项目的人员,要有很好的沟通能力与团队精神,这样才能保证项目的顺利完成;还要不断地学习相关的新知识、新技术(如存储、网络、安全等),有选择地应用到系统中去。
最后强调一点“三分技术,七分管理,十二分的数据”可能被引用得有些俗了,但它确实是有关数据库应用经验的精辟概括与总结,对于大多数的数据库应用项目,技术方面往往不是决定项目成败最为关键的因素,而数据是否准确、管理是否规范与合理,才是更为关键的因素。
应用难点技巧
我想在这里还是有必要强调一下,关于数据库应用方面的学习,首先要重视的还是对基本理论、基本概念的理解,因为只有这样,在碰到问题的时候,才能比较容易地分析出问题的本质,并尽快找出问题的答案,自己找出解决问题的技巧。
而许多在网上或书上、杂志出现的所谓技巧,往往都具有片面性或时间性,如果你不能认识到他们成立的条件,往往会备误导。
比如你很可能听说过“查询中尽量不要用or,因为这样不能用到索引”,也许这个结论对多年前的某个数据库版本是成立的,某个人就把他作为技巧记录并从此传承下来了,但现在主要的数据库优化引擎经过多年的发展都没有这样的限制了,再死抱住这样的技巧也就不对了。
再有关于子查询,有的人说不要用not in而有的人说不要用not exists,他们的结论可能在某些情况下都是正确的,但是都不具备普遍性。所以还是那句话,具体问题具体分析。
以上是我对于技巧的一些看法,也可以算是我贡献给大家的“不是技巧的技巧”。
下面,我也总结几条常见问题的处理技巧,供大家参考:
1、关于Oracle字符集的设置,历来是各技术论坛经常被讨论的问题,但许多讨论都不彻底或有明显的错误,致使许多朋友在应用过程中出现乱码的烦恼。关于这方面的问题,大家可以参考《Oracle数据库字符集问题解析》一文(www.itpub.net/276524.html),其中最主要的请记住两点:(1)在数据库端:选择需要的字符集(通过create database中的CHARACTER SET与NATIONAL CHARACTER SET子句指定);(2)在客户端:设置操作系统实际使用的字符集(通过环境变量NLS_LANG设置)。
2、Oracle 9i以来引入了“闪回”(flash back)功能,能够查询到不久前的时间点各表的数据情况,这对恢复人为差错造成的数据丢失很有用,不用使用备份及归档日志进行恢复,只要一个简单SQL即可恢复。如误删了某表的数据,可用形如下面的SQL进行恢复:
insert into tab1
select * from tab1 as of timestamp to_timestamp('200501010101','yyyymmddhh24mi')
3、对于WEB查询结果集比较大,需要分页并排序显示的情况,在Oracle中可以采用形如下面的SQL:
select *
from ( select a.*, rownum r
from ( select *
from t
where x = :host_variable
order by y ) a
where rownum < :HigherBound )
where r > :LowerBound
这样Oracle在决定执行计划时,可以不对整个结果集进行排序,而只需保证显示的当前页及之前的数据排序准确即可,系统效率得以提升。
4、对于使用Oracle 数据库,但没有用到绑定变量的一些OLTP应用,可以考虑设置cursor_sharing参数强制使用绑定变量,我过去曾经做过一个测试,对于某个应用,强制使用绑定变量后在相同的负载情况下系统CPU使用率下降30%以上,当然也要注意使用该设置后一些大的统计查询SQL的执行计划有可能受到负面影响。所以,最好在开发阶段就使用绑定变量。
5、对于Oracle数据库经常出现的ora 4031(unable to allocate %s bytes of shared memory)错误,首先应确定是否为Oracle的BUG所引起,尤其是ORACLE 8.1.7.0版本,存在内存泄露(memory leak)(bug no:1397603)的问题,解决的办法一是暂时设置内部参数_db_handles_cached =0,最终的解决方法是将ORACLE升级到8.1.7.2或更高的版本。如果确认不是Oracle的BUG,可以考虑利用oracle提供的包dbms_shared_pool将一些大的对象固定在共享内存中,或者加大共享内存。
6、如果不能修改程序的源代码,而想调整或固定某些SQL的执行计划,可以利用Oracle提供的Stored Outline功能。
7、对于Oracle 数据库,使用本地管理的表空间(而不使用传统的字典管理的表空间),使用自动段空间管理(ASSM,Automatic Segment Space Management)功能,并让Oracle自行管理回滚段,大多数情况下都会取得比较好的效果。
8、对于提高Oracle 数据库的高可用性,建议实施Oracle Datagard中的physical standby,它所增加的成本与复杂性有限,但却极大地提高系统的可用性;而对于RAC,我认为是否实施应该谨慎,即使决定要实施也应该做非常充分的准备工作而不能盲目实施。我编写了一篇名为《不“为”浮云遮望眼——RAC可扩展性与高可用性思考》的文章,专门讨论了有关RAC的一些问题,如果有兴趣的朋友可以找我所要,共同探讨。
9、如果很多人突然向你反映数据库很慢,最好先问清楚系统的配置或应用做了哪些改变,往往正是这些改变导致了系统性能的突变。
10、遇到难题,可以先到一些著名的技术论坛搜索相关的主题,多数情况下你会找到问题的答案;如果没有找到,你可以发新贴咨询,听听大家的建议,往往会启发你的思路帮助你解决问题。
有必要再次强调,上述有些技巧可能会随着数据库版本的变化及技术的发展而不再有效,所以还是请大家认真分析具体的应用环境并做充分的测试后,再加以应用。
转自
http://tech.sina.com.cn/other/2006-07-26/10241055917.shtml
分享到:
相关推荐
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
深圳建设施工项目安全生产奖惩管理制度
离散数学课后题答案+sdut往年试卷+复习提纲资料
04741计算机网络原理 2018(尚德).pdf 13年试题(2套).pdf 2015年10月自考计算机网络原理04741试题及答案解析.docx 2021年4月自考04741计算机网络原理真题及答案.docx 2021年4月自考04741计算机网络原理试卷.bak.docx 计算机网络原理 课后题答案 全 李全龙版 自考04741.zip.zip 计算机网络原理课件 计算机网络原理课件.rar
C++实现rpc,全程手写
前端拿到的列表数据里id都一样的处理办法.txt
最新仿720云全景制作源码|krpano仿720云全景网站源码(新增微信支付+打赏+场景红包等)是一款基于php+mysql开发制作的全景在线制作网站源码,包含全景图片,全景视频等。数据存储全部存于OSS云端或本地,源码完全开源可自行二次开发。 环境要求:PHP5.5.X+MYSQL5.6.X+伪静态 熟悉linux系统推荐使用LAMP,web服务器最好使用apache,不要使用nginx(发布大全景图需要时间可能需要20多分钟, nginx超时机制不好控制)。 Windows系统推荐使用phpstudy。Liunx推荐宝塔控制面板apache 前端为HTML5开发,自适应手机版! 1、支持VR虚拟现实、全景视频、环物全景、说一说、点赞评论、重力感应、智能视频嵌入、场景切换热点、加载进度条、 地图导航、光晕flash特效、物体全景嵌入、场景自播、场景解说、雷达导航等业内前沿功能。 2、支持windows、Linux、Mac、安卓、IOS等几乎所有的系统观看。支持CDN图片转存,极大的减轻的服务器流量费用。 3、支持用户权限分配。方便会员制收费。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
环境监测系统源代码全套技术资料.zip
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型,控制有比较好的效果,附参考说明。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
02142数据结构导论历年真题及答案(2012-2018共13套).rar 02331数据结构历年真题共267页2009.10-2019.4.rar 24数据结构201704_8.pdf 25数据结构201710_10.pdf 26数据结构201804_11.pdf 27数据结构201810_9.pdf 全国2021年04月高等教育自学考试02331数据结构试题及答案.docx 全国2022年04月高等教育自学考试02331数据结构试题及答案.docx 数据结构-课件.rar 第l六讲.ppt 第一讲.ppt 第七讲.ppt 第三讲.ppt 第九讲.ppt 第二讲.ppt 第五讲.ppt 第八讲.ppt 第四讲.ppt
验收确认单表格.docx
内存搜索工具(易).rar
饮食管理系统项目源代码全套技术资料.zip
【项目简介】 代码主干网络采用Swin-Transformer 家族系列,包括【tiny、small、base】三种模型。pretrained和freeze_layers参数为是否采用官方预训练模型和是否仅训练分类头。为了做对比消融试验,优化器采用了Adam和SGD、AdamW三种。损失函数采用多类别的交叉熵、学习率优化策略采用cos余弦退火算法 【评估网络】 评估的指标采用loss和准确率(accuracy),分别会在训练集和验证集上进行评估、输出、绘制曲线图像。同时会在训练集、验证集进行一系列评估,包含混淆矩阵、recall、precision、F1 score等等曲线图像,以及recall、precision、F1 score、特异度的输出信息等等。 【具体各类别的指标在json文件中查看】 【如果想要更换数据集训练,参考readme文件】 【本项目为8种番茄病害图片(约4k张数据),包含数据集和标签,可以一键运行】
windows电脑下载OpenHarmony鸿蒙命令行工具hdc_std。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
本项目可以作为小程序毕设项目,主要功能为音乐播放器,主要功能是:可以播放歌曲(采用mp3网络连接实现)、专辑封面播放时可以旋转,能够实现开始和暂停播放,可以点击下一首歌曲,主页面实现动态轮播图
考研学习分享功能的描述可以涵盖以下几个主要模块,旨在为考研学生提供一个互动、资源共享、经验交流的平台: 1. 用户注册与个人信息管理 学生可以通过邮箱或手机号注册账户,填写个人信息,如姓名、专业、目标院校等。 用户可设置学习目标和进度,方便记录自己的学习历程。 2. 学习资料共享 用户可以上传、下载考研相关学习资料,如教材、真题、笔记、复习计划等。 提供文件分类功能,按学科、院校、难度等进行整理,方便用户查找。 支持多种文件格式,如PDF、Word、Excel、图片等。 3. 复习经验分享 学生可以发布自己的复习经验文章,分享复习方法、备考心得、时间管理技巧等。 提供文章评论和互动功能,其他学生可以点赞、评论、提问,促进经验交流。 设置专栏或专题,帮助学生快速找到自己感兴趣的复习内容。 4. 考研小组与社交功能 学生可以创建或加入学习小组,组内成员可共享资料、讨论问题、互相鼓励。 提供私信、群聊功能,方便学员在小组内进行实时讨论和交流。 支持设置小组学习目标和定期检查进度,增加学习动力。 5. 在线课程与讲座 提供考研各科目(如英语、数学、政治等)的在线课程资源,用户可以报名参加。