1 对象存储:(数据仓库),仅仅存放key/value数据;用户有一个数据对象,需要存储起来,就可以给这个对象起一个名字(key),然后将对象连同名字一起存入放入对象存储,当需要的时候,用这个名字做key,向存储系统索要,而对象存储系统必须在需要的时候,将数据返回给用户,除非用户将此数据从存储系统中删除;
2 块存储:则是充当操作系统底下的块设备(笼统的指磁盘),供系统使用。块存储实际上就是一种SAN(Storage Attach Network),将集群的存储空间分配给用户,挂载到操作系统,作为磁盘使用。因为块存储需要模拟磁盘的行为,因此必须确保低延迟。
面向对象存储:
用户将一个key-value对上传至存储时,存储系统必须找合适的服务器,保存数据,通常会保存在多台服务器上,以防止数据丢失(多副本)。
如何选择存放数据的服务器,需要注意几点:
1 数据必须在服务器之间平衡
2 用户在读取数据时,可以方便快捷定位
3 满足云存储高可靠可用,大规模的特点。
4 尽可能的简单。
对于每个对象,都有一个key到数据存储位置的映射:key->pos.映射的方式有很多,最直接的就是将每一个对象的key->pos数据保存下来。这些数据通常被称为“元数据”。
sharding存储方法:根据key的特征,将key空间划分若干分组,并将这些分组对应到不同的存储节点上.这种方式可以笼统的称为sharding存储方法;如此可以直接按照一个简单的规则定位到服务器。常用的分组方法之一是按key的区间划分,比如a开头的一组,B开头的一组等等。而另一种更具“现代感”的分组方式,就是hey哈希后取模。哈希方案就是哈希表的自然延伸,将桶分布到多台服务器中。
两大类映射方式实质上是在不同的粒度上进行映射。