相比于关系型数据库,对象存储于近十年来兴起并快速得到广泛应用。
为什么对象存储
时代需求和优点
首先,在海量数据的今天,需要分布式数据库,并且需要满足海量、易用、便宜的特点。
而之前的单机存储或者单机数据库,显然不适用于海量数据;分布式数据库中针对大量结构化数据,不够自由;分布式存储适合大量大数据计算中间结果/视频/图片等的存储,适用于今天的情况。
并且,对象存储文件数量不受Name Node限制;是云原生服务,按需申请使用,便于维护;具备冷热数据分级存储的能力,成本更低。因此快速成为人们的选择。
适用场景
- 视频
- 图片
- 文本
- 安装包
- 备份
- 前端js文件
静态的,Immutable的文件
不适用场景
- 关系型数据:商品订单……
- KV:缓存记录
- 随机读写:在线编辑文件
- 更新频繁:钱包余额等
结构化、Mutable的信息
对象存储的使用
申请Bucket时,接口一般都是Restful风格,即类HTTP格式进行增删查改(PUT,GET,HEAD,DELETE)。
在上传大视频时,可以使用MultiUpload接口,分块上传,通过uploadID进行分块拼接。
ListPrefix接口,进行分页列举。
开发一个对象存储
接入层:接入解析并处理接口信息 元信息层:存储对象元信息 存储引擎层:存储对象内容
面临问题,海量数据,成本&稳定性,可扩展性
解决方法:
-
可扩展性:Partition。分而治之,不同数据映射至不同Partition分区。
- 存储均匀分布
- 计算均匀分布
- 压力均匀分布
-
持久度:Replication。多个副本,多机架、多机房、多Region,因此可以带来高持久度和强吞吐能力。
面临很多问题,不可靠的一切都可能导致数据丢失。
- 不可靠的硬件/软件
- 自然灾害,电磁干扰
- ……
-
成本问题:EC(Erasure Coding),通过荣誉编码达到和多副本一样的持久度。
- 低冗余度:成本相较于单纯的多副本较低
- 额外计算:增加了额外编码计算步骤
-
成本问题:温冷转换。比如常用数据SSD,次者HDD,再次光盘来存储。
其他
综上,对象存相比于之前的结构化存储等关系型数据库,更加灵活,对类型要求没那么严格,内存使用更加灵活。对海量流量、数据,高并发访问immutable内容的今天,十分适用。但并没有取代也不会取代关系型数据库的地位,大量数据的增删查改包括账户等交易信息,这些mutable的数据还得是关系型数据库。