查询
查询是数据访问层中主要的操作。他们是将应用的请求翻译为对数据库的CRUD行为。因为查询如此关键,应该优化它们,来最大化数据库的性能。可以参考下面的设计原则:
- 使用参数化的SQL查询,可以减少安全问题,减少SQL注入攻击。不要使用用户输入的内容进行字符串的拼接。
- 考虑使用对象创建查询。例如:实现查询对象模式,或者使用ADO.NET支持的参数化查询。考虑为查询的执行优化数据库的数据结构。
- 在动态构建SQL查询的时候,避免混入业务逻辑,使用逻辑生成SQL语句,会导致难以维护和调试。
存储过程
在过去,和动态SQL相比,存储过程代表性能的提高。但是,现在的数据库引擎,存储过程和动态的参数化的SQL执行的性能差不多。考虑使用存储过程的主要因素是,抽象,可维护性,和你的环境。出于安全和性能考虑,使用存储过程,避免在存储过程中动态拼接SQL。参数会影响对缓存的执行计划的使用,而不是重新建立一个执行计划。当参数类型和数量改变的时候,会产生新的执行计划,会降低性能。可以参考下面的设计原则:
- 使用特定类型的参数作为存储过程的输入参数,返回单个值。考虑使用xml格式传递列表。不要为了显示,而在存储过程中格式化数据。相反,返回适当的数据,在表现层进行格式化。
- 如果非要在存储过程中动态生成SQL,使用参数或者是数据库变量。但是要记住,在存储过程中动态创建SQL会影响性能、安全和可维护性。
- 避免在处理数据的时候建立临时表。但是,如果非要使用临时表,考虑将他们建立在内存中,而不是硬盘上。
- 实现适当的异常处理,给应用返回可以处理的代码。
存储过程 VS. 动态SQL
这里所说的动态SQL,指的是在代码中动态生成SQL,而不是说在存储过程中动态生成SQL。在选择两者的时候,你一定要考虑抽象的需求,可维护性,和环境的限制。另外,两者的选择还要考虑开发者的偏好和技术特点。
使用存储过程的主要优点是,对于数据库,提供了一个抽象层,当数据库改变的时候,最小化对于代码的影响。安全很容易实现和管理,因为你可以限制对存储过程的访问,使用大多数数据库都提供的安全特性可以实现细粒度的管理。
使用动态SQL的主要优点是,他们比存储过程更灵活,可以快速开发。很多ORM框架都会给你动态生成查询语句,可以减少开发的代码编写量。
选择的时候,可以参考下面的设计原则:
- 如果你的应用很小,单一的客户端,很少的业务逻辑,动态SQL通常是较好的选择。
- 如果你的应用较大,有多个客户端操作,需要考虑抽象需求。考虑使用存储过程,或者是用ORM工具提供的查询。
- 对于数据密集的操作,存储过程允许你更加贴近数据,可以提高性能。
- 如果为了在数据库改变的时候,最小化代码的改变。考虑通过存储过程访问数据库。可以将数据库的改变分离处理,可以优化存储过程。
- 考虑你的开发团队。如果团队对数据库不是很熟悉,考虑使用工具或者是和你的团队更加匹配的模式。
- 在考虑使用动态SQL的时候,你应该理解数据库的改变对代码造成的改变。你应该实现数据访问层,从业务逻辑层解耦出来,专门执行数据库查询。
- 考虑调试支持。动态SQL对开发者来说容易调试。
事务
如果事务包括的所有信息和行为都执行完毕,事务才算是完成,对数据库的改变是永久的。在数据库操作发生错误的时候,事务支持回滚,可以保持数据库数据的一致性。
确定适当的并发模型,和确定如何管理事务是非常重要的。在并发的时候,可以选择乐观锁,或者是悲观锁。乐观锁,在数据上没有锁,由代码检查更新,通常使用一个时间戳,数据从上次获取之后没有被修改。在悲观锁中,锁定数据,不能被另外一个操作更新,直到数据被解锁。
可以参考下面的设计原则:
- 考虑事务的边界,在需要的时候使用事务。在SQL Server中,每一个SQL默认就是一个事务。
- 在使用了锁的事务中,尽可能的减少执行时间。避免在需要长时间运行的事务中使用锁,避免在访问共享数据的时候使用锁。避免大量的使用锁,可能会造成死锁。
验证
设计一个有效的输入和数据验证策略,对于系统的安全性是非常关键的。需要验证从其它层或者是第三方组件提供的数据,对于从数据源获取的数据也要验证。可以参考下面的设计原则:
- 验证所有从外部调用而来的数据。确保你正确的处理了null值,过滤了非法的字符。
- 考虑验证的目的。例如:在使用用户的输入动态创建SQL的时候,应该检查字符的模式,避免发生SQL注入攻击。
- 如果验证失败,返回有用的错误信息。
XML
对于交互性和维护性来说,xml非常有用。出于性能原因,在使用xml处理大量数据的时候需要小心。参考下面的设计原则:
- 考虑使用xml reader和writer读写xml格式的数据,尤其是对于大量的xml数据。如果你需要和一个关系型的数据库交互,考虑使用支持这一功能的对象,例如ADO.NET中的DataSet。
- 考虑使用xml定义格式,为数据存储和传输提供验证。考虑为复杂的数据结构提供自定义验证,但是,要记住验证将会带来性能损失。
- 在数据库存储xml格式的数据。如果你需要查询xml数据,建立索引。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。
分享到:
相关推荐
"牛【SystemVerilog】路科验证V2学习笔记(全600页)"是一份详尽的学习资料,涵盖了路科验证方法论的第二版(V2)在SystemVerilog中的应用。 笔记内容可能包含了以下几个关键知识点: 1. **基础语法**:...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...
"大型金融数据中心网络架构设计V2.pptx" 本资源摘要信息来自一个关于大型金融数据中心网络架构设计的PPT文件,内容涵盖了金融数据中心网络架构设计的演进路线、金融网络应用场景的划分、数据中心应用服务域、双活...
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 ...
TCSAE(中国汽车工程学会)发布的《合作式智能运输系统 车用通信系统应用层及应用数据交互标准》(TCSAE 53-2017)是中国在V2X领域内首项正式标准,标志着国内相关技术的规范化发展。 该标准TCSAE 53-2017旨在提升...
在“AADL学习笔记.docx”文档中,读者可以期待找到对这些概念的详细解释、实例演示以及如何将它们应用到实际项目中的指导。这份笔记对于正在学习AADL或准备采用AADL进行系统设计的人来说是一份宝贵的资源。
SystemVerilog路科验证V2是一个SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注,可快速获取自已需要的知识,喜欢的平台可下载试试! 介绍设计描述和验证语言SystemVerilog的基本...
分层架构是一种常见的设计模式,将应用分为表示层、业务逻辑层和数据访问层。这种结构有助于保持各层之间的职责分离,增强系统的可测试性和可维护性。《指南》中详细解释了每层的功能及其相互关系,帮助开发者理解...
- 编写代码以访问Kinect V2的传感器数据,包括深度数据、红外数据和彩色图像数据。 - 学习如何处理和分析从Kinect V2获取的传感器数据。 - 掌握如何构建交互式应用程序,这些程序可以利用Kinect V2的运动捕捉功能。 ...
大数据平台的总体技术框架通常由五个层次构成:数据源层、数据接口层、平台架构层、分析工具层和业务应用层。数据源层汇集来自各个业务系统、服务系统及外部单位的结构化和非结构化数据;数据接口层负责不同数据类型...
NoSQL数据库技术是近年来在大数据处理领域中备受关注的一种存储和查询非结构化及半结构化数据的方法。...通过理解并掌握JUST的架构与应用实践,开发者和数据科学家可以更好地利用时空数据服务于智慧城市的建设。
本文将深入探讨“路科验证V2”学习笔记中的关键知识点,主要基于提供的"SV部分讲义"。 一、SystemVerilog基础 1. **数据类型**:SystemVerilog提供了丰富的数据类型,包括位(bit)、逻辑(logic)、整型(int)、...
机器人视觉抓取数据集Jacquard V2是一个广泛用于机器人学习和计算机视觉研究的重要资源,尤其在物体识别、抓取规划以及深度学习算法的训练中起到关键作用。这个数据集包含了大量的图像和相应的标注信息,旨在帮助...
通过以上知识点的梳理,可以看出LSD-TEST430F5438-01_V2_1学习板实验指导书覆盖了从硬件资源介绍到软件编程实践的全面内容,旨在帮助学习者深入理解MSP430F5438单片机的各项特性和实际应用,是一份非常实用的学习...
"V2X应用层协议标准(day2)asn1.rar"这个压缩包文件提供了V2X应用层ASN.1(Abstract Syntax Notation One)编码文件,这是一个国际标准,用于定义数据结构和编码规则。 ASN.1是一种强大的数据表示语言,常用于通信...
微服务和Serverless是当前云计算架构设计中非常热门的概念,它们在解决传统单体应用所面临的可伸缩性、运维复杂性和快速迭代等问题上表现出了明显优势。在王晓波所著的《从微服务到Serverless+架构应用与实践》这份...
"架构革新,高效可控百度数据平台的最新发展趋势V2"这一主题揭示了百度如何在大数据处理、云计算、人工智能等领域持续创新,以应对日益复杂的业务需求。 首先,架构革新是提升数据平台性能的关键。传统的数据处理...
旷视科技提出的ShuffleNet V2是一种针对移动端深度学习应用优化的卷积神经网络架构。这种新型架构的提出,旨在解决移动端深度学习领域中计算资源受限和对速度效率需求较高的问题。ShuffleNet V2的设计思想来源于对于...
中兴物联ME3760_V2公网模块是一种无线通信模块,主要技术参数和机械特性、接口电气特性、射频性能指标等方面进行详细介绍,并提供了模块调试环境的搭建方法和硬件快速上手指导。该文档作为硬件用户指导手册,其内容...
本研究聚焦于利用第五代移动通信技术(5G)构建的车联网体系架构及其应用。随着信息技术的不断演进,传统的通信网络架构已经无法满足车联网对低延迟、高带宽和高可靠性的需求。因此,研究提出了一种基于5G的智能交通...