【问题标题】:Build table of tables from other databases in Postgres - (Multiple-Server Parallel Query Execution?)在 Postgres 中从其他数据库构建表 - (多服务器并行查询执行?)
【发布时间】:2018-12-03 08:28:51
【问题描述】:

我正在努力寻找建立数据库关系的最佳解决方案。我需要一些东西来创建一个表,该表将包含从不同数据库的其他表中拆分的数据。所有表的结构完全相同(相同的列号、名称和类型)。

在单个数据库中,我会创建一个带有分区的父表。但是,数据量太大而无法在单个数据库中执行,这就是我尝试进行拆分的原因。从 Postgres 文档中,我认为我正在尝试做的是“多服务器并行查询执行”。

目前我认为实现的唯一解决方案是构建数据库地址的 API,并在需要时使用它通过网络将数据获取到主父数据库中。我还发现名为 Citus 的 Postgres 外部扩展可能可以完成这项工作,但我不知道如何在多个数据库中实现唯一键(或者像 Citus 这样的 Shard 调用它)。

有没有更好的办法?

【问题讨论】:

  • 您可以创建一个分区表,其中分区是其他服务器上的外部表(您可能还想升级到 Postgres 11 以利用那里的所有分区和并行查询增强功能)。但是你不能真正在所有分区中获得一个唯一的键约束。
  • 但是我很好奇为什么数据对于单个数据库来说太大了?我们在谈论多少行?具有许多硬盘(RAID 1 或 RAID 10 中的 SSD)和大量 CPU 的单个服务器可能最终会更快
  • @a_horse_with_no_name 问题是我的公司目前有很多他们想要使用的小型机器,而不是真正的服务器机器。例如,我得到的最大的机器有 1 TB 的存储空间和 8 个内核......单个数据库将包含大约 100 GB 的数据,但并不是所有的表都会被连接。

标签: postgresql postgresql-10


【解决方案1】:

Citus 很可能会解决您的问题。如果它是分布列,或者它是复合键并包含分布列,它允许您跨分片使用唯一键。

您还可以在 citus 中使用分布式分区表。那是某个列上的分区表(时间戳?)和某个其他列上的散列分布式表(就像您在现有方法中使用的那样)。查询并行化和数据收集将由 Citus 为您处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2018-04-12
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    相关资源
    最近更新 更多