专栏首页杨建荣的学习笔记数据访问层的优化思路(r10笔记第80天)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据架构选型必读:4月数据库产品技术解析

    为方便阅读、重点呈现,本文对各板块内容进行了精简,需阅读完整版可点击文末【阅读原文】或登录云盘下载:https://pan.baidu.com/s/1L5Vh8...

    jeanron100
  • 迁移式升级的新方案测试 (r10笔记第30天)

    之前写了一篇文章分析了目前存在的一个问题和改进思路。迁移式升级的一点思考 (r10笔记第27天) 当前的硬件环境是Solaris,Oracle 10gR2 单实...

    jeanron100
  • MySQL中间件方案盘点

    首先数据库技术发展的基础还是在业务推动的背景下,能够实现相关的技术保障。业务需求的提升必然会在数据量,访问量等方面有更高的要求,而映射到数据库层...

    jeanron100
  • 附加没有日志文件的数据库方法

           今天客户那边执行SQL报错,经查看是客户服务器数据库磁盘已被全部用完,日志文件达到500GB的程度,后来由于我的错误操作导致日志文件(.ldf)被...

    用户1168362
  • 数据库基本知识

      字段、记录、表、约束(主键、外键、唯一键、非空、check、default、触发器)

    爱学习的孙小白
  • 【详解】图数据库 | 灵活存储复杂关联关系

    从事10年JAVA研发工作,架构经验丰富,目前担任京东物流逆向创新业务团队leader,负责京东国际化逆向物流相关研发工作。

    京东技术
  • Xen server虚拟化中虚拟机磁盘文件丢失的处理办法

    因服务器突然断电原因导致Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘文件丢失,通过电话联系北亚数据来进行恢复。硬件环...

    企鹅号小编
  • 数据库的这些性能优化,你做了吗

    在互联网项目中,当业务规模越来越大,数据也越来越多,随之而来的就是数据库压力会越来越大。

    黄泽杰
  • 解DBA之惑:数据库承载能力评估及优化手段

    针对系统运行现状,建立性能基线。将业务指标与性能指标建立起对应关系。这里所说的性能指标包括CPU、MEM、DISK、NET等。在诸多资源中,肯定存在不均衡的情况...

    宜信技术学院
  • 数据库的七种武器

    数据库的七种武器,是我在工作维护和接触到的七种常用数据库,包括4种常用的关系型数据库,3种常用nosql数据库。

    wubx

扫码关注云+社区

领取腾讯云代金券