存储与数据库 | 字节青训营笔记

news2024/11/26 22:47:41

目录

一、存储系统

1、什么是存储系统

2、存储系统的特点

3、RAID技术

RAID出现的背景

RAID 0

RAID 1

RAID 0+1

二、数据库

1、难道数据库和存储系统不一样吗

2、数据库vs经典存储

三、主流产品剖析

1、单机存储

本地文件系统

key-value存储

2、分布式存储系统

分布式文件系统

分布式对象存储

3、单机数据库

关系型数据库

非关系型数据库

4、分布式数据库

解决容量问题

解决弹性问题

解决性价比问题

总结


一、存储系统

1、什么是存储系统

一个提供了读写、控制类接口,能够安全有效的把数据持久化的软件,就可以称为存储系统

2、存储系统的特点

  • 作为后端软件的底座,对性能极其敏感
  • 存储系统软件架构,容易受硬件影响(只要硬件发生变革,软件的代码可能也会改变)
  • 存储系统的代码,既简单(要代码要简单不然性能差),又复杂(要考虑到各种情况,防止出问题,要考虑到各种硬件是否会坏什么的)

3、RAID技术

单机存储系统怎么做到高性能/高性价比/高可靠性?

RAID出现的背景

  • 单块大容量磁盘的价格>多块小容量磁盘
  • 单块磁盘的写入性能<多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限,不够安全

RAID 0

多块磁盘简单组合,数据条代话存储,提高磁盘带宽,没有额外的容错设计。(比如把一块私盘分为两个,存储1000mb的文件分为两个500的分别存到第一快的1位置和第二块的1位置,这样分开存入,速度肯定是增加了)

RAID 1

一块磁盘对应一块而外的磁盘镜像,真实的空间利用率只有百分之50,容错能力强(分两块,一块存数据,另一个存镜像,复制一样的)

RAID 0+1

这种就是结合了上面两种情况,把0的高性能和1的容错率结合,真实存储还是百分之50为了存镜像,但是用了0的分开写,性能快了。

二、数据库

1、难道数据库和存储系统不一样吗

数据库分为 关系型数据库 和 非关系型数据库 

关系数据库是存储系统,但是存储之外,又发展出其他能力(结构化数据友好,支持事务,支持复杂的查询语言)

非关系型数据库也是存储系统,但是一般不要求严格的结构化,半结构化数据友好,可能支持事务,可能支持复杂查询语句

2、数据库vs经典存储

数据库支持结构化数据管理

数据库支持事务

数据库支持复杂的查询

三、主流产品剖析

1、单机存储

单机存储系统就是单个计算机节点上的存储软件系统,一般不实际网络交互

本地文件系统

linux的哲学就是一切皆文件,所以文件系统的管理单元就是文件。

key-value存储

世间一切皆key-value,key可以是你的身份证,value是你的内涵

常见的使用方式:put & get

2、分布式存储系统

分布式存储=单机存储的基础上实现了分布式协议,涉及大量网络交互

分布式文件系统

HDFS:堪称大数据时代的基石

当时时代背景,专用的高级硬件很贵,同时数据存量很大,要求超高吞吐,于是就想说要很多海量的便宜的硬件堆起来实现,支持海量存储,吞吐量大,而且因为硬件都是很多便宜的组成,容易坏,所以要求高容错性极高的性价比

分布式对象存储

Geph:开源的分布式存储系统的万金油

特点:一套系统支持对象接口、快接口、文件接口、但是一切皆对象。数据写入采用主备复制模型,数据布模型采用CRUSH算法(一份数据为了保证可靠性分为很多副本,分布到哪里通过分布算法实现)

3、单机数据库

单机数据库是单个计算机节点上的数据存储系统,事务在单机内执行,也可能通过网络交互实现分布式事务

关系型数据库

Oracle和MySQL

非关系型数据库

MongoDB、redis、elasticsearch三足鼎立

交互方式各不相同,schema相对灵活,都在想办法支持sql子集和事务

elasticsearch是基于文档来存储,可以序列化为json,支持嵌套,实现了大量搜索数据结构和算法,支持restful api也支持弱sql交互

mongoDB面向文档存储,可以序列化json和bason支持嵌套,4.0后也开始支持事务,也可以通过插件支持弱sql

redis数据结构非常丰富,纯c实现,超高性能,主要基于内存,但支持aof和rdb两种方式来持久化,redis-cli多语言sdk交互

4、分布式数据库

单机数据库遇到了什么问题?这么好了为什么还要卷到分布式架构?

解决容量问题

单点容量有限,受硬件限制,我们把存储节点池化,不够的话就的动态扩容增加节点

解决弹性问题

当用户原本服务的数据库不够用了,不如一个服务突然火爆,那么肯定得换更好的机器来带,更大的内存cpu和数据库,数据库的扩容更换是要很长时间的,然后等一段时间又没人了,系统又要换回小容量数据库cpu这些,换来换去就很慢,为了解决这种弹性问题,也可以用上面这种池化技术。

解决性价比问题

有可能我们只要分配数据库容量增加,并不需要增加cpu和内存,分多了cpu过剩就会导致性价比低,那么我们也可以用这种池化的技术,不用分配cpu可以不变内存可以因为池化动态扩容的,不会因为配置更多的容量而要更好的cpu。

不仅如此,我们还要解决更难的

多写问题、从磁盘弹性改到内存弹性、分布式事务优化

总结

在存储和数据库的领域,硬件反推软件变革十分常见!

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

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

相关文章

【程序员陪你过大年】html+css+js 实现春节动态烟花特效及服务器部署

前言 不知不觉又到了年底&#xff0c;这一年是值得庆贺的一年&#xff0c;疫情过去&#xff0c;经济好转。我们急需在春节这个特殊的日志释放下自己的情绪。但是大部分地区都不让放炮&#xff0c;于是乎我为大家带来一套十分炫酷应景的春节烟花动画代码实现。效果如下图所示 :…

第10章 FreeRTOS

ESP32 FREERTOS 打印ESP32任务 menuconfig中&#xff0c;打开FreeRTOS的trace打印功能 menuconfig中&#xff0c;增加app_main主任务的栈大小 测试代码 ESP32最小工程 #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&q…

php sql注入

文章目录一、什么是sql注入二、sql注入处理1、使用内置函数2、使用pdo预处理语句三、安全注意事项一、什么是sql注入 在应用程序中&#xff0c;为了和用户交互&#xff0c;允许用户提交输入数据&#xff0c;假如应用程序并没有对用户输入数据进行处理&#xff0c;攻击者可以输…

linux开发工具

文章目录linux开发工具1.软件包管理器yum2.编辑器vim3.gcc4.make与makefile5.git6.gdb7.小程序进度条linux开发工具 1.软件包管理器yum yum等同于手机上的应用商店.yum自动解决软件之间的耦合问题 yum list 显示软件清单 yum install 下载 yum remove 删除 2.编辑器vim 其…

opencv开发之numpy使用

打开Spyder, 在IPython控制台中输入 import numpy as np 引入numpy库并使用numpy构造一个ndarray对象: np.zeros((2,4),np.uint8),该对象为一个二维数组 ,构造一个2行4列的二维数组(矩阵) ,并初始化所有元素为0,及指定数据类型为uint8 创建并初始化:数据可视化:取矩阵类型: typ…

基于YOLOv4的车辆检测 MATLAB实现

目录 摘要 研究背景 算法设计及实现过程 车辆目标数据集的构建 基于YOLOv4的目标检测 对YOLOv4模型进行改进 实验结果及分析 结论与展望 代码实现 摘要 针对车辆检测&#xff0c;本文提出了一种基于YOLOv4车辆检测算法。制作了一个多天侯、多时段、多场景的车辆目标数…

怎么拆分PDF文件,教你用最简单的方法

PDF文档拆分是一种很常见的需求。因为有时候文档页数过多&#xff0c;打开和阅读都不太方便&#xff0c;我们可以通过拆分把想要的部分提取出来。拆分PDF的时候可以借助一些工具更快更有效地达成目的&#xff0c;这里就给大家介绍几款比较受欢迎的处理工具&#xff0c;它们在辅…

Linux——系统管理篇

1、、Linux 中的进程和服务 计算机中、一个正在执行的程序或命令&#xff0c;叫进程&#xff08;process&#xff09;。 启动之后一直存在、常驻内存的进程&#xff0c;一般称为“服务”&#xff08;Service&#xff09; // 我更喜欢叫它守护进程 Daemon 比如windows的那一堆…

软件测试面试,如何自我介绍?

01 如何自我介绍 面试过程中一定要放慢语速&#xff0c;做到条理清晰。特别是做自我介绍时&#xff0c;可以适当多介绍自己会什么&#xff0c;有哪些重要经验。 例如&#xff1a; 面试官&#xff0c;上午/下午好。 我是XXX&#xff0c;今天来面试贵公司的软件测试工程师岗位&a…

利用QT 的 Graphics View 系统实现一个 简易的 Graph Editor

QT 中的 Graphics View 系统. 是一个相对成熟的渲染引擎的上层框架&#xff0c;通常也可以会叫做 Scene - View。 通常会有 QGraphicsView, QGraphicsScene, QGraphicsItem 这几个类构成。 view是视口(viewport)&#xff1b;scene是一个场景&#xff0c;负责容纳各种item&…

JS语言基础

目录 语法 关键字与保留字 变量 var关键字 let声明 暂时性死区 全局变量 for循环中的let声明 条件声明 const声明 语法 1. 区分大小写 无论是变量、函数名还是操作符&#xff0c;都区分大小写。 2. 标识符 所谓标识符&#xff0c;就是变量、函数、属性或函数参数的名…

centos7配置(nvidia+cuda+cudnn+anaconda+tensorflow)gpu开发环境

一、安装准备 1、查看nvidia显卡&#xff0c;我的是T4显卡 lspci | grep -i nvidia2、查看linux系统版本 uname -m && cat /etc/redhat-release3、安装依赖 yum install gcc kernel-devel kernel-headers二、安装nvidia驱动 1、禁用nouveau lsmod | grep nouveau…

Powershell渗透框架

文章目录Powershell基础Powershell简介什么是 Windows PowerShell为什么使用 Windows PowerShell如何启动 Windows PowerShellPowerShell和Cmd命令提示符的区别PowerShellcmd管理员运行 PowerShellWindows PowerShell ISE创建并运行脚本文本编辑器创建脚本集成脚本环境创建脚本…

第二章.线性回归以及非线性回归—特征缩放,交叉验证法,过拟合

第二章.线性回归以及非线性回归 2.9 特征缩放 1.数据归一化 1).作用&#xff1a; 把数据的取值范围处理为0-1或者-1-1 2).数据范围处理为0-1之间的方法&#xff1a; newValue(oldValue-min)/(max-min) 例如&#xff1a;数组:&#xff08;1,3,5&#xff09;,value1:(1-1)/(5-1)0…

MyBatis-Plus分析打印SQL(开发环境)

项目创建POM依赖 <!-- https://mvnrepository.com/artifact/p6spy/p6spy --> <dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.9.1</version> </dependency> YML配置 spring:datasource…

silicon labs Gateway HOST-NCP MQTT网关搭建

一、背景 目前正在开发一款中控网关,网关mcu跑Android系统,NCP采用EFR32MG21开发板,需要跑MQTT协议控制zigbee的网络。基于以上需求,下载了simplicity studio V5版本和最新的EmberZNet 7.2.0.0协议栈进行验证,发现新的GSDK已经不再支持MQTT功能,官方回答是EmberZNet 6.7…

论文解读 - 城市自动驾驶车辆运动规划与控制技术综述 (第2部分)

文章目录&#x1f697; II. Overview of the decision-making hierarchy used in driverless cars&#xff08;无人驾驶汽车的决策层综述&#xff09;&#x1f534; A. Route Planning&#xff08;路径规划&#xff09;&#x1f7e0; B. Behavioral Decision Making&#xff08…

论文工具大全+软件简介

文章目录**1.使用说明用哪个文库就打开&#xff0c;****2.在软件中复制粘贴网址点下载**3.点已下载文件右击鼠标另外保存**腾讯微云-https://share.weiyun.com/5U3fAjF**1.安装并上传论文点检测2.检测等待时间3.打开检测报告查看回复[文献]&#xff1a;参考文献自动生成器参考文…

贪心算法专题

1.Acwing 1055. 股票买卖 II 题目链接&#xff1a;1055. 股票买卖 II - AcWing题库 思路&#xff1a;逢涨就买 #include<iostream> using namespace std;int main() {int n;long long ans0;int a[100005];cin>>n;cin>>a[0];for(int i1;i<n;i){cin>&…

C语言—动态内存管理

专栏&#xff1a;C语言 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;本专栏主要更新一些C语言的基础知识&#xff0c;也会实现一些小游戏和通讯录&#xff0c;学时管理系统之类的&#xff0c;有兴趣的朋友可以关注一下。 动态内存管理前言一、为什么会存在动态内存分配二…