这是篇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存储引擎的数据库。这就需要我们对各个方案的利弊有一个清晰的了解,这是我们需要学习的。

*

总结

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

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

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

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

原文发布于微信公众号 - 老九学堂(xuetang9)

原文发表时间:2016-09-18

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2090
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏魂祭心

原 canvas绘制clock

4184
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2596
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4798
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2617
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

32110
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2212
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3008

扫码关注云+社区