当前位置: 首页 > news >正文

重生之我要学后端11--数据库基础概念(持续更新)

数据库

  • 前言
  • 一、关系型数据库
  • 二、非关系型数据库
  • 三、应用场景
    • 关系型数据库(RDBMS)
    • 非关系型数据库(NoSQL)
    • 综合因素

前言

后端开发者应该熟悉数据库管理系统(DBMS),包括关系型数据库(如MySQL, PostgreSQL)和非关系型数据库(如MongoDB, Redis)的基本操作。了解如何设计数据库模式、执行CRUD操作(创建、读取、更新、删除)、编写SQL查询等是很有必要的。

一、关系型数据库

关系型数据库以表格的形式存储数据,其中每张表都有其定义好的模式(schema),指定了各个字段的数据类型和约束。常见的关系型数据库包括MySQL、PostgreSQL、Oracle、SQL Server等。

数据库设计

  • 规范化:数据库设计通常涉及规范化过程,这是一种避免冗余和依赖性的结构化技术,确保数据的逻辑存储。
  • 表设计:确定如何将数据分组到不同的表中,并定义表的列(属性)和数据类型。
  • 关系:设计表之间的关系,如一对一、一对多、多对多关系,并使用外键约束来维护数据的完整性。

CRUD操作

  • 创建(Create):插入新记录到数据库表中。
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
  • 读取(Read):查询数据库获取信息。
SELECT * FROM users WHERE username = 'john_doe';
  • 更新(Update):修改现有数据库记录。
UPDATE users SET email = 'john_doe_new@example.com' WHERE username = 'john_doe';
  • 删除(Delete):从数据库删除记录。
DELETE FROM users WHERE username = 'john_doe';

SQL查询编写

  • 基础查询:使用SELECT语句来选取数据。
  • 联结:使用JOIN语句来合并多个表的数据。
  • 子查询:在另一个SQL查询内部进行SQL查询。
  • 聚合:使用如SUM, AVG, COUNT等函数进行数据汇总。
  • 排序和筛选:使用ORDER BY和WHERE语句进行结果的排序和筛选。

二、非关系型数据库

非关系型数据库(NoSQL)有多种类型,包括文档型、键值存储、宽列存储和图形数据库等。它们没有固定的模式,可以存储半结构化数据或无结构化数据,并且在处理大量分布式数据时通常具有更高的伸缩性和灵活性。常见的非关系型数据库包括MongoDB、Redis、Cassandra、Neo4j等。

基本操作

  • 文档型数据库(如 MongoDB):集合中存储文档(通常是JSON格式),每个文档都可以有不同的结构。
    • 创建文档:db.collection.insertOne({})
    • 读取文档:db.collection.find({})
    • 更新文档:db.collection.updateOne({}, {})
    • 删除文档:db.collection.deleteOne({})
  • 键值数据库(如 Redis):通过唯一键存储和检索值。
    • 设置键值:SET key value
    • 获取键值:GET key
    • 键值过期:EXPIRE key seconds
    • 删除键:DEL key
  • 宽列存储(如 Cassandra):类似于关系型数据库的表,但每行可以有不同的列集合。
  • 图形数据库(如 Neo4j):存储节点(entities)和边(relationships),适用于表示复杂的关系网络。
    设计和建模
  • 根据应用程序的查询需求和数据访问模式来设计存储结构。
  • 在文档型数据库中,通常需要平衡嵌入文档与引用其他文档之间的关系。
  • 对于键值数据库,重点是如何有效地组织键以便于快速检索。

后端开发者应该了解如何选择适合特定用例的数据库系统,并掌握执行CRUD操作、编写查询、优化性能和确保数据一致性的方法。随着项目需求的变化,可能还需要对数据库结构进行调整或迁移。

三、应用场景

选择数据库系统时应考虑多种因素,包括数据模型、查询模式、一致性需求、伸缩性和可用性。以下是关系型数据库和非关系型数据库的一些常见应用场景:

关系型数据库(RDBMS)

  • 结构化数据存储:如果您的数据是高度结构化的并且需要以表格形式组织,关系型数据库是优秀的选择。

  • 复杂查询:支持复杂的JOIN操作和事务处理,适合需要执行复杂查询的应用。

  • 数据完整性:如果需要强一致性和复杂的事务管理(ACID属性),关系型数据库提供了这些功能。

  • 标准化操作:使用标准化的SQL语句进行操作,有利于维护和迁移。

应用场景:

  • 金融服务行业:银行、保险和其他金融机构需要精确的事务处理和报告。
  • 电子商务平台:订单管理、库存跟踪和用户信息存储等。
  • 企业级应用程序:需要强数据完整性和标准操作的场景,如CRM、ERP系统。

非关系型数据库(NoSQL)

  • 半结构化或无结构化数据:非关系型数据库可以更灵活地处理不同类型和格式的数据。

  • 水平扩展:相比于关系型数据库通常的垂直扩展,许多非关系型数据库容易实现水平扩展,即通过增加更多服务器来提高性能。

  • 高吞吐量和低延迟:特别适合需要快速读写操作的应用,例如在大规模的分布式系统中。

  • 特定数据模型优势:如文档数据库很适合JSON数据存储和检索,键值存储简单快速,宽列存储适合大量数据的分析,图形数据库优秀于关系密集型的数据分析。

应用场景:

  • 大数据处理和实时分析:适用于需处理大量数据的场景,如日志分析、用户行为追踪。
  • 社交网络平台:非关系型数据库可方便地存储和处理社交网络中的复杂关系网。
  • 缓存:键值存储如Redis常作为缓存解决方案,提高数据读取速度。
    内容管理系统和博客平台:文档数据库如MongoDB适合存储动态变化的内容。
  • IoT应用:物联网设备产生的数据量巨大且多样,非关系型数据库能够有效地处理这些数据。

综合因素

在选择数据库时,还需要考虑以下因素:

  • 预算和资源:商业数据库可能有额外成本,而开源数据库虽然免费但可能需要投入时间进行管理和维护。
  • 技术栈兼容性:数据库是否与现有的技术栈和团队技能相匹配。
  • 社区和支持:一个活跃的开发者社区和良好的技术支持是成功采用任何数据库技术的关键因素。
  • 数据安全和合规性:确保所选数据库符合行业安全标准和法规要求。
  • 未来的伸缩性和可维护性:预测业务增长和数据增长,并确定数据库是否能够应对这些挑战。

最终,选择哪种数据库通常取决于具体项目的需求、预算和开发团队的经验。有时候,混合使用关系型和非关系型数据库的多数据库架构也是可行的,以便更好地满足不同的需求和目标。

(后续进一步学习会单独开分栏)

相关文章:

重生之我要学后端11--数据库基础概念(持续更新)

数据库 前言一、关系型数据库二、非关系型数据库三、应用场景关系型数据库(RDBMS)非关系型数据库(NoSQL)综合因素 前言 后端开发者应该熟悉数据库管理系统(DBMS),包括关系型数据库(…...

配置 Cmder 到鼠标右键

win Q 快捷键搜索 cmd,以管理员身份运行 在命令行输入 cmder.exe /REGISTER ALL...

kali下安装使用蚁剑(AntSword)

目录 0x00 介绍0x01 安装0x02 使用1. 设置代理2. 请求头配置3. 编码器 0x00 介绍 蚁剑(AntSword)是一个webshell管理工具。 官方文档:https://www.yuque.com/antswordproject/antsword 0x01 安装 在kali中安装蚁剑,分为两部分&am…...

GIT-LFS使用

0.前言 目前git仓库有很多很大的文件需要管理,但是直接上传,每次clone的文件太大,所有准备使用git-lfs解决。 1、下载和安装 Git LFS 1.1、直接下载二进制包: Releases git-lfs/git-lfs GitHub 安装 Git LFS sudo rpm -ivh…...

免费分享一套SpringBoot+Vue在线水果(销售)商城管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue在线水果(销售)商城管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue在线水果(销售)商城管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue在线水果(销售)商…...

推荐两款电脑文件处理工具,强大到你不舍得卸载

EasyFileCount EasyFileCount是一款基于Java开发的多功能文件管理工具,旨在帮助用户更轻松地管理和优化他们的文件存储。以下是EasyFileCount的主要功能和特点: 查看文件夹大小:用户可以快速统计和查看文件夹的总大小,实时显示各…...

Python 高级实战:基于自然语言处理的情感分析系统

前言 在大数据和人工智能迅猛发展的今天,自然语言处理(NLP)作为人工智能的重要分支,已经深入到我们的日常生活和工作中。情感分析作为NLP中的一个重要应用,广泛应用于市场分析、舆情监控和客户反馈等领域。本文将讲述…...

ruby面试题

ruby 基础 1、each、map、collect的区别 each: 仅遍历数组,并做相应操作,数组本身不发生改变。 map:遍历数组,并做相应操作后,返回新数组(处理),原数组不变。 collect: 跟map作用一样。 collect! map!: 多了一个作…...

Android U Settings 应用中 APN 菜单实现的代码逻辑

功能简介 MobileNetwork移动网络设置页面下有【接入点设置】(APN)。 问题:为什么Controller初始化找不到pref,然后报错。 Note:什么时候切换成Controller的呢?在Android T&U 上还没有更新成kt实现 ,但是已经有Controller的方案。 流程逻辑 1、界面“telephony_a…...

java时间处理工具类

效果 最近7天:2024年6月21日-2024年6月27日过去一周、最近一周:2024年6月16日-2024年6月22日过去三个月:2024年3月-2024年6月近半年、过去半年:2023年12月-2024年6月去年:2023年1月-2023年12月过去3年:202…...

Android高级面试_2_IPC相关

Android 高级面试-3:语言相关 1、Java 相关 1.1 缓存相关 问题:LruCache 的原理? 问题:DiskLruCache 的原理? LruCache 用来实现基于内存的缓存,LRU 就是最近最少使用的意思,LruCache 基于L…...

docker封禁对外端口映射

docker比linux防火墙规则优先级要高,一旦在docker里面配置了对外服务端口的话在iptable里面封不掉,需要通过下面的方法进行封禁: 这里我的宿主机IP地址是10.5.1.244,docker 内部网络ip段是默认的172.17段的,以下为命令&#xff1…...

【leetcode系列】567.字符串的排列(滑动窗口)

题目 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 示例 1: 输入:s1 “ab” s2…...

情感分析方法与实践

第1关:情感分析的基本方法 情感分析简介 情感分析,又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。在日常生活中,情感分析的应用非常普遍,下面列举几种常见的…...

迁移学习——CycleGAN

CycleGAN 1.导入需要的包2.数据加载(1)to_img 函数(2)数据加载(3)图像转换 3.随机读取图像进行预处理(1)函数参数(2)数据路径(3)读取文…...

【软件测试】对于测试中的bug,我们真正了解了吗?

目录 1.软件测试的生命周期 1.1.软件测试阶段流程 1.2.各流程的任务 2.什么是bug 2.1.bug的概念 2.2.怎么描述bug 2.3.bug的级别 2.4.bug的生命周期 1.软件测试的生命周期 在学习bug前,我们先来学习一下软件测试的生命周期,也就是测试人员进行测…...

Packer-Fuzzer一款好用的前端高效安全扫描工具

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、Packer Fuzzer介绍 Packer Fuzzer是一款针对Webpack…...

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…...

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时,先将数据库文件打包,放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中,可以用7zip查看apk文件 2.在qt代码读取数据文件,注意在assets下的文件都是Read-Only,需…...

MYBATIS大于等于、小于等于的写法

mybatis使用的是xml格式的文件。使用>和<号的时候&#xff0c;会存在与xml的标签的规范冲突。需要写成如下形式&#xff0c;否则会报错。 第一种写法 原符号 替换符号 < < < <> > > >& &amp; &…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...