概念性——数据库简介

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

概念性——数据库简介

介绍

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

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

什么是数据库?

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

在网站和应用程序中,当人们提到“数据库”时,他们通常指的是允许他们与数据库交互的计算机程序。这些程序更正式地称为数据库管理系统(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.mzph.cn/news/647382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos手动下载配置redis并自启动

有些服务器不能自动安装配置redis,仓库找不到之类的问题,就需要手动下载配置redis,记录下,方便以后使用(ps,如果报错可能是gcc缺失) 1、下载 Redis 源码包:访问 Redis 官网或可信的…

基于时空模型的视频异常检测

假设存在一个运动区域,规则要求只能进行特定的运动项目。 出于安全原因或因为业主不喜欢而禁止进行任何其他活动:)。 我们要解决的问题是:如果我们知道正确行为的列表,我们是否可以创建一个视频监控系统,在出现不常见的行为发出通…

37、Flink 的CDC 格式:debezium部署以及mysql示例(1)-debezium的部署与示例

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的…

UE5 Chaos系统 学习笔记

记得开插件: 1、锚点场 在锚点场范围内的物体静止且不被其他力场损坏 2、ClusterStrain 破裂效果的力 3、DisableField chaos破裂后的模拟物理在绿色范围内禁止模拟物理 4、ForceAndStrain 破裂效果的力 5、ForceAndStrainFallOff 破裂效果的力,但是…

浅析Redis②:命令处理之epoll实现(中)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库,其重要性不言而喻,作为普通开发者,我们在日常开发中使用Redis,主要聚焦于Redis的基层数据结构的命令使用,很少会有人对Redis的内部实现机制进行了解&#xff0c…

HarmonyOS应用模型概述

应用模型的构成要素 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。 HarmonyOS应用模型的构成要…

leetcode:2859. 计算 K 置位下标对应元素的和(python3解法)

难度:简单 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的 置位 。 例如&#xf…

Vulnhub靶机:FunBox 7

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:FunBox 7(10.0.2.34) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/funb…

Ubuntu apt update提示:GPG 缺少公钥解决方法

Ubuntu 运行: sudo apt update #or sudo apt-get update提示:GPG 缺少公钥以及404 Not Found,如下面所示,有mirror.bwbot.org 和ppa.launchpadcontent.net两个源出现问题。 好多网友用后面的方法解决 真正解决:gpg --verify sig:…

vue超链接传值、查看页面以及父子传值

<el-table-column label"电表编码" align"center" width"120" prop"electricalNum" ><template slot-scope"scope"><div style"text-align: left"><router-link :to"/equipment/electr…

深度学习(6)---Transformer

文章目录 一、介绍二、架构2.1 Multi-head Attention2.2 Encoder(编码器)2.3 Decoder(解码器) 三、Encoder和Decoder之间的传递四、Training五、其他介绍5.1 Copy Mechanism5.2 Beam Search 一、介绍 1. Transformer是一个Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;…

mapstruct自定义转换,怎样将String转化为List

源码&#xff1a;https://gitee.com/cao_wen_bin/test 最近在公司遇到了这样一个为题&#xff0c;前端传过来的是一个List<Manager>,往数据库中保存到时候是String&#xff0c;这个String使用谷歌的json转化器。 当查询的时候在将这个数据库中String的数据以List<Mana…

Mysql索引相关学习笔记:B+ Tree、索引分类、索引优化、索引失效场景及其他常见面试题

前言 索引是Mysql中常用到的一个功能&#xff0c;可以大大加快查询速度&#xff0c;同时面试中也是经常碰到。本文是学习Mysql索引的归纳总结。 索引采用的数据结构——B 树 本部分主要是参考自小林Coding B树的由来 二分查找可以每次缩减一半&#xff0c;从而提高查找效率…

对话框与多窗体设计 —— 标准对话框

三、对话框与多窗体设计3.1 标准对话框3.1.1 QFileDialog对话框3.1.2 QColorDialog对话框3.1.3 QFontDialog对话框3.1.4 QInputDialog标准输入对话框3.1.5 QMessageBox消息对话框 三、对话框与多窗体设计 一个完整的应用程序设计中&#xff0c;不可避免地会涉及多个窗 体、对框…

vue---打印本地当前时间Demo

<template><view class"content" tap"getCurrentTime()">打印时间</view> </template><script>export default {data() {return {title: Hello}},onLoad() {},methods: {getCurrentTime() {//获取当前时间并打印var _this …

springboot127基于Springboot技术的实验室管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Elasticsearch内核解析 - 数据模型篇

Elasticsearch内核解析 - 数据模型篇 - 知乎 Elasticsearch是一个实时的分布式搜索和分析引擎&#xff0c;它可以帮助我们用很快的速度去处理大规模数据&#xff0c;可以用于全文检索、结构化检索、推荐、分析以及统计聚合等多种场景。 Elasticsearch是一个建立在全文搜索引擎…

蓝牙 | 软件: Qualcomm BT Audio 问题分析(1)----ACAT Tools安装

大家好&#xff01; 我是“声波电波还看今朝”成员的一位FAE Devin.wen&#xff0c;欢迎大家关注我们的账号。 今天给大家大概讲解“如何排查Qualcomm BT Audio”的疑难杂症&#xff08;一&#xff09;如何安装ACAT Tools。 大家在遇到Audio方面的问题&#xff0c;比如 无声、…

[蓝桥杯]真题讲解:飞机降落(DFS枚举)

[蓝桥杯]真题讲解&#xff1a;飞机降落&#xff08;DFS枚举&#xff09; 一、视频讲解二、暴力代码&#xff08;也是正解代码&#xff09; 一、视频讲解 视频讲解 二、暴力代码&#xff08;也是正解代码&#xff09; //飞机降落&#xff1a; 暴力枚举DFS #include<bits/…

【python】自动微分的一个例子

一、例子 import torchx torch.arange(4.0) x.requires_grad_(True) y 2 * torch.dot(x, x) print(y) y.backward() x.grad 4 * x print(x.grad) 二、解读 1. import torch 这一行导入了PyTorch库。PyTorch是一个开源的机器学习库&#xff0c;广泛用于计算机视觉和自然语…