目录

一、存储系统

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。

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

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

总结

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

存储与数据库 | 字节青训营笔记相关推荐

  1. 三个小项目入门Go语言|字节青训营笔记

    前言 这是青训营的第一课,今天的课程比较快速的讲解了go语言的入门,并配合三个小的项目实践梳理所学知识点,这里详细回顾一下这三个项目,结合课后作业要求做一些代码补充,并附上自己的分析,青训期间的所有课 ...

  2. 字节青训营第三课之高质量编程与性能调优实战的笔记和总结

    这是字节青训营第三课:高质量编程与性能调优实战的笔记和总结 概要 准备 尝试使用 test 命令,编写并运行简单测试 尝试使用 -bench参数,对函数进行性能测试 推荐阅读Go代码Review建议. ...

  3. HTML+CSS实现按钮手风琴效果 | 青训营笔记

    HTML+CSS实现按钮手风琴效果 | 青训营笔记 需求描述 HTML部分 CSS部分 完整代码 效果展示 这是我参与「第四届青训营」笔记创作活动的的第7天. 需求描述 实现一排居中的五个图标,默认为 ...

  4. Android基础第六天 | 字节跳动第四届青训营笔记

    这是我参与「第四届青训营 」笔记创作活动的的第6天 端智能技术演进与实践 文章目录 端智能技术演进与实践 课程回顾 01 什么是端智能技术 1.1 端智能是什么? 1.2 为什么要做端智能? 1.3 ...

  5. 字节青训营第一课之go语言入门的笔记和总结

    有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...

  6. 字节跳动青训营笔记01

    大家好,这里是我参加字节跳动[第五期青训营]的第一篇笔记.一小时多的课程里实现了快速入门Go语言,简要介绍了Go的优点,语法,包括与C语言的异同,以及map.切片等常用的数据结构:后半节课程主要介绍了 ...

  7. 字节青训营抖音APP

    You just work hard, the rest is up to time GitHub地址:https://github.com/xiaodainiao/TikTokLite TikTok ...

  8. 【Go入门】Socks5代理服务器实现 翻译api调用 | 青训营笔记

    这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记. [课程一]Go基础 主要内容 第一节课主要介绍了go的语法基础,包括变量.循环分支.数组切片.函数方法.错误处理.字符串.格式化处理. ...

  9. Go语言上手(一) | 青训营笔记

    这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记. 文章目录 语法速览 基础语法 第一:类型 第二:内置库部分 json库的使用 时间库的使用 字符串和数字互转 os相关信息 实战项目 ...

最新文章

  1. R语言ggplot2可视化更改轴上数字的格式(显示格式)实战
  2. python执行bat文件_python自动运行cmd,bat文件
  3. 用ironpython驱动你的计算公式
  4. web报表开发技术专题八:总结
  5. BugkuCTF-MISC题啊哒,白哥的鸽子
  6. 计算机审计风险背景,计算机环境下审计风险的特征与对策研究 毕业论文.doc
  7. Proxy Hosted Virtual
  8. 插入排序算法(insertion-sort)
  9. timimg学习数据删了_如何评价Timing这个督促人学习的软件?
  10. Matlab中文注释乱码问题解决方案
  11. html cat文本,网页管理好管家CatHtml
  12. (已更新)日常记账微信小程序模板源码
  13. 儿童python编程入门软件_一款儿童编程入门的理想工具——PythonTurtle
  14. 计算机死机按什么恢复出厂设置,电脑怎么恢复出厂设置?win7恢复出厂设置教程...
  15. trivy【1】漏洞扫描工具安装
  16. 分享下nas使用技巧,以及最简单的远程开机(用HS-200S做演示)
  17. 柔柔弱弱若若若若若若若若
  18. 猫抓老鼠c语言程序,猫抓老鼠问题C++实现一例(约瑟夫环问题)
  19. cogs 1487. 麻球繁衍
  20. linux如何调试elf程序,开发一个Linux调试器就需要了解ELF和DWARF

热门文章

  1. JAVA 比较两张图片的相似度
  2. 【MFO】飞蛾扑火优化算法(Moth Flame Optimization,MFO)理论分析与matlab性能仿真,使用CEC2017测试
  3. Linux运维好学还是开发好学,运维提升需要学习开发技能吗?
  4. 基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]
  5. RT-Thread Studio移植LAN8720A驱动
  6. pm4py、graphviz绘图中文乱码问题
  7. 在Eclipse中反编译Class文件完全详解
  8. 网络协议汇总与终极详细解析
  9. C++-向量的点乘、叉乘等操作
  10. ArcGIS for Android 100.3.0(6):动态地图图层(ArcGISMapImageLayer和ArcGISMapImageSublayer)