参考《大规模分布式存储系统》杨传辉
一.数据分类
非结构化数据:办公文档、文本。图片、视音频等
结构化数据:可以设计成二维关系表来存储,数据属性基本固定,数据的模式(字段、数据间关系--个表之间的关系)要预先定义
半结构化:数据的模式和内容混在一起,没有明显区分,也不需要预先定义数据的模式结构
二.分布式存储系统分类
1.分布式文件系统
2.分布式键值系统
3.分布式表格
4.分布式数据库
三.存储引擎
1.哈希存储引擎
2.B树存储引擎
mysql的MyISAM和InnoDB两个存储引擎的索引实现方式:http://www.cnblogs.com/yanghuahui/p/3483047.html
- MyISAM引擎使用B+ Tree作为索引结构,叶节点存放的是数据记录的地址。
- MyISAM引擎的辅助索引(二级索引)和主索引在结构上没有区别,只是辅助索引的key可以重复,叶节点上存放的也是数据记录的地址。
- MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
- InnoDB中表数据本身就是按B+ Tree组织的一个索引结构,叶节点存放的就不是数据记录的地址,而是完整的数据记录。所以InnoDB这种存储方式,又称为聚集索引,使得按主键的搜索十分高效,但二级索引搜索需要检索两遍索引:首先二级索引获得主键,然后用主键到主索引中检索到数据记录。
- 因为主键是InnoDB表记录的”逻辑地址“,所以InnoDB要求表必须有主键,MyISAM可以没有。
从原理来说,b+树在查询过程中应该是不会慢的,但如果数据插入比较无序的时候,比如先插入5 然后10000然后3然后800 这样跨度很大的数据的时候,就需要先“找到这个数据应该被插入的位置”,然后插入数据。这个查找到位置的过程,如果非常离散,那么就意味着每次查找的时候,他的子叶节点都不在内存中,这时候就必须使用磁盘寻道时间来进行查找了。更新基本与插入是相同的,随机io较多,http://blog.youkuaiyun.com/anderscloud/article/details/7181085
3.LSM树(Log-Structured Merge Tree)存储引擎
和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能