数据访问层的优化思路(r10笔记第80天)

对于数据访问层的优化,我简单总结了一下,其实里面有很多的点子现在想起来有一种灵光一现的感觉,但是真真切切的,里面有不少是之前公司已经做到了的,所以一个做产品的公司真心很伟大,而能够沉淀下来如此多的东西,那绝对是一笔非常宝贵的财富,对于公司,对于个人都是持久的财富。

简单来说,如果处于初始阶段,基本就是这样的调用方式,数据访问层是直连DB层面的,尽管从后期的演进来说,可能会有一层cache,但是这个暂且不在数据访问层的优化范围内来谈。我们谈偏左一些的设计和改进。

这样的数据访问层,短期内是不会有问题的,而随着业务量增大,是肯定有问题的,问题实在太多我就讲几个重点的。

  1. 可能因为系统的复杂程度,开发语言呢就有多重,不同的程序都需要访问同一个DB,在上面操作数据,如此想来真是细思恐极,这里面的数据隐患实在太多。
  2. 不同的开发组都会有自己的数据处理流程和规范,所以大家都是各做各的,存在太多的冗余,而且如果因为开发同学的SQL功底,确切的是说不够细心认真,很可能会造成数据库层面的各种潜在问题。

对此有一些改进方法,一种就是现成的,不同的业务模块和系统肯定对于不同的应用层面,那么ERP的业务职能访问ERP的表,这个也无可厚非了,至少的设计层面来看,这个要清晰些了。

而数据库层面也必然是要做一些划分,这个可以放在不同的数据库用户下,或者不同的业务表名。 总之就是要有针对性。

其实做到这里,说实话,对问题没有任何的改变,各个开发团队还是自己的处理方式,如果需要添加数据表,那就初始化即可,自己提供SQL脚本,DBA部署。看起来是这样的,但是问题就是如此,里面存在太多的不确定,我们完全没法要求开发同学提供合适的约束名,索引名等,这些看起来似乎无关紧要的事情,其实深究起来还是蛮重要的。

怎么改进呢,那就是下图中的部分,我们在应用层面的对象和数据库层面的表进行了映射,这个工具就是做这件事情的,而这个工具的本质工作是什么呢,它会存放表的字段信息作为元数据,映射到数据库层面,就是SQL了。说简单一些,这个工具就是eclipse的一个插件,类似这样的工具,无论是哪个开发团队,都需要使用这个工具来进行应用和数据库层面的数据表映射。

而SQL怎么生成呢,通过这个图形工具,因为得到了对象的配置元数据,会基于这些信息来生成标准的SQL语句。这样就不用开发人员来牵扯更多初始化操作的部分了。

这样做其实还是很给力的,而且在一定程度上能够杜绝一大堆的潜在问题。

而接下来对于DBA来说就是一种梦魇了,那就是各个业务模块的变更多如牛毛。而且很多数据变更还存在一定的依赖性,或者说表在测试环境不需要初始化大量的分区,够用即可,但是到了线上环境,就很有必要了,而且测试环境的结构应该尽量简单,线上环境很可能是分布式的,数据库用户等配置就会格外复杂,对于这类的问题,很可能DBA就要从事更多的转换,而且很可能是手工转换工作。

对此一个很重要的改进就是使用PROFILE的改进,可以简单理解为模板的概念。测试环境有一套测试环境的模板,线上环境有线上的模板,这样一来初始化环境就会容易的多,而且不会那么劳神费力。

而这两个大问题解决之后能够解决绝大多数数据访问层的问题,那么还有类问题,那就是对于应用层面对象的属性变更,数据库层面就会难做到联动了。

我们可以用下面的图来说明。

不同的应用模块有不同的数据库访问细则实现,我们就叫做DAO吧。如果对表添加一个字段或者修改对象属性,这样一来在数据库访问层沃恩就需要做更多额改进和映射,都说表里的增删改查其实就那么回事,但是真摊到自己身上就是大事了,如果因为修改字段信息而需要动用修改核心的引用方式,就会给问题难上吉安娜。一格很单单的决定是,架构设计层面来完成这件事情,而难度最大的就是自动完成这些映射,而且DAO层面在这种情况下是不需要再次动用修改DAO层面的代码的,这个工作着实很难,而且很容易出现问题,但是确实做到了,而且用起来还真不错。一个良好的架构设计就会在很大程度上简化工作,使得开发同学不会纠结在更多的数据访问层的细节,而更加业务情况,结合了具体的场景,那么问题解决起来虽然是艰辛,但是回想起来还是希望能够帮助到一些需要的朋友。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

深入浅出 RPC - 浅出篇

近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC,...

1183
来自专栏社区的朋友们

Amazon Aurora 深度探索(二)

本文对 Aurora 系统的实现从整体架构、存储、事务处理三个方面进行深入探讨,基于其论文和相关资料讨论具体实现细节,又跳出其外、从数据库内核技术实现的角度对 ...

7311
来自专栏罗超频道

Chrome支持Android应用,浏览器正在成为操作系统?

Google 日前已决定将ARC开放给所有开发者,并且ARC在Chrome OS和Chrome浏览器中均可以运行。ARC全称是App Runtime for C...

3244
来自专栏技术翻译

Kubernetes,Kafka事件采购架构模式和用例示例

随着当今业务和技术的快速变化,开发人员,数据科学家和IT运营部门正在共同构建具有新技术和动态架构的智能应用程序,因为它们具有灵活性,交付速度和可维护性。这篇文章...

1822
来自专栏杨建荣的学习笔记

11g rac安装过程感悟 (r7笔记第32天)

问题的背景是这样,以前学习oracle 10g rac的时候在rhel 5上安装,真是快使出吃奶的劲了,前前后后忙活了一个多星期,配网络,配共享存储,修改vm...

3123
来自专栏IT技术精选文摘

基于MySQL的分布式数据库TDSQL十年锻造经验分享

1613
来自专栏公有云的互联网缓存与存储

什么时候应该用cdn

导语:这篇文章面向是cdn的首次使用者,什么叫首次使用者,就是对cdn完全不了解,对http也不怎么了解的同学。那么大神的读者,也希望您能瞄一下小弟的文章,看看...

80215
来自专栏FreeBuf

新手入门8个简洁方便的安全工具

1:Maltego Maltego可是说不是一个黑客工具,而是用来对来自互联网的信息进行收集、组织、可视化的工具。 它可以收集某个人的在线数据信息 –包括电子邮...

2145
来自专栏ThoughtWorks

系统级集成测试的断舍离|洞见

食之无味,弃之可惜 在企业级应用的“季度或月度发布”被认为是领域最佳实践的时候,在应用部署到生产环境之前维护一个完整的环境来进行集成测试是非常必要的。但是,集成...

2929
来自专栏京东技术

京东物流仓储系统618大促保障背后的运维秘诀

1903

扫码关注云+社区