在了解数据库行列存储之前,先了解一下文件系统的存储结构。
一、文件系统存储结构
1、扇区(sector)
文件储存在磁盘上,磁盘的最小存储单位叫做"扇区"(Sector)。 一般每个扇区储存512字节(相当于0.5KB),其他特殊磁盘扇区大小非512字节,但是会兼容512字节,可以想想为什么?。
2、块(block)
操作系统在管理磁盘空间时,使用块(block)来作为管理磁盘空间的基本单位。一个块等于8个扇区,为4K大小。 操作系统每次读取时,至少读取一个块来计算。这样做的好处是,减少了操作系统管理磁盘空间的复杂度。
3、索引节点(inode)
文件数据都储存在"块"中,那么像文件的一些元数据信息,比如创建者、创建日期、更新时间、大小、权限等等,需要存储在其他地方。 存储这些文件元数据的区域就叫做inode。 inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域: 一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。 由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。 这时,就无法在硬盘上创建新文件。
二、基于行存储的数据库特点
行存储:
例如:表A是一个宽表,拥有n个字段,a1,a2,...,所有字段长度为4096字节,即4k,一个block大小。
如果表A要插入一条记录,即表A每条数据占一个block。注意,这个block中包含了这个表的所有字段。
此时,插入的性能为,文件系统查找到一个空block,写入一条数据。修改性能为,文件系统查找此block,更新值,重新保存。 性能以数据量,查询字段数量分类: 1、小数量,多字段(几乎全部):快速大部分字段修改操作性能好。 2、小数量,少字段(几个):性能差,每次系统加载大量无用数据进入内存 。3、大数量,多字段(几乎全部):消耗内存资源 。4、大数量,少字段(几个):消耗内存资源,加载大量无用数据
三、基于列存储的数据库特点
列存储:
列数据库存储时,会将同一字段值放入一组block中,即此时block中的数据具有很高的相似性。
为有可比较性,还是用上述表A举例,分析其性能。
此时,还是以数据量,查询字段数量分类分析性能:
1、小数量,多字段(几乎全部):相较于行数据库,查询修改速度都慢
2、小数量,少字段(几个):相较于行数据库,查询修改速度都慢
3、大数量,多字段(几乎全部):相较于行数据库,查询修改速度都慢
4、大数量,少字段(几个):相较于行数据库,查询速度很快,修改很慢
四、总结
1、行数据库应用场景
1)数据量小,业界一般为单表500万以下,当然此数量影响因素很多,可在具体场景张测试。
2)关注业务处理,即大量增删改操作业务,少聚合运算业务。
3)加载进内存的数据利用率大,冗余数据小,内存利用率高。
2、列数据库应用场景
1)查询性能极高,更新操作极少
2)节省磁盘空间
3) 关注少量字段,聚合运算多