概念性——数据库简介

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。

概念性——数据库简介

介绍

数据对于当今许多应用程序和网站的运行至关重要。对热门视频的评论、多人游戏中分数的变化以及我们在最喜欢的在线商店的购物车中留下的物品都是存储在数据库中某处的信息。

这篇概念性文章介绍了许多数据库主题。它简要概述了云计算背景下的数据库,并重点介绍了数据库设计和功能的一些核心概念。它还包含整个相关概念和程序教程的链接。

什么是数据库?

从广义上讲,数据库是任何逻辑建模的信息集合。数据库不一定必须存储在计算机上,诸如医院中的一堆患者档案、名片盒中的一组联系人或装满旧发票的文件柜等都可以作为数据库的示例。

在网站和应用程序中,当人们提到“数据库”时,他们通常指的是允许他们与数据库交互的计算机程序。这些程序更正式地称为数据库管理系统(DBMS),通常安装在虚拟专用服务器上并进行远程访问。

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

关系数据库

自 20 世纪 70 年代以来,大多数 DBMS 都是围绕关系模型设计的。关系模型中最基本的元素是关系,用户和现代 关系 DBMS(RDBMS 或关系数据库)将其识别为。关系是一组元组或表中的行,每个元组共享一组属性或列:

关系、元组和属性如何相互关联的图表示例

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

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

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

EMPLOYEE 表的主键如何充当 SALES 表的外键的图表示例

关系模型的结构元素有助于以有组织的方式存储数据,但存储数据只有在可以检索数据时才有用。要从 RDBMS 检索信息,我们可以发出查询或对一组信息的结构化请求。大多数关系数据库使用一种称为结构化查询语言的语言(更广为人知的名称是SQL,非正式发音如“sequel”)来管理和查询数据。SQL 允许我们使用各种子句、谓词和表达式来过滤和操作查询结果,从而使我们可以很好地控制结果集中出现的数据。

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

  • MySQL
  • MariaDB
  • PostgreSQL
  • SQLite

非关系数据库

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

关系模型的这些和其他限制导致了替代方案的开发。这些数据库模型通常统称为非关系数据库。由于这些替代模型通常不实现 SQL 来定义或查询数据,因此它们有时也称为NoSQL 数据库。这也意味着许多 NoSQL 数据库实现了独特的语法来插入和检索数据。

将“NoSQL”和“非关系”视为广义的总括术语会有所帮助,因为有许多数据库模型被标记为 NoSQL,它们之间存在显着差异。本节的其余部分重点介绍一些更常用的非关系数据库模型:

键值数据库

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

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

面向文档的数据库

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

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

列式数据库

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

Apache Cassandra是一种广泛使用的开源列存储。

数据库和应用

数据库管理系统本身并不是很有用。我们可以使用 DBMS 直接查询数据库并与数据库交互,但在大多数现实环境中,我们可能希望将其与其他工具结合使用,因为 DBMS 无法自行提供或显示内容。这样做后,数据库就成为大型应用程序的重要组成部分。

有许多流行的开源技术堆栈都包含 DBMS。这里有一些例子:

  • LAMP 堆栈:“LAMP”是由通常构成该堆栈的技术组成的缩写: L inux 操作系统、 A pache Web 服务器、 MySQL数据库和用于动态内容处理的 PHP**。**LAMP 堆栈的各个部分换入换出的情况越来越常见(例如,用 PostgreSQL 或 SQLite 代替 MySQL,用 Flask 或 Django 代替 PHP,用 Nginx 代替 Apache)。其他 L*MP 选项也很常见,例如 LEMP,其中 E 代表 Nginx(发音为 engine-x)
  • Elastic stack:Elastic stack 以前称为 ELK Stack,是围绕 Elastic search 构建的,Elastic search 是一种搜索引擎,也被称为面向文档的数据库。这通常用于大规模存储软件输出日志。

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

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

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

使用数据库

大多数数据库管理系统都安装了命令行工具,允许我们与数据库安装进行交互。

然而,通过命令行界面管理数据对于每个用户来说可能并不直观,这就是为什么许多开源 DBMS 都可以使用图形数据库管理工具。有些(如phpMyAdminpgAdmin是基于浏览器的,而另一些(如MySQL WorkbenchMongoDB Compass)则旨在从本地计算机连接到远程数据库。

随着应用程序不断运行和增长,数据库中保存的数据将需要越来越多的存储空间,甚至可能会减慢整个应用程序的速度。处理此类问题有几种常见的策略,其中最常见的两种是复制分片

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

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

结论

通过阅读本文,我们应该更好地了解什么是数据库以及如何使用它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/348468.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精酿啤酒的原料供应链:质量控制的重要性

对于啤酒的品质和口感,原料供应链的质量控制是重要的。特别是对于Fendi Club这样品质的啤酒,其原料供应链的管理更是重中之重。下面,我们将深入探讨Fendi Club啤酒如何对其原料供应链进行质量控制,以确保啤酒的品质和口感。 首先&…

专业144总分410+华南理工大学811信号与系统考研经验华工电子信息与通信

今年专业811信号与系统144(二战,感谢信息通信Jenny老师专业课对我的巨大提高,第一年自己复习只考了90,主要栽专业课和数学)总分410含泪(二战的同学都知道苦,成功来之不易)考上华南理…

【IC设计】Vivado单口RAM的使用和时序分析

文章目录 创建单口RAM IPIP Catalog中选择单口RAM IPBasicPort A OptionsOther Options 仿真找到IP例化原语编写Testbench 波形分析 创建单口RAM IP IP Catalog中选择单口RAM IP Basic Port A Options Other Options 仿真 找到IP例化原语 IP Sources-Instantiation Template…

深度了解TCP/IP模型

网络通信是现代社会不可或缺的一部分,而TCP/IP模型作为网络通信的基石,扮演着至关重要的角色。本文将深入探讨TCP/IP模型的概念、结构及其在网络通信中的作用,为读者提供全面的了解。 一.TCP/IP模型简介 TCP/IP模型是一个网络通信协议体系&a…

Android Settings 按住电源按钮

如题,Android 原生 Settings 里有个 按住电源按钮 的选项,可以设置按住电源按钮的操作。 按住电源按钮 两个选项的 UI 是分离的, 电源菜单 代码在 packages/apps/Settings/src/com/android/settings/gestures/LongPressPowerForPowerMen…

使用WebDriver采样器将JMeter与Selenium集成

第一步: 在JMeter中添加Selenium / WebDriver插件 第二步: 创建一条测试计划–添加线程组 添加配置元素 - jpgc - WebDriver Sampler 添加配置元素 - jpgc - Chrome Driver Config 并且添加监听器查看结果树 第三步: 下载 chromedriver…

威士忌的类型:从单一麦芽到混合威士忌

威士忌,这种源自苏格兰的特别蒸馏酒,如今已在全球范围内赢得了无数赞誉。其类型多样,从单一麦芽到混合威士忌,每一种都有其特别的特点和风味。本文将深入探讨不同类型的威士忌,以雷盛537威士忌的实例,分析其…

AWS 专题学习 P9 (API Gateway、Cognito、Serverless SA)

文章目录 专题总览API GatewayAPI Gateway – 高级集成API Gateway – AWS 服务集成API Gateway - Endpoint TypesAPI Gateway – 安全 AWS Step Functions(AWS 步骤函数)Amazon Cognito(认证服务)Cognito User Pools (CUP) – 用…

【云原生】Docker网络模式和Cgroup资源限制

目录 一、Docker 网络实现原理 二、Docker 的网络模式 #网络模式详解: 第一种:host模式 第二种:bridge模式 第三种:container模式 第四种:none模式 第五种:自定义网络 三、Cgroup资源控制 第一种&a…

中断与事件区别

自记: 以外部中断举例: 这张图是一条外部中断线或外部事件线的示意图, 图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套. 图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边…

Java实现校园疫情防控管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

php实现多进程的几种方式

目录 一:使用pcntl扩展库 二:使用Swoole扩展 三:使用多进程模式PHP-FPM 在PHP中实现多进程主要有以下几种方式: 一:使用pcntl扩展库 pcntl扩展库提供了多线程相关的函数,如pcntl_fork()用于创建子进程…

vue常用指令(v-show)

一、v-show 指令 作用: 根据真假值,切换元素的显示状态 二、代码演示 1、v-show 绑定判断条件后&#xff0c;根据布尔值决定是否显示图片 不显示图片 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

pve8.1 安装、创建centos7虚拟机及配置

之前创建虚拟机centos7时&#xff0c;硬盘分配太大了&#xff0c;做成模板后无法进行修改了&#xff0c;安装完pve8.1后&#xff0c;强迫症犯了重新创建一下顺便记录一下配置过程。由于目前centos7还是生产用的比较多的版本所以本次还是安装centos7.9版本。 一、下载镜像 下载…

mysql 多版本并发控制mvcc

行级锁的一个变种避免了加锁&#xff0c;开销低非阻塞读操作&#xff0c;写操作是行级原理&#xff1a;使用数据在某个时间点的快照实现&#xff0c;不同事务在同一个时间可以看到同一个表中的不同数据。分类&#xff1a;乐观&#xff0c;悲观在一行中存储更多数据&#xff0c;…

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

统计学-R语言-7.4

文章目录 前言非参数检验两个独立样本的Mann-Whitney检验 练习 前言 本片是对非参数检验最后的介绍。 非参数检验 两个独立样本的Mann-Whitney检验 Mann -Whitney检验也称为Mann- Whitney U检验&#xff08;Mann-Whitney U test&#xff09;或称为 Wilcoxon秩和检验&#xf…

C++ Qt day2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <io…

UDP 的报文结构和注意事项

1. UDP的特点 1.无连接 就像发短信给对方&#xff0c;只需要对方的端口和IP地址。不需要连接。 2.不可靠传输 没有任何安全机制&#xff0c;发送端发送数据报以后&#xff0c;如果因为⽹络故障该段⽆法发到对⽅&#xff0c;UDP协议层也不会给应⽤层返回任何错误信息。 3.面向…

Java PDFBox 提取页数、PDF转图片

PDF 提取 使用Apache 的pdfbox组件对PDF文件解析读取和转图片。 Maven 依赖 导入下面的maven依赖&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version> &l…
最新文章