Postgresql 在Postgres中使用多个分区的开销
在下面的链接中,我使用的工具(Airflow)的创建者建议为维度表的每日快照创建分区。我想知道在博士后做这样的事情的开销 我对几个表使用Postgres 10内置分区,但对于facts,大多数情况下是每月或每年一次。我以前从未尝试过为维度实现每日分区,这看起来很可怕。这将简化一些事情,尽管在一些方面对我来说,以防我需要重新运行旧任务 简单。使用维度快照,其中新分区附加在 每个ETL计划。维度表将成为 每个分区都包含完整维度的维度快照 作为一个时间点。“但只有一小部分数据 每天都在变化,这就是大量的数据重复!”。对,, 虽然通常维度表的大小在比例上可以忽略不计 与事实相符。这也是一种解决SCD类型问题的优雅方法 它的简单性和再现性。现在,存储和计算 与工程时间相比,快照尺寸非常便宜 在大多数情况下是有道理的 而传统的2型慢变维方法是 从概念上讲是合理的,总体而言,计算效率可能更高, 管理起来很麻烦。围绕此方法的过程,如 管理维度上的代理项并执行代理项 加载事实时的查找容易出错,充满了突变和错误 几乎不可复制Postgresql 在Postgres中使用多个分区的开销,postgresql,Postgresql,在下面的链接中,我使用的工具(Airflow)的创建者建议为维度表的每日快照创建分区。我想知道在博士后做这样的事情的开销 我对几个表使用Postgres 10内置分区,但对于facts,大多数情况下是每月或每年一次。我以前从未尝试过为维度实现每日分区,这看起来很可怕。这将简化一些事情,尽管在一些方面对我来说,以防我需要重新运行旧任务 简单。使用维度快照,其中新分区附加在 每个ETL计划。维度表将成为 每个分区都包含完整维度的维度快照 作为一个时间点。“但只有一小部分数据 每天都在变化,这就是大
我使用过具有不同分区级别的系统。 通常,只要您对分区有检查约束,允许查询计划器为查询找到足够的分区,任何分区都是可以的。或者,对于某些特殊情况,您必须直接查询特定分区。否则,即使对于简单的查询,您也会看到对所有分区的顺序扫描 日常分区完全可以,不用担心。我使用基于PG的数据收集器处理事件,PG需要为每5分钟的数据设置分区,因为它每天收集几个TB 只有当您有几千或几十万个分区时,分区的数量才可能成为一个更大的问题——有了这个数量的分区,所有问题都会出现不同级别的问题 例如,您必须为每个事务设置适当的max_锁才能使用它们。因为即使是简单的select over parent表也会将SharedAccessLock放置在所有分区上,这并不是很好,但PG继承就是这样工作的 加上更高的查询计划时间——在我们的数据仓库中,我们有时会看到查询的计划时间,比如几分钟,而查询只需要几秒钟——这有点糟糕。。。但很难用它做任何事情,因为目前的PG计划员就是这样工作的
但利大于弊,因此我强烈建议使用您需要的任何分区粒度。我曾使用过具有不同分区级别的系统。 通常,只要您对分区有检查约束,允许查询计划器为查询找到足够的分区,任何分区都是可以的。或者,对于某些特殊情况,您必须直接查询特定分区。否则,即使对于简单的查询,您也会看到对所有分区的顺序扫描 日常分区完全可以,不用担心。我使用基于PG的数据收集器处理事件,PG需要为每5分钟的数据设置分区,因为它每天收集几个TB 只有当您有几千或几十万个分区时,分区的数量才可能成为一个更大的问题——有了这个数量的分区,所有问题都会出现不同级别的问题 例如,您必须为每个事务设置适当的max_锁才能使用它们。因为即使是简单的select over parent表也会将SharedAccessLock放置在所有分区上,这并不是很好,但PG继承就是这样工作的 加上更高的查询计划时间——在我们的数据仓库中,我们有时会看到查询的计划时间,比如几分钟,而查询只需要几秒钟——这有点糟糕。。。但很难用它做任何事情,因为目前的PG计划员就是这样工作的 但优点仍然大于缺点,所以我强烈建议使用您需要的任何分区粒度