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

相关文章

来自专栏纯洁的微笑

微服务(Microservice)那点事

摘要: 微服务架构被提出很短的时间内,就被越来越多的开发人员推崇,简单来说其主要的目的是有效的拆分应用,实现敏捷开发和部署 。本分享即尝试介绍微服务架构的一些实...

2706
来自专栏互联网研发闲思录

对于最近线上服务以及京东等大型互联网公司对java工程师要求的一些思考

        当下线上服务为了减少上线,经常搞成配置化,配置化对于版本以及持续集成本身是很大破坏,对于此,我个人持保留态度, 是反对过多东西进行配置化,其实配...

3388
来自专栏EAWorld

企业级BPM之微服务架构演进

BPM平台在各行业的IT架构中都是重要的基础支撑平台,十二五期间,企业级BPM作为SOA体系下的关键组件,经历了一个加速建设的过程。我们也有幸参与了一些行业的流...

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

<转>性能测试浅谈

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

784
来自专栏高性能服务器开发

6 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则

腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室(房间),玩家可以选择进入属意的房间,并在此房间内找到可以加入的游...

1042
来自专栏沃趣科技

【QMonitor新特性】SQL性能历史跟踪及SQL执行计划变更历史

业界通常把DBA分为系统DBA和应用DBA两种。对于系统DBA来说,主要的职责是确保数据库系统的稳定和高效的运行。而应用DBA主要是优化应用,以求得一种“更经济...

3445
来自专栏芋道源码1024

什么场景应该用 MongoDB ?

月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简...

910
来自专栏后端技术探索

淘宝高并发订单的数据库方案

周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是...

1172
来自专栏Rainbond开源「容器云平台」

Service Mesh服务网格:是什么和为什么

Service Mesh(服务网格)会是今年微服务生态的主角吗?从趋势来看,众多企业正在将这项理微服务复杂性的技术/工具,搬进他们的IT“火药库”之中。

2755
来自专栏大魏分享(微信公众号:david-share)

一份微服务学习笔记,来自一位前研发同事的分享

正文 ? ? 单体应用架构中,每个应用有多个组件模块。一个应用开发通常由一个团队完成。 微服务架构中,每个微服务可独一运行、可独立开发、微服务之间使用Restf...

3836

扫码关注云+社区