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.chinaunix.net/jh/19/272188.html

7.7 操作系统层调用

对于操作系统库函数调用、操作系统的一些设置方式,也会决定着数据库系统的存储效率。

可以参见: Linux关及性能的相关内核参数(一)

更多相关文章

  1. 统计查询-根据条件进行count的两种实现方式- oracle
  2. Android数据的四种存储方式
  3. MediaPlayer源码存在的内存泄漏问题,释放资源的正确方式
  4. 向IntelliJ IDEA创建的项目导入Jar包的两种方式
  5. Java操作数据库之jdbc【原生方式】
  6. JAVA实现 springMVC方式的微信接入、实现消息自动回复
  7. Android两种方式监听短信内容---BroadcastReceiver和ContentObse
  8. Android 自动编译、打包生成apk文件 1 - 命令行方式
  9. 【Android学习】数据传递三种方式

随机推荐

  1. android中内存调试信息的解读
  2. Android原生(Native)C开发之二:framebuffe
  3. Android Web development Note
  4. Android持久化技术之SharedPreferences存
  5. Android的多媒体框架Opencore代码阅读
  6. Android(安卓)的 ListView 的CheckBox标
  7. 不能找到相应的target
  8. Android(安卓)向桌面添加快捷方式
  9. android用NFS的形式挂载工作.
  10. Ubuntu11.10下编译android内核源码