存储系统类别

这blog也是解释此分类下包含文章类型的原因,整理下自己理解的存储系统。存储系统可以大概分为两类:文件存储系统,数据库存储系统。而这两类里面又有很多分类,还有个技术也比较相关,RAID技术,RAID技术有的是软件上层实现的,更多的是指对于磁盘的RAID,有写过RAID技术,这里不在分析。

之所以分为文件存储系统和数据库存储系统,有两个原因,一是存储的对象的大小,一般而言,文件存储较大,数据库存储的对象比较小,数据库中顶多存个图片。也是HDFS上发展出HBase的一个原因,HDFS对于小文件存储不好,就发展出了HBase。第二个原因就是场景,如果较大的对象存储在数据库中,那肯定是有特殊的需要处理的,例如ES中存储的文档,体积也可能比较大,但是由于搜索的需要,需要存储在ES中,而很多情况下ES是不存储文档的源文件的,ES中会存一个文件的地址,文档本身还是会存储在文件存储系统的。

非结构化的数据,如果是体积大的“数据”也是要存在文件存储系统上的,例如视频其实就是种非结构化的数据,然后用数据库保存一份文件的地址,方便快速查找。相对体积小的数据,可以直接仍在非关系数据库中。之所以这样设计,是因为很多的IO读取策略,要么针对多大文件快,要么针对小文件快,是不可兼得的。例如,存储视频文件,像这种大文件,很多存储系统会预先分配一个连续的大的空间,这样写大文件速度会大大提升。

所以得出个结论,无论什么场景,大文件都不要存在数据库中。顶多个图片或文档,可以放在HBase中。

文件存储系统可以分为:

数据库存储系统分类较多,此文时DB-engine上有14个种类,但常见的种类有:

按照问题整理下:

Wide-column数据库与键值数据库区别?

Wide-column数据库的key(row key)对应的是一个多维度的value(列族中多个列的值),相当于比key-value多了个维度,value的值上多了一个维度。

时序数据库的特点与场景?

最突出的特点,插入速度非常快,根据限定,必须按照时间的顺序插入,根据此特性进行优化,阿里的HiTSDB数据库有1000w/s的插入速度。

图数据库的特点与场景?

wiki上“In computing, a graph database is a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data.”,从设计上看,图数据库更接近与真实世界,对象之间的关系都表现出来,适合场景么就是复杂的关联查询,那种关系型需要join几十张表的操作,对于图数据库是最擅长的。

键值存储与对象存储异同?

wiki上的比较Block (data storage)不同点直接拿过来: First, object stores also allow one to associate a limited set of attributes (metadata) with each piece of data. The key, value and set of attributes is referred to as an object. Second, object stores are optimized for large amount of data (hundreds of megabytes or even gigabytes), whereas for key/value stores the value is expected to be relatively small (kilobytes). Finally, object stores usually offer weaker consistency guarantees such as eventual consistency, whereas key/value stores offer strong consistency.

对象存储还可以存储写元数据;对象存储的对象一般是比较大的,优化上也是针对大对象;一般对象存储是最终一致性,而键值存储是强一致性的。

Table of Contents