您的位置:首页 > 其它

分布式存储系统基本概念

2015-11-13 11:33 323 查看
参考《大规模分布式存储系统》杨传辉

一.数据分类

非结构化数据:办公文档、文本。图片、视音频等

结构化数据:可以设计成二维关系表来存储,数据属性基本固定,数据的模式(字段、数据间关系--个表之间的关系)要预先定义

半结构化:数据的模式和内容混在一起,没有明显区分,也不需要预先定义数据的模式结构

二.分布式存储系统分类

根据不同的数据类型,分布式存储系统可分为四类

1.分布式文件系统

存储非结构化数据,如Blob对象、定长块、大文件。分布式存储文件系统也常作为分布式表格和分布式数据库的底层存储

2.分布式键值系统

存储关系简单的半结构数据,只提供基于主键的CRUD操作。分布式键值系统是分布式表格的一种简化实现,一般用做缓存,如淘宝的Tair以及memcache。一致性哈希是分布式键值系统中常用的数据分布技术。

3.分布式表格

存储关系较为复杂的半结构数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的CRUD操作,而且支持扫描某个主键范围。分布式表格系统借鉴了很多关系数据库的技术,但是它主要支持单张表的操作,不支持一些特别复杂的操作,如多表关联。同一个表格的多个数据行也不要求相同类型的列,适合半结构化数据

4.分布式数据库

存储结构化数据

三.存储引擎

存储引擎就将数据持久化的存储实现

1.哈希存储引擎

是哈希表的持久化实现,支持增删改,以及随机读取操作,但不支持顺序扫描,对应键值存储系统。如Bitcask(基于hash表结构和key-value存储模型的日志型存储系统-只增):在内存存储基于哈希表的索引数据结构:key和value的索引信息(定位信息,如果
文件号,value在文件中的偏移位置,value长度),先在内存中通过key找到定位信息,然后读取数据。

2.B树存储引擎

B树存储引擎是B树(关于B树的由来,数据结构以及应用场景可以看之前一篇博文)的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等)。

mysql的MyISAM和InnoDB两个存储引擎的索引实现方式:/article/4999377.html

MyISAM引擎使用B+ Tree作为索引结构,叶节点存放的是数据记录的地址。
MyISAM引擎的辅助索引(二级索引)和主索引在结构上没有区别,只是辅助索引的key可以重复,叶节点上存放的也是数据记录的地址。
MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
InnoDB中表数据本身就是按B+ Tree组织的一个索引结构,叶节点存放的就不是数据记录的地址,而是完整的数据记录。所以InnoDB这种存储方式,又称为聚集索引,使得按主键的搜索十分高效,但二级索引搜索需要检索两遍索引:首先二级索引获得主键,然后用主键到主索引中检索到数据记录。
因为主键是InnoDB表记录的”逻辑地址“,所以InnoDB要求表必须有主键,MyISAM可以没有。

从原理来说,b+树在查询过程中应该是不会慢的,但如果数据插入比较无序的时候,比如先插入5 然后10000然后3然后800 这样跨度很大的数据的时候,就需要先“找到这个数据应该被插入的位置”,然后插入数据。这个查找到位置的过程,如果非常离散,那么就意味着每次查找的时候,他的子叶节点都不在内存中,这时候就必须使用磁盘寻道时间来进行查找了。更新基本与插入是相同的,随机io较多,/article/9049304.html

3.LSM树(Log-Structured Merge Tree)存储引擎

和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能

/article/1611177.html

/article/4999378.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: