使用带压缩但允许更新最近行的列存储的解决方案-Greenplum

使用带压缩但允许更新最近行的列存储的解决方案-Greenplum,greenplum,Greenplum,我正在寻找在Greenplum(或另一个MPP db)中有人解决以下问题的具体示例: 我有大量的事实表,我想以柱状方向存储和压缩(在Greenplum中,这将是5级zlib压缩) 但是,每一新行都有一个较短的时间段,在它变为“静态”之前可以对其进行更新-例如,允许更改一个值,直到升起某个标志。在Greenplum中,要使用压缩,我需要使用“仅追加”表类型,这意味着不能直接安全地更新行 因此,在我缺乏经验的头脑中,我认为实现这一点的一种方法可能是有两个表——一个保存行,同时允许它们被更新,可以使用

我正在寻找在Greenplum(或另一个MPP db)中有人解决以下问题的具体示例:

我有大量的事实表,我想以柱状方向存储和压缩(在Greenplum中,这将是5级zlib压缩)

但是,每一新行都有一个较短的时间段,在它变为“静态”之前可以对其进行更新-例如,允许更改一个值,直到升起某个标志。在Greenplum中,要使用压缩,我需要使用“仅追加”表类型,这意味着不能直接安全地更新行

因此,在我缺乏经验的头脑中,我认为实现这一点的一种方法可能是有两个表——一个保存行,同时允许它们被更新,可以使用标准堆存储,并且没有压缩,另一个只保存那些变为“静态”(绝大多数)的行,它们是以列为方向的,并且被压缩

显然,其中涉及的机制使生活更加复杂(如果我想查看所有内容,请将两者合并,在行变为静态时触发从一个表中删除并插入到另一个表中,等等),因此我非常希望听到有关此问题的实际解决方案

谢谢


Andy.

Greenplum 4.3.x允许您更新面向列的表,您应该使用此版本

一般来说,您可以对表进行分区,通过“可更新”标志进行分区(一个分区应该是AO CO,一个堆)。这样,您的select查询不会受到影响,但将数据从一个分区移动到另一个分区将需要从堆分区中删除数据并将其插入到面向列的分区中(不过实现起来并不复杂)