shuijingping 发表于 2016-11-21 04:27:18

PostgreSQL的数据存储(十七)---数据存储的知识扩展

7 扩展话题
7.1 列存储
  在本篇文章中,数据的存储格式,从数据页(buf页)到元组(tuple)到列信息的组织方式(微对象),历经一个从大到小的变迁。从物理存储的角度看,存储数据的基本单位是页(8k);从逻辑存储的角度看,存储数据的基本单位,是元组,即PG存储方式,还是行存储。
  与行存储相对的一个方式,是列存储。
  所谓列存储,对于一个二维表来讲,不再是以二维表的行为基本存储单位,而是以二维表的列为基本存储单位。这样,同一数据类型的数据就存储在了一起,一次读出的,是一个列的一部分信息。这有点像垂直分区的概念,但实现上,可能有很大不同。
7.2 分区
  数据存储,如果可以分块,则可以减少IO,有效提高效率。
  分区,包括水平分区和垂直分区,还有水平和垂直的组合分区。
  分区的概念,是化整为零的思维方式,是把大表分解为小表;水平分区,是在表上横向分块,这样读子块可以避免整个表读入,减少IO;垂直分区,是在表上纵向分块,减少所有列读入的情况。
7.3 数据压缩
  PG中,TOAST方式,是一种数据压缩的处理方式。另外,如果普通数据要压缩,可能的思路有:
  1. 在页面(buf)读写前,进行解压和压缩
  2. 形成tuple时,可以考虑压缩
  3. 在形成tuple前,先对每个列进行压缩;也可以区分列的类型,对不同类型提供不同的压缩方式
  这是三种不同级别的压缩,粒度不同,但都可以实现。
7.4 数据加密
  可加解密的地方,道理同数据压缩。
7.5 存储设备
  为了提高性能,更换存储设备,也是一个思考方向。使用盘阵、固态硬盘、flash盘等。
7.6 裸设备
  裸设备,又名裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。由应用程序负责对它进行读写操作,不经过操作系统的文件系统的缓冲。这种设备少了操作系统这一层,I/O效率更高。
  对数据库系统提高IO效率有效。
  可参考:
  http://www.iyunv.com/jh/19/272188.html
7.7 操作系统层调用
  对于操作系统库函数调用、操作系统的一些设置方式,也会决定着数据库系统的存储效率。
可以参见:Linux关及性能的相关内核参数(一)
页: [1]
查看完整版本: PostgreSQL的数据存储(十七)---数据存储的知识扩展