最后一篇是关于持久层的性能优化,和dba的关系比较密切,我认为持久层优化的主要原则是:减少表关联查询。即使必须要有关联查询,也要减少关联的表的个数。根据经验,大多数的应用,性能瓶颈都在数据库这边,我们围绕上面的原则,可有下面的一些办法来进行优化。
- 增
加表冗余字段。这种方法会使你的表不符合范式要求,但是我们必须知道,范式仅仅是理论上的,也就是建议你的表设计的一个标准,恐怕严格符合第四范式的项目
不能满足非功能性需求。我们在进行er设计的时候,可根据项目实际需求,在某些表中加入冗余字段,前提是这些冗余字段不会经常变化,如果变化过快,将会给
数据同步更新带来麻烦。
- 增加数据库索引。在对系统上线一段时间后跟踪的sql进行归类统计,按表、按where字段排序,找出一张表中最常做为查询条件的字段,在这些字段上建立索引,一般一张表可以建很多个索引,对查询性能的提升,效果是非常明显的。
- 分表。设计前要预估算出一张表的最大记录行数,考虑是否要进行分表设计(我的其它文章中会专门讲到)。
- 对
表进行水平和垂直分区。设计前要预估算出一张表的最大记录行数,以决定是否会对该表数据分区。根据我的经验,一般一张表的数据量达到10万条以上,就可以
考虑分区了。分区类型有很多种,要根据项目情况考虑,mysql是在5.15中才加入分区功能的,使用mysql的同学要注意哦。
- 数
据文件物理存储问题。在进行建表或建分区时,都可以选择文件的物理存储路径,因为服务器一般都有多块磁盘,那我们就一定要注意,根据表的访问题情况,利用
单独磁盘的I/O,合理的分配到物理磁盘上去,提高效率。如果只有一块盘,可考虑将存储文件划分到不同逻辑分区上去,逻辑分区在物理扇区上是连续分配的,
对效率提升有好处。
- 数据库集群。一般数据库都是支持集群功能的,配置集群,水平扩展数据库的性能。
- 采用读写分离。我曾经帮朋友设计过的一个高并发系统,数据库采用mysql实现,就采用了读、写分离机制,这个也是许多高并发网站常用的方法。
- 程序员写程序的时候要注意,可尽量使用一些特有数据库的专用语句,对性能提升是有好处的,缺点是不便于数据库的更改移植。
- 程序员要尽量避免行级锁,程序中尽可能用乐观锁或离线锁。
- 可
将有些大数据量的sql操作写到存储过程中去,因为存储过程都是经过编译的,执行效率非常的高,我们的一些早期项目都用这个来做复杂的大数据量业务操作。
缺点也很明显,一是数据库平台更换与移植,另一个就是性能优化时无法水平提升系统性能,比如:应用服务器做了集群,但数据库这边的存储过程仍然是瓶颈。
- 最后一点是设计上的,原理是数据库删除效率不高,那我们就少用删除。平进的删除,只是对数据库打上删除标志,在非系统高峰期,用定时任务真正删除打了标记的数据,这种做法在移动、电信的项目中比较常见。
性能优化需要在实践中不断总结积累,上面的一些是我这些年来的实践所总结,谈不上全面与深刻,我也相信,每个人都有自己的一套独门绝技,欢迎补充完善。
分享到:
相关推荐
基于RemObjects的持久层系统,有着不错的实现思路哦 如果是初学RO的话可以从些程序中得到很大的提升。 有兴趣的朋友可以参考一下。
对大容量大擦除块的spi接口flash,如sst256401,stm25p64,由于擦除块太大,且写一个字节前必须擦除再写,需要很大的块缓存,现采用把擦除按块管理,把数据按页管理的模式,解决问题
asp仿j2ee持久层
java持久层框架对比
使用hibernate 进行持久层操作时,查询响应时间比较与最佳选择
针对Scott Ambler提出的健壮持久层设计方案存在的问题,提出了一种基于软件体系结构的对象持久层设计方案。将体系结构作为对象持久层的整体视图,反映了对象持久层的整体功能和结构,并利用层模式实现了对象持久层的...
该配置文件描述mybatis持久层框架技术的,可有将SQL放到配置文件并且规范数据库连接等
SpringBoot整合持久层技术
spring + hibernate 数据话持久层
持久层代码自动生成工具是一个比较流行软件
个人整理的一套Java WEB 持久层技术知识点的清单,学些一门语言有个知识导图对入门的人可能减少迷茫学习起来方便一点~ 另外有本人整理的Java Web开发其它知识点清单~
Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有。 它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开
java 实现自定义持久层框架代码,解析配置文件,手动封装返回结果,使用到了构建者模式、工厂模式、代理模式
spring持久层封装,新手可用,物超所值
用 Hibernate 和 Spring 开发持久层
我们希望通过这篇文章,帮助你在Java持久层框架之争中做出正确的选择,从而提升你的开发效率并实现更好的软件质量。 JDBC(Java Database Connectivity)是Java平台中用于与关系型数据库进行交互的API。它提供了...
这份文档以例子的形式讲诉了Spring持久层的封装,希望可以帮助学习的人!
ORM_数据持久层_生成工具
Hibernate持久层方法汇总 session.load, session.find, session.iterator, session.save, session.update, session.saveorupdate
3、系统运用分层原理和组件原理,将所有的MIS管理系统划分为用户界面层,业务规则层,数据访问层和数据库层.每一下层为上层提供支持,一般不跨层访问;同时结合现在一些已经成熟的设计框架,设计模式和构件模式,将一个解决...