存储与数据库学习
1. 经典案例:数据的产生
比如某新用户第一次注册,那么数据就产生了,从用户传到后端服务器,存入数据库中(持久化),在数据库之后可能还有别的存储系统。我们关注以下这些潜在的问题:数据库怎么保证数据不丢失?如何处理多人同时修改的问题?除了数据库还有别的存储系统吗?数据库只能处理结构化的数据吗?操作数据库的方式、编程语言有什么?
2. 存储系统:数据怎么从应用到存储介质
对于存储系统来说,缓存很重要,拷贝很昂贵。硬件设备五花八门,需要抽象统一的接入层。
RAID技术:高性能、高性价比、高可靠性。
- RAID 0:多块磁盘简单组合、数据条带化存储提高了带宽、没有额外容错设计。
- RAID 1: 一块磁盘对应一块额外镜像,真实空间利用率仅一半,容错能力强。
- 实际上会结合起来用。
3. 数据库
首先要思考一下,数据库和存储系统有什么区别?
数据库分为关系型和非关系型的。
- 关系型数据库是存储系统,但除此之外又具备一些特点:对结构化数据友好,支持事务(ACID),支持复杂查询语言。
- 非关系型数据库也是存储系统,但一般不要求严格的结构化。
举例来说,存储一条用户信息,关系型数据库可以直接以表形式管理,但非关系型数据库要自行定义管理结构。
事务的优越性: - Atomicity:事务内操作要么全做,要么不做
- Consistency:事务执行前后数据状态一致
- Isolation:可以隔离多个并发事务避免影响
- Durability:事务一旦提交成功,就保证数据持久性
4. 对象存储TOS
比如短视频APP,需要一个合适的存储来存储视频图片等数据,要求一种合适的存储,满足易用、海量、便宜。前面介绍的属于数据库,而对象存储是一种分布式存储(还有一种HDFS分布式文件存储系统),其特点是适合大数据计算中间结果、视频、图片等。
- 接口:
- Bucket:存储对象的桶
- Object:对象,包括:
- Key:对象名字
- Data:对象内容,视频图片等
- MetaData:对象的元信息,如大小,Content-Type
- GET:下载对象
- HEAD:查看对象元信息
- PUT:上传对象
- DELETE:删除对象
总结来说,TOS使用存储视频、图片、文本、安装包、备份等静态、immutable内容。