数据库的高级知识

可用

1.1 建讲原则

你和我是从下面开始认识数据库的。这是我个人教人方法的一个特点。谈到新话题时,我总是先告诉你如何在实践中使用某些工具。当我知道一个人知道如何使用它们时,我就开始讲述一切是如何运作的。

采用这种方法有几个原因,但最主要的一个是学习过程中最有价值和最缺失的资源是学生的动机

这种方法与我们习惯的方法略有不同,后者在学校和大学中使用。但一切都很清楚:当你在学校或大学学习时,你有正确的优先顺序:学习是此时此刻生活中最重要的事情。

如果您在成年后从事自我教育,那么通常您已经不得不将学习与工作、家务、照顾孩子或年迈的父母结合起来。而且在这里经常学习不会是第一要务。

这都是关于优先事项的。创业界甚至有这样一个概念——Fail Fast,尽快失败。听起来很奇怪,但实际上很有道理:创业公司的任务就是快速检查他的假设是否正确。如果它不是真的,那么你不需要在上面花费多年的生命,最好尽早了解对某种服务或产品没有需求。

在教授 Java 和 SQL 时,我使用相同的方法:我让你有机会尽早了解你是否正在从编程中匆匆忙忙。如果您喜欢编程,并且您自己能够弄清楚如何使用循环和数组,那么在导师的帮助下和精心设计的程序中,您完全有机会完成学业并找到工作。

但另一个同样重要的事实是:休息几天后,您就会明白编程不适合您。你可能只是对它不感兴趣,没关系。所以,你不需要花几个月的时间在上面。

只有 40% 的毕业生从事他们​​在大学获得的专业。你想想,人家学了5-6年,60%的人决定不干本专业了。是的,一些获得的知识仍在使用,但大约有一半没有。

这就是Fail Fast理念的价值——尽早了解某个职业、某个人或某个爱好不适合你。并且不要在他们身上浪费你的时间和精力。从长远来看,这是一个非常好的策略。

1.2 SQL 和一切,一切,一切

我们完成了哲学介绍,让我们回过头来学习 SQL。

SQL 语言和 DBMS 略有不同。SQL 语言本身是一种标准,它描述了在对数据库的 SQL 查询中可以编写什么。DBMS 已经是这个标准的实现。一些 DBMS 实现了标准的某些功能,第二个实现了其他功能,依此类推。

DBMS 越昂贵,它实现的标准功能就越多。此外,许多 DBMS 通常会在 SQL 标准之外实现自己的独特功能。有时这会导致可移植性问题:为一个 DBMS 编写的 SQL 查询可能不适用于另一个。

Java也有类似的情况。一个Java程序如果是在Windows下写的,那么在Linux上就不能正常运行了。为了解决这个问题,Java 引入了针对不同操作系统具有不同实现的特殊类。示例:具有 WindowsPath、LinuxPath 等实现的 Path 类。

问题的第二部分在版本控制的帮助下得到解决。来自不同语言或 DBMS 的所有成功创新都被添加到新的 JDK 或 SQL 标准中。您已经知道 JDK 有不同的版本,版本越新,功能越多。SQL 也一样。

在SQL语言中,其标准有多个版本,以年份命名:

  • 数据库:1999
  • SQL:2003
  • SQL:2006
  • 数据库:2011
  • SQL:2016
  • SQL:2019

好消息:我们不会研究这些标准。首先,学习和掌握这一切需要数年时间。其次,这些标准就像 Android 的版本:发布后仅 5-10 年,该标准就会得到广泛传播。

在数据量大的数据库中,人们需要可靠性和稳定性。“有用,不要碰它”是每个使用数据库的人的座右铭。并且每 5 年进行一次向新版本数据库的过渡,此时这种解决方案的所有优势都已经很明显了。

1.3 括号之外

正如我上面所说,成为数据库专家需要数年时间。专业人士知道很多我们不会研究的东西。但我会稍微谈谈数据库中的其他内容。

几乎所有现代数据库都支持:

1 程序语言 (PL)

RDBMS 支持编写在 SQL Server 上运行的过程和函数的能力,并且可以在查询期间对数据做很多事情。例如,一旦我向 Oracle 服务器编写 PL SQL 查询,它会响应查询生成......一个包含数据的 HTML 页面。是的你可以。

2 个事件(触发器)

所有现代 DBMS 都支持事件机制,在 SQL 语言中称为触发器。触发器作为对某些操作的响应而发生。例如,您可以拦截所有写入数据库的尝试,并将它们更改的确切时间添加到新行中。

3 记录

现代数据库试图变得超快,因此通常所有更改(新行、删除行、更改行)都首先写入一个称为日志的特殊文件。并且只有在一段时间后,SQL 服务器才会将这些记录与主数据库合并。

在某些方面,这类似于 Java 中垃圾收集器的行为:它也只是首先将对象标记为已删除,并在空闲时间进行内存清理和优化。

4个插件

对于 DBMS 以及许多程序,您可以编写自己的插件。此类插件允许您添加独特的数据类型、使用它们的函数,或更改 DBMS 的标准行为。当您使用开源数据库并且存在一些错误时,这尤其有用。

5 分布式工作(集群)

现代 SQL 服务器的典型场景是多个服务器组成的集群。最简单的选择是将数据写入一个服务器并从一组服务器读取。在这种情况下,您可以为 SQL Server 之间的数据库同步配置各种场景。

6 分片

当数据很多的时候,就开始拆分到不同的数据库中。直到一个表可以存储在不同数据库中的部分。

分片可以是垂直和水平的。垂直分片是指表格被垂直线切割,而水平分片则被切割成水平线。

例如,我们决定按年份划分表中的所有数据:2019 年 - 一个表,2020 年的数据 - 第二个,依此类推。这将是水平分片。

7 推非推

数据库发展到一定阶段,开始加入越来越多的业务逻辑。这一切都是从过程、函数、服务器生成网页开始的,最后是为 DBMS 添加了对几乎所有流行语言的支持:Python、JavaScript,甚至 Java 和 C++。

听起来很酷,直到你开始深入细节:你真的想用 Java 编写你的 Web 应用程序业务逻辑,它将在 SQL 服务器中执行,那里没有 JDK、java 库、框架、很少的内存和大量的其他限制?

评论
  • 受欢迎
你必须先登录才能发表评论
此页面还没有任何评论