数据库入门

简介

数据是当今许多应用程序和网站运行的核心。对病毒式视频的评论,在多人游戏中改变分数,以及你留在你最喜欢的网上商店购物车里的物品,都是存储在数据库中某个地方的零星信息。

这篇概念性文章是对众多数据库主题的介绍。它简要概述了什么是云计算环境中的数据库,并重点介绍了数据库设计和功能的几个核心概念。它还包含指向贯穿始终的相关概念和程序教程的链接。

什么是数据库?

广义地说,数据库是任何经过逻辑建模的信息集合。数据库不一定要存储在计算机上,医院里的一叠病人档案,名录中的一组联系人,或者装满旧发票的文件柜都符合数据库的例子。

在网站和应用程序的环境中,当人们提到),通常安装在虚拟专用服务器上并可远程访问。

Redis、MariaDB和PostgreSQL是开放源码DBMS的几个例子,但现在有许多不同的DBMS可用。不同的DBMS通常有自己独特的功能和相关的工具集,但它们通常分为两类:关系型数据库和非关系型数据库。

关系型数据库

自20世纪70年代以来,大多数DBMS都是围绕关系模型设计的。关系模型中最基本的元素是关系,用户和现代关系databases_](https://andsky.com/tech/tutorials/understanding-relational-databases))(RDBMS或[关系DBMS)将其识别为表。关系是表格中的一组_tuples_或行,每个元组共享一组_Attributes_或列:

关系、元组和属性如何与一个another相关的图表示例

您可以将每个元组视为表中包含的任何类型的人、对象、事件或关联的唯一实例。这些例子可能是一家公司的员工、在线企业的销售或医学实验室的测试结果。例如,在保存学校教师员工记录的表中,元组可能具有namesubjectsstart_date等属性。

在关系模型中,每个表至少包含一个可用于唯一标识每一行的列,称为_PRIMARY KEY_。以存储学校教师员工记录的表为例,数据库管理员可以创建一个名为Employee_ID的主键列,其值自动递增。这将使数据库管理系统能够跟踪每一条记录,并在特别的基础上将其返回。反过来,这将意味着记录没有定义的逻辑顺序,用户能够以任何顺序或通过他们希望的任何过滤器返回他们的数据。

如果你有两个表,你想相互关联,一种方法是使用_foreign key_。外键本质上是一个表()的主键插入到另一个表()的列中的副本。下面的示例突出显示两个表之间的关系,一个表用于记录公司员工的信息,另一个表用于跟踪公司的销售情况。在本例中,EMPLOYEES表的主键用作SALES表的外键:

Employee表的主键如何充当Sales表的外部key的图示

关系模型的结构元素有助于以有组织的方式存储数据,但只有在可以检索数据的情况下,存储数据才有用。要从RDBMS检索信息,您可以发出_QUERY_,即对一组信息的结构化请求。大多数关系数据库使用一种名为Structed Query Language]的语言来管理和查询数据。SQL允许您使用各种子句、谓词和表达式来筛选和操作查询结果,从而使您能够很好地控制结果集中将显示哪些数据。

目前有许多开源RDBMSs可用,包括:

非关系型数据库

今天,大多数应用程序仍然使用关系模型来存储和组织数据。然而,关系模型并不能满足所有应用的需求。例如,很难横向扩展关系数据库,尽管它们非常适合存储结构化数据,但对于存储非结构化数据就没那么有用了。

关系模型的这些和其他限制导致了替代方案的开发。总而言之,这些数据库模型通常被称为非关系数据库。因为这些替代模型通常不实现用于定义或查询数据的SQL,所以它们有时也被称为_NoSQL数据库_。这也意味着许多NoSQL数据库实现了插入和检索数据的唯一语法。

NoSQL非关系视为广义术语会很有帮助,因为有许多数据库模型被标记为NoSQL,它们之间存在显著差异。本节的其余部分重点介绍几种更常用的非关系数据库模型:

键值数据库

Key-value databases,也称为_key-value stores_,通过存储和管理关联数组来工作。关联数组,也称为字典或哈希表,由键-值对的集合组成,其中键用作检索关联值的唯一标识符。值可以是任何东西,从简单的对象(如整数或字符串)到更复杂的对象(如JSON结构)。

Redis是流行的、开源的键值存储的一个例子。

面向文档的数据库

面向文档的数据库或文档存储是以文档的形式存储数据的NoSQL数据库。文档存储是一种键值存储:每个文档都有一个唯一的标识符--它的键--并且文档本身充当值。这两种模型的不同之处在于,在键值数据库中,数据被视为不透明的,数据库不知道或不关心其中保存的数据;这取决于应用程序来了解存储了什么数据。然而,在文档存储中,每个文档都包含某种类型的元数据,这些元数据为数据提供了一定程度的结构。文档存储通常带有API或查询语言,允许用户根据文档包含的元数据检索文档。它们还允许复杂的数据结构,因为您可以将文档嵌套在其他文档中。

MongoDB是一种广泛使用的文档数据库。存储在MongoDB数据库中的文档是用BSON编写的,BSON是JSON的二进制形式。

柱状数据库

分栏式数据库,有时称为面向列的数据库,是以列存储数据的数据库系统。这似乎类似于传统的关系数据库,但不是将列组合到表中,而是将每列存储在系统存储中的单独文件或区域中。列数据库中存储的数据按记录顺序显示,这意味着一列中的第一个条目与其他列中的第一个条目相关。这种设计允许查询只读取它们需要的列,而不必读取表中的每一行,并在数据存储到内存中后丢弃不需要的数据。

apache Cassandra是一个广泛使用的开源列存储。

数据库作为应用的一部分

数据库管理系统本身并不是很有用。您可以使用DBMS直接查询数据库并与之交互,但在大多数实际环境中,您可能希望将其与其他工具结合使用,因为DBMS不能单独提供或显示内容。当这样做时,数据库就成为更大应用程序的基本组件。

有许多流行的开放源码技术堆栈,其中包括DBMS。以下是几个例子:

  • *LAMP stack:)。其他的L MP选项也很常见,比如LEMP,E代表nginx(发音为Engine-x)
  • 弹性stack_:以前称为ELK堆栈,弹性堆栈是围绕弹性搜索构建的,弹性搜索也被描述为面向文档的数据库。这通常用于大规模存储软件输出日志。

这些技术堆栈通常部署在同一台服务器上--一种称为单块体系结构的体系结构模式。在这种情况下,将其他堆栈组件连接到DBMS相当简单。或者,您可以通过在远程服务器上安装DBMS来设置远程数据库。大多数DBMS在专用端口上运行,您可以使用该端口将应用程序服务器连接到远程数据库。例如,MySQL的默认端口是3306,Redis的默认端口是`6379。与单片应用程序相比,使用这样的远程数据库服务器可能是一个高度可伸缩的解决方案,因为它允许您从应用程序中单独扩展数据库。

但是,这样设置远程数据库会增加应用程序的受攻击面,因为它会为未经授权的用户增加更多的潜在入口点。它还要求通过网络连接将您的数据从数据库服务器发送到应用程序服务器,这意味着数据包可能会被恶意行为者拦截。为了保护您的数据免受像这样的嗅探攻击,许多DBMS允许您加密您的数据。加密是将一段信息从明文(信息的原始形式)转换为密文的过程,密文是一种不可读的形式,只有拥有正确的密码来解密它的人或计算机才能读取。如果恶意攻击者拦截一段加密数据,他们将无法读取该数据,直到他们能够解密该数据。

许多DBMS允许您加密数据库服务器与需要访问它的任何客户端或应用程序之间的通信,方法是将其配置为需要使用_Transport Layer Security_(也称为_TLS_)的连接。像它的前身安全套接字层(SSL)一样,TLS是一种加密协议,它使用基于证书的身份验证来加密通过网络传输的数据。请注意,TLS仅在数据通过网络传输时对其进行加密,也称为传输中的数据。即使您已将Mongo配置为要求使用TLS进行连接,存储在数据库服务器上的静态数据(称为_data at rest)仍将是未加密的,除非您的DBMS提供某种形式的静态数据加密。

操作数据库

大多数数据库管理系统都安装了命令行工具,允许您与数据库安装进行交互。示例包括MySQL的mysql命令行客户端、postgresql的psql以及MongoDB Shell.还有可用于许多DBMS的第三方命令行客户端。Redli,就是一个这样的例子,它是Redis默认的‘redis-cli`工具的替代工具,并带有一些额外的功能。

然而,通过命令行界面管理数据并不是每个用户都能直观看到的,这就是为什么许多开源DBMS都有图形数据库管理工具的原因。有些是基于浏览器的,如phpMyAdminpgAdmin,,而另一些则是像MySql WorkbenchMongoDB Compass,]一样,都是为了从本地机器连接到远程数据库。

随着应用程序的持续运行和增长,数据库中保存的数据将需要越来越多的存储,以至于可能会降低整个应用程序的速度。有几种常见的策略来处理此类问题,其中最常见的两种是_replication_和_sharding_。

复制是在多个单独的数据库之间同步数据的实践。在使用数据库时,拥有数据的多个副本通常很有用。这在其中一个数据库服务器发生故障时提供了冗余,可以提高数据库的可用性和可伸缩性,并减少读取延迟。许多DBMS都将复制作为内置功能,包括MongoDBMySQL。有些如MySQL甚至提供了多种复制方法以获得更大的灵活性。

数据库碎片(sharding)是将通常保存在同一个表或集合中的数据记录拆分并将其分布在多台计算机上的过程,称为碎片。切分在处理大量数据的情况下特别有用,因为它允许您通过添加更多可用作新切分的机器来水平扩展您的基础。

结论

通过阅读本文,您应该更好地理解什么是数据库以及如何使用它们。我们鼓励您查看我们数据库内容.)的其余部分

额外资源

教程

  • 如何解决MySQL.中的问题在您诊断MySQL设置时,本系列可作为故障排除资源和起点。它概述了MySQL用户遇到的一些比较常见的问题,并提供了对特定问题进行故障排除的指导。
  • 如何使用pgLoader.将MySQL数据库迁移到PostgreSQL迁移数据库可能是一项困难的任务,尤其是在将数据从一个DBMS移动到另一个DBMS时。本教程重点介绍了开源数据库迁移工具pgLoader,并概述了如何使用它将MySQL数据库迁移到PostgreSQL。
  • 如何使用Stunnel和redis-cli.通过TLS连接到托管Redis实例通常,数据库包含敏感数据。本教程概述了如何通过使用Stunnel创建的安全隧道连接到托管的Redis数据库。
  • 如何在MongoDB.中执行CRUD操作 CRUD** (** C** Reate、** R** ead、** U** pdate和** D** Elete)操作是DBMS需要执行的四种基本操作。本教程概述了什么是CRUD操作以及如何在MongoDB数据库上执行它们。

DigitalOcean产品

  • DigitalOcean提供多种托管Databases,],允许您在未来配置和使用数据库服务器,而无需对其进行配置、执行备份或更新。目前,DigitalOcean为以下四个DBMS提供托管数据库: --MongoDB --PostgreSQL --MySQL --Redis
  • 您还可以在数字海洋市场上找到各种数据库solutions。这些选项允许您只需点击几下即可启动数据库服务器,并带有MySQLMongoDBRethinkDB,等选项。
Published At
Categories with 技术
comments powered by Disqus