重生之我要学后端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段的,以下为命令࿱…...
【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格式的文件。使用>和<号的时候,会存在与xml的标签的规范冲突。需要写成如下形式,否则会报错。 第一种写法 原符号 替换符号 < < < <> > > >& & &…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
