数据库行列设计及性能详解

527 阅读3分钟

        在了解数据库行列存储之前,先了解一下文件系统的存储结构。

一、文件系统存储结构

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)  关注少量字段,聚合运算多