聊聊Java数据库开发的那点事儿

无论你开发的是一款PC端的Web应用,还是一款移动端的app,都需要一个数据库来存储你的业务数据(包括电商的商品信息、游戏的道具信息、社交的人员信息等等)。可以说,数据库是后端系统最重要的存储组件。

作为一名Java程序开发人员,你会发现你所完成的大部分代码逻辑最终都是在不断的与数据库进行交互。

在之前的交流中,我发现很多同学,尤其是从高校刚毕业的大学生,也包括一些从其他行业刚刚转行进入Java 开发领域的从业者,对Java 语言中涉及数据库开发的相关技能不是很了解,甚至会出现误将SQL与数据库开发划等号的情况。

我们今天就来给大家介绍一下数据库开发到底包括哪些技能。我们将数据库开发的学习大致划分为4个阶段:基础阶段、框架阶段、调优阶段以及架构阶段。

1基础阶段在基础阶段中,我们最先接触的是JDBC(Java Data Base Connectivity),它是我们Java 程序访问数据库的最基础的工具,它帮我们封装了和数据库交互繁琐的协议。

熟练掌握JDBC的正确使用姿势后,我们还需要掌握一些典型特定场景下JDBC的使用技巧,这些技巧将在后续我们实际工程开发中发挥重要作用。例如,在大数据量读取的场景中,如果按照正常的步骤读取数据库中的数据,就会容易出现OOM(Out of memory)的异常,为了解决该异常,我们就需要用到“游标”技术,通过多次读取结果集的方式完成海量数据的读取。

2框架阶段基础阶段的学习主要是掌握最基本的如何在Java程序中访问数据库的问题,在框架阶段,我们重点要解决的是代码可维护性、可重用性、可扩展性以及可读性的问题。

我们同学在Java面试过程中,会经常被问到关于“设计模式”相关话题,框架的本质就是将设计模式的思想固化成应用程序中的整体结构类以及对象的关系,使用框架的目的就是让开发者能够更加专注的解决业务逻辑,而不需要关注代码结构设计,提高代码开发的效率,同时保证代码具备较高的质量。

框架阶段的学习让我们开发应用程序变得更加高效,我们可以很快的通过MyBatis搭建一个基于数据库的Java 应用程序。但是数据库作为后端唯一或者主要持久化组件,数据库的请求处理能力和响应时间很大程度决定着应用程序的整体性能,所以数据库性能优化成为下一阶段学习的主要内容。

数据库性能优化对于程序开发人员,这里主要包括数据库访问优化、SQL优化以及死锁的处理与解决。数据库访问优化这里主要指的是连接池的使用与调优,连接池可以避免连接反复创建和销毁造成的性能开销,大幅提高数据的访问性能,同时还能限制数据库连接数,避免系统过载。目前业界开源的优秀产品包括DBCP、C3P0对于开发者都是不错的选择。连接池除了基本的使用,更为复杂的是连接池的优化,包括失效连接检测、自动重连、活跃连接控制等,都需要基于一定的开发经验进行配置才能达到最大优化。

3调优阶段SQL调优主要是针对程序开发人员编写的SQL语句进行优化,这里包括SQL语句是否走索引,索引选择是否高效等。这部分的技能对于开发者,更为关键的是掌握基本的排查方式,包括慢SQL语句,查看执行计划,查看索引的区分度等,根据排查的结果完成SQL调优。

数据库作为将并发编程演绎到极致的大型系统,SQL语句的执行会涉及到对不同对象的加锁,多条SQL语句并发执行就会衍生死锁的问题,死锁的排查和解决对于普通开发者来说是一个非常有挑战的事情,因为这里涉及了很多数据库内核实现的细节,对于开发者来说,掌握基本的排查工具,了解尽可能多的不同SQL语句的数据库加锁方式是解决死锁问题的根本方法。

4架构阶段数据库开发技能学习的最后一个阶段,笔者将其归结为架构阶段,在这个阶段中,我们需要站在一个更高的层次考虑数据库的可用性、可靠性、扩展性等方面的难题。在我们实际工作中,经常会听说某个系统不可用是因为数据库宕机,这也反映了数据库高可用的重要性。

在一个成熟的系统中,一定有一套完整的数据库高可用解决方案,目前业界已有的高可用方案包括基于复制的主从数据同步技术、MHA、DRBD、Galera、NDB等,各有利弊,关键还是要看具体的业务应用场景,选择合适的方案。例如,NDB 不适用于InnoDB存储引擎的数据库。这就需要我们对各个方案的利弊有一个清晰的了解,这是我们需要学习的。

*总结总的来说,数据库开发的学习有几个特点。

首先,涉及知识点非常广泛,这就需要我们在学习过程中有一定的导向性,要带着问题学习,最好能够结合一个具体的工程实践项目,通过不断的学习,去解决项目过程中遇到的各种问题。

其次,数据库开发涉及的知识点非常有深度,很多都涉及到数据库的内核实现,这就需要我们不断的去学习和积累,多阅读一些数据库内核实现的相关资料。

最后数据库开发具有非常强的实践性,业界有非常多的优秀的开源工具和产品,需要大家多动手,多实践。

祝愿大家在成为一名优秀的Java程序开发人员的道路上不断突破自我

本文来自企鹅号 - java吧媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

好架构是进化来的,不是设计来的(58架构演进)

好的架构化是进化而来的,不是设计出来的 ----58沈剑 核心内容:58同城流量从小到大过程中,架构是如何演进的?遇到了哪些问题?以...

37013
来自专栏龙渊阁测试精英

<转>性能测试浅谈

本文主要针对WEB系统的性能测试。不涉及具体的执行操作,只是本人对性能测试的一点理解和认识。

724
来自专栏互联网高可用架构

通用架构师应该如何把控迁移技术方案【完整版】

1416
来自专栏zhangdd.com

必看,运维还要懂这么多?

听说你精通运维?Apache、Nginx、tomcat、vmstat、iftop、awk、sed、sar、iostat、LVS、HA-proxy、MHA、Zoo...

583
来自专栏架构师小秘圈

物竞天择,适者生存,架构进化之路

作者介绍 沈剑,58到家技术总监,技术委员会负责人。曾任百度高级工程师,58高级架构师,C2C技术部负责人,58技术委员会主席! 核心内容:58同城流量从小到大...

3426
来自专栏BestSDK

5个秘诀,轻松应对企业级数据存储问题

首先我们了解一下存储虚拟化的定义及其常见的三种技术。 存储虚拟化(StorageVirtualization)最通俗的理解就是对存储硬件资源进行抽象化表现。通过...

2727
来自专栏PPV课数据科学社区

【学习】LinkedIn大数据专家深度解读日志的意义(二)

第二部分:数据集成   请让我首先解释 一下“数据集成”是什么意思,还有为什么我觉得它很重要,之后我们再来看看它和日志有什么关系。 数据集成就是将数据组织起来...

2594
来自专栏微服务生态

看来微服务就是一把双刃剑

微服务是银弹吗?自2014年“微服务”一词真是越来越火,不谈Microservices彷佛就out了,那么我们先来看微服务具有哪些特点:

661
来自专栏前沿技墅

机器人大闹光棍节:直击双11京东全链路军演ForceBot

1586
来自专栏章鱼的慢慢技术路

游戏服务器概述

(1)了解常见查找/排序算法的特点:利用算法来改善性能,胜于通过编译器选项、编程技巧;

852

扫码关注云+社区