希望了解更多有关Fivetran的信息?加入我们的现场周刊演示。保存您的位置 -我们emea.

跳过主要内容

数据库解密第1章-数据库和SQL

下面这篇博文是由迈克尔Kaminsky在数据库中。你也可以看这个系列这里

数据库是超级重要的,他们是如何利用计算机的基础。它们允许我们持久地保存信息,即使我们关闭电脑也会随着时间的推移而节省更多信息。它们以方便的方式组织数据,即人和软件访问和分析。

当我们说到“数据库”时,我们的意思是数据库管理系统或DBMS。通俗地说,在整个系列中,我们将使用术语“数据库”来指代这些系统。

在你使用的许多不同的软件应用程序中都有数据库。任何有登录名的网站都可能在后台的某个地方有数据库。Facebook,谷歌,任何电子商务商店——都依赖于数据库。

一个简短的历史

当计算机刚被开发出来的时候,我们所知道的数据库还不存在。有一段时间,甚至没有任何持久存储——如果你关掉电脑,你会丢失你输入或创建的任何数据。想象一下在大量磁带上操作的计算机,其中的数据被组织成用于一次性应用程序的自定义格式。

在20世纪60年代,人们意识到以一般结构化方式存储的数据是非常方便的,他们开始开发原型数据库来实现这一目标。在20世纪70年代,事情真的与关系数据库管理系统和SQL的发明起飞。这是我们开始存储数据的地方,解锁能够与计算机一起做更多的方式,而不是人们以前的想象。

很难夸大这种发展在计算历史上的重要性,因为关系数据库仍然支撑着我们每天使用的大量互联网和计算基础设施。

21世纪初互联网的发展使得我们想要存储的数据量迅速增加。这导致了NoSQL(不仅仅是SQL)和大数据数据库的开发,从而能够快速大规模地构建基于web的软件。接下来的十年,也就是2010年代,我们看到了很多关于MapReduce和大规模并行处理的开发。21世纪初,我们存储了这么多数据,我们需要基础设施来分析所有这些数据,因此业界追求分布式计算,以便能够有效地处理所有这些数据。

今天,正在积极发展几种有趣的技术。我对一些新的流数据库特别感兴趣,这些数据库是针对数据库分析数据而优化的。正在为非常具体的用例开发了其他特定于应用程序的数据库,如时间序列。随着组织的需求,我们将继续看到创新的数据库开发工作到未来。

数据库的类型

当我想到数据库时,考虑一下以下的一些宽泛的类别会对我有帮助:

  1. 分析与交易

  2. 关系与非关系

  3. 分布式和单节点

  4. 内存和磁盘

每当我遇到一项新的数据库技术时,我都会考虑它在这些范例中的哪个位置适合,以便理解它为什么类型的用例进行优化,以及它可能在什么地方遇到困难。

这些主题都非常重要,它们为我们在本系列中将要涉及的内容提供了一个路线图,以便您理解这些术语的含义,以及对于不同的范例所做的不同类型的权衡。

我们将深入了解这些不同的主题(以及为什么他们很重要)在未来的课程中,但这篇文章只会提供三万千英尺的概述。

分析与交易

数据库的一个关键区别是它是分析型还是事务型。在分析世界中,您可能要分析大量的数据。也许你是一名分析师或数据科学家,正在总结数据以回答业务问题。

在事务性世界中,您正在为其他软件应用程序管理状态。您要跟踪哪些用户登录了,哪些用户注销了,哪些订单已经发货,哪些订单还没有发货。

这是两个完全不同的用例,我们看到许多数据库都为其中一个或另一个进行了优化。我们在分析端看到像Redshift、Snowflake、BigQuery或像HDFS这样的MapReduce数据存储,在事务端看到像PostgreSQL、MySQL、Oracle DB和Microsoft SQL server这样的技术。

关系vs非关系

关系和非关系是数据库中另一个非常重要的区别。在关系数据库中,数据存储在可以连接在一起的表中——一个表与另一个表相关,用户或应用程序可以根据这些关系从数据库中获取他们需要的数据。

在非关系数据库中,使用不同表的想法就不那么重要了。数据通常存储在一个大的blob中,称为“文档”,不一定有固定的模式或形状。在一个文档中,您可能有一组属性,但在另一个文档中,您可能有一组不同的属性

分布式和单节点

分布式数据库是另一个非常重要的概念,我们最终将深入研究这个主题。在今天的技术中,从总体上理解分布式计算是非常重要的,但是在较高的层次上,分布式数据库将数据分布在多个不同的计算机或服务器上。你可能有一部分数据库在纽约的数据中心,另一部分在加州,另一部分在世界的另一边。

这与单节点数据库相反,在单节点数据库中,所有数据都存储在一台计算机或服务器上。这些方法更容易进行推理,但容错能力和计算能力较差。

近年来,分布式数据库已经看到了很多发展。在分布式数据库方面,我们拥有Google云扳手和Azure Cosmos等工具,以及所有大数据仓库技术;虽然在单节点侧,但您拥有PostgreSQL / MySQL等传统数据库以及许多内存数据库。

内存和磁盘

“内存中”和“磁盘上”描述了计算机是如何存储和访问数据的。In memory当然是指RAM,而on-disk是指永久的硬盘存储。

如果将整个数据库加载到RAM中,那么数据库可能会非常、非常快,因为从磁盘读取数据是访问数据的最慢方式。然而,如果数据库保存在硬盘上,它就会有更多的属性,比如存储更多数据的能力,因为计算机的硬盘空间往往比RAM更大,而且如果程序崩溃,数据丢失的风险也更低。

一些流行的内存数据库包括redis和memsql。磁盘数据库包括大多数传统数据库和数据仓库。

SQL:结构化查询语言

在讨论数据库时,我们不能不谈谈SQL,它代表的是“结构化查询语言”。SQL是一种与数据库交互的语言。它绝对不同于人们使用过的许多其他编程语言。

SQL与众不同之处在于它是一种声明性编程语言,这意味着您必须向数据库描述您想要的输出类型,然后由数据库负责找出获得该输出的最佳方法。

人们倾向于把SQL看作一种东西,事实上,对于SQL应该是什么样子,有ANSI / ISO标准;但实际上,每个数据库的实现方式都是不同的。如果您曾在一种类型的数据库中使用过SQL,那么在另一种类型的数据库中,可能90%的内容都是相同的,但在方言中会有微小的差异。每个数据库都有自己独特的SQL,用于不同类型的操作。

一旦熟悉SQL,它并不太难,但很重要的是要知道您不能为PostgreSQL查询并希望它立即在MySQL数据库中工作。两种技术必须有一些翻译。

知道某些数据库根本不使用SQL也很重要。例如,redis没有SQL接口。

以后我们会有一整节关于SQL的课,但大致是这样的:

CREATE TABLE users AS SELECT id, name, state FROM other_table WHERE attribute IS TRUE;

在这里,我们看到在SQL中有不同类型的操作。DDL或“数据定义语言”告诉数据库关于我们要执行的操作类型 - 创建表,指定列类型等。

我们也有数据查询语言,这是我们如何向数据库描述我们想从数据库得到什么,这两种类型的操作(加上许多其他!)都是有效的SQL。

在接下来的几块中,我们将使用这些潜在的概念来让我们的手肮脏,并为您提供如何以及为什么这些数据库如何工作的方式。

该系列的第二章继续这里