开篇词 玩转数据库,让数据尽在你的掌控
你好,我是彭旭。欢迎和我一起玩转数据库。
先介绍一下自己吧。我是《HBase入门与实践》的作者,曾经在东方海外、阿里巴巴、魅族任职,目前是惟客数据总架构师。
我刚毕业工作的时候就接触了Oracle。当时我把一本《Oracle 9i & 10g编程艺术》翻了几遍,觉得很有收获。这本书里提到的一些内容,像多版本MVCC、Redo Undo Log、索引的调优等,在大数据时代的分布式数据库中也仍然适用。
其实,许多数据库原理是相通的。只是不同类型的数据库有不同的出发点,导致它们的设计目标有所不同。有些数据库侧重于吞吐量,有些则侧重性能;有些注重读取性能,有些则更注重写入性能。
这些年,我见证了数据库生态的各类变化。虽然现在基于Spring Boot、Spring Cloud微服务架构中,关系型数据库MySQL已经成为了标配。但是如果你的业务发展得很快,MySQL有可能就成为了瓶颈。
这时候,你可能就得考虑引入一些分布式或者分析型数据库了。
为什么选择合适的数据库很重要?
数据库是软件系统的核心组成部分。尤其是现在的云原生时代,因为基于微服务、容器化的服务层可以无限弹性扩展,所以很多时候,软件系统的瓶颈基本都在数据库。了解不同数据库的基本原理和适用场景,对你避免瓶颈、解决瓶颈,甚至选用合适的数据库,都是很有帮助的。
我经历了很多因为各种原因需要做数据库迁移的例子。
- 想去IOE化,从商业化数据库迁移到开源数据库,所以从Oracle、Sybase、H2等迁移到MySQL。
- 因为硬件成本、运维成本问题,从MySQL迁移到HBase。
- 因为Hadoop集群过重导致硬件成本过高,从Hive迁移到StarRocks。
这些数据库的迁移,不光是要将数据库中存储的海量数据迁移,有时候还需要花大力气迁移应用程序中涉及数据库方言的相关代码。
当然,市面上有很多数据迁移工具,但就算这些工具能够完美地迁移数据,你也还是得花大力气去调整程序、设计你的程序,让它在迁移的同时也能够并行运行,避免迁移出错,在回滚时手足无措。
所以,从一开始就选择好适合你业务场景的数据库,就能减少大量后续的重构和维护成本,延长软件的生命周期,体现设计的长期价值。
这里并不是说一开始的设计就一定要选用一个很高大上的数据库,或者说在业务方向与发展都不明确的情况下,选用一个“适合业务场景”但是成本很高的数据库。其实这也是一个架构,一种平衡:是牺牲扩展性来快速迭代上线,还是一开始就充分考虑扩展性,降低后续重构的成本?
而所有选择的前提,都是我们熟悉各种类型的数据库,了解它们的基础原理、设计目标以及适用于什么样的业务场景。这些内容都会在咱们的专栏里一一讲解。
我们的课程怎么安排?
我们课程一共有5个章节。
其中,基础篇涵盖了大部分数据库基础知识。之后我们会进入应用案例+实战的部分。我挑选了几个主流分布式数据库来讲解,包括Hadoop生态体系中实时随机存取的代表HBase,新一代极速全场景MPP数据库StarRocks,联机分析(OLAP)的列式数据库管理系统ClickHouse。最后,还会有一个章节专门介绍AI时代的向量数据库。
- 基础篇
这一章,我会带你学习数据库的基础知识,包括不同类型数据库的存储模型,编码与压缩的必要性,数据库事务的作用以及MVCC机制,LSM是如何优化读写速度的,如何合适地对海量数据进行分片,以及分布式场景下表Join的方式等等。
在介绍这些基础知识的同时,我还会帮你对比一下课程中要学的几个数据库,看看它们在基础设计还有适用场景上有什么异同。相信这些内容一定能对你做数据库选型有不小的帮助。
- HBase篇
从这章开始,我们就要进入到具体数据库的学习了。这几章我都会秉持着案例+原理的思路,让你在学会原理的同时,看到它们在实际场景中发挥的作用。
HBase篇的案例是一个手机云服务存储的需求。基于这个案例,我们会一起分析MySQL分库分表下运维成本、硬件成本、扩展性上的问题。
比如HBase如何组织数据?如何自管理数据分区?物理模型上如何满足弹性伸缩与负载均衡?我会从性能层面解释HBase能够在实时随机存取的需求上替换掉MySQL的原因,以及同时解决成本与扩展性问题的设计思路。最后,还会和你一起探索HBase更多的调优方法,在性能上进一步提升。
- StarRocks篇
StarRocks的表模型与我们在做数据建模的分层架构非常类似,它也号称是一个全场景的分析型MPP数据库。
所以这一章我选用的是一个典型的客户数据平台CDP案例。通过这个案例,我会给你介绍StarRocks的基本架构与原理,以及基于StarRocks的表模型设计CDP相关表的方法。最后,我们还会了解StarRocks优化数据查询性能,实现实时更新与极速查询的具体思路。
- ClickHouse篇
ClickHouse给人的印象是基于列式存储的极致的高性能宽表查询。在这个章节,我们会分析ClickHouse高性能的原理。同时沿用CDP的需求,看看表模型在ClickHouse中又应该如何设计,如何并行计算和调优。
- AI与向量数据库篇
AI时代ChatGPT的大火带动了向量数据库的爆发。在这个章节,我们一起看看向量化的需求是怎么产生的。同时,我还会给你介绍向量查询引擎Faiss和向量数据库Milvus,我们会尝试用向量查询引擎Faiss搭建一个人脸识别系统,再通过Milvus结合大模型搭建一个RAG个人知识库。
写在最后
现在很多软件的开发其实很简单,对数据库的操作可能就是一个CRUD,而且有很多框架能够自动帮你生成这些重复性的代码。你有时是不是也会感觉数据库的原理、事务、锁之类的知识离日常工作很远?
其实不然。当你碰到线上数据库因为死锁报错、慢SQL导致CPU占用过高、一个报表运行了几个小时没有结果等等问题的时候,如果你非常熟悉数据库原理,这些问题也许可以通过较小的代价去优化解决。也许它们就是一个索引建得不合理,没有命中,也许是数据没有合理分区等等。
所以我在设计专栏的时候,专注于数据库存储引擎,同时贯穿了关系型数据库、分布式数据库、MPP分析型数据库、向量数据库的原理和实践内容。希望能通过一个个的实际案例,和你一起观察、学习这些数据库满足业务需求的细节。
通过这些原理、案例的学习,希望你能够达到几个目标。
- 选型有方向。熟悉这几个典型的具有代表性的不同类型的数据库,并了解应该在什么场景下使用。
- 调优有思路。了解一些数据库的基本原理,读写上是如何优化的,压缩与编码又该如何使用,能够在需要的时候对系统、数据库进行调优。
- 问题有解法。能够在使用各种数据库的过程中预防问题、发现问题、解决问题。
让我们一起了解数据库、玩转数据库,从这门课开始,让数据尽在你的掌控。
欢迎加入我们的读者交流群,我们下节课见!
- Neexz 👍(1) 💬(1)
跟着彭老师一起进阶分布式数据库实战
2024-06-13 - zahi 👍(0) 💬(1)
老师也对比说下mongo吧
2024-06-19 - Geek_567f64 👍(0) 💬(1)
老师,有没有hbase,sr,ch相关的书籍推荐呢?我想多了解一些
2024-06-18 - cheriston 👍(0) 💬(1)
哪里有课程交流群
2024-06-16 - Geek_28c19b 👍(0) 💬(1)
彭老师 YYDS👍👍👍
2024-06-13 - 保 👍(0) 💬(1)
大牛出手,经验我有
2024-06-13 - 小虎子11🐯 👍(0) 💬(1)
终于等到啦,跟着彭老师一起掌握数据库!
2024-06-13 - cheriston 👍(0) 💬(0)
交流群有没有
2024-06-16