聊聊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 条评论
登录 后参与评论

相关文章

来自专栏腾讯移动品质中心TMQ的专栏

腾讯TMQ在线沙龙回顾|测试左移实践

测试左移实践 活动时间:2017年6月28日 QQ群视频交流 活动主题:TMQ在线沙龙第二十三期分享 本次分享的主题是:测试左移实践 共有214位测试小伙伴报名...

2018
来自专栏云计算D1net

私有云架构建设, 你做好准备了吗?

私有云基础架构的构成要素 随着越来越多的企业设定了构建内部云服务的目标,规划和构建企业内部云服务平台就成为IT部门的职责。每个企业都有自己特有的环境和具体的目标...

3796
来自专栏老九学堂

这是篇Java数据库开发的干货,你确定不收藏吗?

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

3815
来自专栏SDNLAB

Dragonflow的架构、功能及未来发展路线图详解

Dragonflow架构由Neutron插件构成,该插件可以将Neutron模型映射到一个新的逻辑拓扑模型中,并与本地Dragonflow控制器进行同步。而这...

36710
来自专栏程序你好

为什么应该使用微服务(Microservices) ?

如今,微服务非常流行。几乎每个人都喜欢。不仅仅是Netflix、亚马逊或谷歌,似乎几乎每个人都采用了这种架构风格。虽然微服务已经存在了很长一段时间,也有很多关于...

2013
来自专栏用户3254834的专栏

干货丨什么是API,SDK和API之间有什么关系呢?

随着软件规模的日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要,程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分,良好...

711
来自专栏从零开始学自动化测试

《 python自动化框架pytest》

首先说下为什么要学pytest,在此之前相信大家已经掌握了python里面的unittest单元测试框架,那再学一个框架肯定是需要学习时间成本的。刚开始我的内心...

4383
来自专栏ATYUN订阅号

数据虚拟化:为人工智能和机器学习解锁数据

在可靠性、准确性和性能方面,人工智能和机器学习都严重依赖于大型设备。因为数据池越大,你就越能对模型进行训练。这就是为什么重要的数据平台能够高效地处理不同的数据流...

37111
来自专栏Java架构师学习

拿好这段代码,让你求职路上不再迷茫

经常有人问:“我是该学Angular还是React?该用gulp还是webpack…” 这篇文章就是要 交给大家一把钥匙,专门解答这类问题。 解答思路 PS:...

3197
来自专栏喵了个咪的博客空间

phalapi-入门篇1(简单介绍以及环境搭建)

#phalapi-入门篇1(简单介绍以及环境搭建)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架...

3507

扫码关注云+社区