从巨大的桌子智能分块

时间:2015-01-23 02:39:42

标签: algorithm vertica chunking

我在数据仓库(Vertica)中有一个巨大的表。我正在以块的形式访问此表以进行优化。我决定我的块的方式非常简单。我有一个主键列说A,我拿MAX(A)。我的块大小为20000,我现在创建了(A / 20000)+1块。我为每个块构建查询并检索数据。

这种方法有问题如下:

  • 我的块数取决于MAX(A),而MAX(A)的增长速度非常快,因此我的块数也随之增加。

我决定使用20000号,因为这样可以获得最佳性能。但是,主要密钥在20000块内的分布是如此分散。例如,0-20000可能只包含3个元素,范围20000-40000可能包含500个元素,没有范围接近20000.

我试图找出是否有任何好的近似算法来解决这个问题,它可以最大限度地减少块的数量,并在一个块中填充接近20000个主键。

对此解决方案的任何指示表示赞赏。

1 个答案:

答案 0 :(得分:0)

我不确定优化目的意味着什么,但我认为最好的方法是创建时间戳列,或使用符合条件的时间戳列进行分区。然后,您可以在更大的引用框架上进行分区,因此分区之间的范围不大。

如果表格已分区,则可以从partition pruning中受益。这意味着Vertica可以在查询执行期间消除与时间戳谓词不匹配的存储容器。

否则,您可以查看分段子句并使用存储容器中的max / min。这可能会稍微复杂一些。