80 | 程序员练级攻略(2018):数据库

80 | 程序员练级攻略(2018):数据库

朗读人:柴巍    11′09′′ | 5.11M

对于数据库方向,重点就是两种数据库,一种是以 SQL 为代表的关系型数据库,另一种是以非 SQL 为代表的 NoSQL 数据库。关系型数据库主要有三个:Oracle、MySQL 和 Postgres。

在这里,我们只讨论越来越主流的 MySQL 数据库。首先,我们要了解数据库的一些实现原理和内存的一些细节,然后我们要知道数据的高可用和数据复制这些比较重要的话题,了解一下关系型数据库的一些实践和难点。然后,我们会进入到 NoSQL 数据库的学习。

NoSQL 数据库千奇百怪,其主要是解决了关系型数据库中的各种问题。第一个大问题就是数据的 Schema 非常多,用关系型数据库来表示不同的 Data Schema 是非常笨拙的,所以要有不同的数据库(如时序型、键值对型、搜索型、文档型、图结构型等)。另一个大问题是,关系型数据库的 ACID 是一件很讨厌的事,这极大地影响了数据库的性能和扩展性,所以 NoSQL 在这上面做了相应的妥协以解决大规模伸缩的问题。

对于一个程序员,你可能觉得数据库的事都是 DBA 的事,然而我想告诉你你错了,这些事才真正是程序员的事。因为程序是需要和数据打交道的,所以程序员或架构师不仅需要设计数据模型,还要保证整体系统的稳定性和可用性,数据是整个系统中关键中的关键。所以,作为一个架构师或程序员,你必须了解最重要的数据存储——数据库。

关系型数据库

今天,关系型数据库最主要的两个代表是闭源的 Oracle 和开源的 MySQL。当然,还有很多了,比如微软的 SQL Server,IBM 的 DB2 等,还有开源的 PostgreSQL。关系型数据库的世界中有好多好多产品。当然,还是 Oracle 和 MySQL 是比较主流的。所以,这里主要介绍更为开放和主流的 MySQL。

如果你要玩 Oracle,我这里只推荐一本书《Oracle Database 9i/10g/11g 编程艺术》,无论是开发人员还是 DBA,它都是必读的书。这本书的作者是 Oracle 公司的技术副总裁托马斯·凯特(Thomas Kyte),他也是世界顶级的 Oracle 专家。

这本书中深入分析了 Oracle 数据库体系结构,包括文件、内存结构以及构成 Oracle 数据库和实例的底层进程,利用具体示例讨论了一些重要的数据库主题,如锁定、并发控制、事务等。同时分析了数据库中的物理结构,如表、索引和数据类型,并介绍采用哪些技术能最优地使用这些物理结构。

下面还有一些不错的和 MySQL 相关的文章。

最后,还有一个 MySQL 的资源列表 Awesome MySQL,这个列表中有很多的工具和开发资源,可以帮助你做很多事。

MySQL 有两个比较有名的分支,一个是 Percona,另一个是 MariaDB,其官网上的 Resources 页面中有很多不错的资源和文档,可以经常看看。 Percona ResourcesMariaDB Resources ,以及它们的开发博客中也有很多不错的文章,分别为 Percona BlogMariaDB Blog

然后是关于 MySQL 的一些相关经验型的文章。

关于 MySQL 的集群复制,下面有这些文章供你学习一下,都是很不错的实践性比较强的文章。

对于 MySQL 的数据分区来说,还有下面几篇文章你可以看看。

然后,再看看各个公司做 MySQL Sharding 的一些经验分享。

NoSQL 数据库

关于 NoSQL 数据库,其最初目的就是解决大数据的问题。然而,也有人把其直接用来替换掉关系型数据库。所以在学习这个技术之前,我们需要对这个技术的一些概念和初衷有一定的了解。下面是一些推荐资料。

选 SQL 还是 NoSQL,这里有两篇文章,值得你看看。

各种 NoSQL 数据库

学习使用 NoSQL 数据库其实并不是一件很难的事,只要你把官方的文档仔细地读一下,是很容易上手的,而且大多数 NoSQL 数据库都是开源的,所以,也可以通过代码自己解决问题。下面我主要给出一些典型的 NoSQL 数据库的一些经验型的文章,供你参考。

列数据库 Column Database

针对于 HBase 有两本书你可以考虑一下。

文档数据库 Document Database - MongoDB, SimpleDB, CouchDB

数据结构数据库 Data structure Database - Redis

时序数据库 Time-Series Database

图数据库 - Graph Platform

搜索数据库 - ElasticSearch

小结

好了,总结一下今天分享的内容。虽然有人会认为数据库与程序员无关,是 DBA 的事儿。但我坚信,数据库才真正是程序员的事儿。因为程序是需要和数据打交道的,所以程序员或架构师不仅需要设计数据模型,还要保证整体系统的稳定性和可用性,数据是整个系统中关键中的关键。

对于数据库方向,重点就是两种数据库,一种是以 SQL 为代表的关系型数据库,另一种是以非 SQL 为代表的 NoSQL 数据库。因而,在这篇文章中,我给出了 MySQL 和各种开源 NoSQL 的一些相关的有价值的文章和导读,主要是让你对这些数据库的内在有一定的了解,但又不会太深。同时给出了一些知名企业使用数据库的工程实践,这对于了解各种数据库的优劣非常有帮助,值得认真读读。

从下篇文章开始,我们将进入分布式系统架构方面的内容,里面不仅涵盖了大量的理论知识,更有丰富的入门指导和大量的工程实践。敬请期待。

下面是《程序员练级攻略(2018)》系列文章的目录。

版权归极客邦科技所有,未经许可不得转载

精选留言

  • Damon
    链接的质量很高,但读者更想看耗子的理解和总结吧,希望多点描述性文字。
    2018-07-05
    作者回复

    在高手篇开篇描述中,我有如下的描述:


    我假设你在前面已经打下了非常扎实的基础,但是要成为一个高手,基础知识只是一个地基,你还需要很多更为具体的技术。对我来说,就是看各种各样的文章、手册、论文、分享…… 其实,学习到一定程度,就是要从书本中走出去,到社区里和大家一起学习,而且还需要自己找食吃了。【所以,对于这里面的文章,有很多都是在罗列各种文章和资源,只是为你梳理信息源,而不是喂你吃饭】。

    老实说,我已经为你梳理并过滤掉了很多的信息,这里只留下了 30% 我觉得最经济也最有价值的信息。虽然对于不同定位和不同需求的人还可以再对这些信息进行删减,但是觉得我这么一做就会对其它人不公平了。【所以,这也是我觉得最小数量集的信息和资源吧。你也可以把我这里的东西当成一个索引来对待】。

    2018-07-05

  • yanfan_software
    会用数据库并不代表就能设计好数据库,设计数据库与业务关联,需要了解用户需求和业务联系,这篇文章主要是介绍各个数据库的而非设计,但也没提太多底层,数据库优化,希望耗子叔可以抽空给讲讲这些。
    2018-07-05
  • 少年姜太公
    耗子叔,除了阅读书籍、博客和论文,有没有开源代码阅读经验分享。我的体会是阅读优秀开源代码就好比阅读经典文学作品,从中学习编程风格,设计思想以提高自身代码编写质量,偶尔还能把某些开源项目的代码片段、编写思路应用到自己代码中。求耗子叔分享一下阅读开源项目和提高编程水平的经验
    2018-07-07
  • 杨书清
    感觉对普通程序猿来说数据库的建模和设计也很重要,有这方面的资料推荐么?
    2018-07-05
  • 刘強
    资料看多了,我对高手有了不同的理解。我觉得真正的高手是有自己的想法,自己的个性,独特的思维,解决问题的方式。看书再多,都理解了,都掌握了,顶多也不过是嚼别人嚼过的东西。这样的人貌似比大多数人强,其实他只不过是比别人看的多而已。有自己的思考,有自己独特的思想,有自己的输出,进而影响到别人,这才叫高手。我认为黑客才是真正的高手。这里的黑客是黑客与画家里面的定义。
    2018-07-07
  • 刘-阿-伟
    我报一下坐标,深圳南山四年Java,老师程序员练级攻略我95%都不会,是不是我太菜了!
    2018-07-05
  • 无风
    这一系列看下,真的很难想象皓哥是如何做到如此广面的知识积累
    2018-07-05
    作者回复

    我至少看了3倍于这些资料的量,才给出这些东西。这主要是兴趣和坚持

    2018-07-05

  • songyy
    我最近在读 《designing data intensive application》其中深入浅出地比较了数据库的基本算法,解决数据方面问题的模式 感觉内容很棒
    2018-07-10
  • 高宇
    读者交流群申请表提交了没有回复,也不知道具体什么情况
    2018-07-06
  • 1 Player
    皓叔,有些东西学习过后,一段时间不用就会忘了。怎么解决这种问题呢。
    2018-07-05
  • 50infivedays
    怎么加读者群呀 我关注公众号也回复了公众号 还是不行
    2018-07-05
  • zzz
    耗子叔,请教一个问题啊,go 能开发网站和写爬虫吗?我个人初步判断是,可以做网站,因为有web 框架,也可以写爬虫,因为能解析HTML 。求解~
    2018-07-05
  • jackyfee
    关系型数据库主要有三个:Oracle、MySQL 和 Pg?请问耗子叔,那微软的SQL Serever为什么没有罗列在内?SQL Server性能比Mysql不出名还是比较差?多指教,谢谢!
    2018-09-29
  • luwei
    不知道耗子叔以后会不会出一篇有关数据库和内存数据同步问题的文章?比如某个积分变换,先更新的内存数据,然后更新数据库的值,但更新数据库的时候写失败了怎么办?
    2018-09-08
  • penn
    请问皓哥,在高手成长篇里,哪些是和现在火热的所谓大数据比较相关的?
    2018-09-06
  • 木 易
    大数据方面的会写一篇吗,hadoop,spark等
    2018-08-11
  • 文盲筱烨
    陈老师, 请教下,pg数据库未来的发展 数据库有点群雄四起
    2018-07-17
    作者回复

    我对pg不熟悉,我只知道pg还没到主流数据库的程度。未来是否有大发展还看是否有大公司支持,是否有杀手级应用,目前还看不到。

    2018-07-18

  • KingPoker
    如果有精力的可以看j gray「事务处理:概念与技术」
    2018-07-16
  • Coder4
    公司是tidb付费用户,1亿数据用来存类似log的不关键离线数据,单条sql返回row多了(不是并发)db服务就挂只能重启,可用性非常差。 好在不是关键数据,已经迁移到es。
    2018-07-12
  • Geek_217683
    耗子哥,能不能谈谈你对编辑器选择的看法,Vim,Emacs,是否还需要?
    2018-07-06
  • 华子
    学好技术没有好的英文阅读能力是不行的
    2018-07-06
  • 请问,怎么评价tidb
    2018-07-05
    作者回复

    这个问题练级攻略无关。

    2018-07-05

  • ricktian
    国内公司pingcap的tidb最近好像也很火,皓哥有研究不。有准备学习下这块
    2018-07-05