首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

PostgreSQL 强大的多层表承继-及其在海量数据分类按月分区存储中的应用

2012-08-31 
PostgreSQL 强大的多层表继承--及其在海量数据分类按月分区存储中的应用最近发现大家越来越关注 PostgreSQ

PostgreSQL 强大的多层表继承--及其在海量数据分类按月分区存储中的应用

    最近发现大家越来越关注 PostgreSQL了。2008年以来,通过对PostgreSQL的实际使用,发现其对象-关系数据库机制对现实问题非常有帮助。在多重表继承下,对上亿条不同类别的数据条目进行按型号、按月份双层分区管理,既可在总表查阅所有条目的共有字段,也可在各类型字表查询附加字段,非常高效。下面把这种分区机制介绍如下!

      实验平台:PostgreSQL 9.1

      实验背景:

      假设有N种数据收集设备,分别叫做 machine1, machine2...machineN, 各类收集设备从传感器上采集的数据各不相同。但是他们都包括3个共有属性:1、采集时刻 2、一个电压值 3、机器的ID。       这些机器源源不断的从各个传感器收集信息,每类机器还有各自不同的附加数据。比如,machine1有当前最大单元数、当前已使用单元数两个属性。Machine2有前端传感器的ID和取值。数据量约100万条/天,要求数据库容纳至少5年的数据。

     设计原则:

      由于采集的频率高,每天会有上百万条数据存入,为了考虑缩小索引的规模,提高检索效率,采用按月分区存储。由于各类机器的字段各有区别,使得我们必须设计不同的表结构, 分别存储各类数据。由于要求能够统一检索基本信息、按需检索额外信息,我们采用PostgreSQL的表继承,首先按照机器类型分类,而后各类型机器内按照月份分类。

     数据库结构:

    全局ID 序列:

CREATE TRIGGER triggle_machine2  BEFORE INSERT  ON base_table_machine2  FOR EACH ROW  EXECUTE PROCEDURE on_insert_base_table_machine2();

到此为止,我们可以分别向各个爸爸表(按类型分区表)插入数据,而后通过爷爷表(总表)检索基本信息,通过爸爸表检索详细信息。对总表的操作会遍历反馈到所有子表,试图利用子表的索引进行查询。由于按月存储,插入工作只限于本月,所以检索历史数据效率很高。

当然了,这只是简单的实验,实际字段要比上述字段复杂很多。PostgreSQL的对象-关系数据库对解决上述问题非常有帮助,也全面的运用到我公司的各个环节,达到工业化标准的系统非常稳定,尽管设置了备份,但4年来从未真正用到。我们目前使用 16核心机架服务器,8GB内存,Ubuntu 12.04 LTS,优化配置(Postgresql.conf) 采用设置共享段shared_buffers 512MB, work_mem 32MB,维护maintenance_work_mem  512MB,checkpoint_segments = 16,获得了稳定而持久的生产力提升。


1楼goldenhawking48分钟前
在pgAdminIII 14中,通过界面电子表格插入数据会插入重复的两条(与平台有关),但是使用SQL脚本插入是正常的。

热点排行