3

由于高磁盘负载,我们想要对我们的 PostgreSQL 数据库进行分片。首先,我们查看了django-sharding library,但是:

  1. 在我们的后端进行了很多重写
  2. 将所有表迁移到 64 位主键对 300-400gb 表来说是一项艰巨的工作
  3. 使用 Postgres 特定算法生成 id 使得无法将数据从一个分片移动到另一个分片。不仅如此,我们还有一个带有旧 ID 的大型数据库。更新所有这些也是一个大问题。
  4. 使用特殊表生成 id 使我们每次插入数据时都会对主数据库进行特殊的 SELECT 查询。我们的写入负载很高,所以不好。

考虑到所有这些,我们决定也看看 Postgres 数据库分片解决方案。我们发现了 2 个机会 - Citus 和 PostgresXL。Citus 让我们改变了太多的数据格式,同时重写了一大堆后端,所以我们将尝试使用 PostgresXL 作为更透明的解决方案。但是阅读文档,我无法理解一些事情,并且会很高兴推荐:

  1. 除了 Citus 和 PostgresXL 之外,还有其他分片解决方法吗?最好不要在迁移时对我们的数据库进行太多更改。
  2. 关于 PostgresXL 的一些问题:
    • 我是否理解正确,它不是 Postgres 扩展,它是一个独立的分支?所以我应该从源头构建它的所有部分,而不是以某种方式移动数据?
    • Postgres 和 PostgresXL 版本如何兼容?我们有 PostgreSQL 9.4。我在 PostgresXL 中没有看到这样的版本(9.2 或 9.5 没有中间?)。例如,我可以使用流复制进行迁移吗?
    • 如果是/否,迁移数据的最佳解决方案是什么?如果我有大量写入的 2Tb 数据库,我可以以某种方式迁移它而无需长时间停止吗?

谢谢。

4

1 回答 1

0

首先,为了让自己免于头疼,你有没有看过亚马逊的 Auora、Dynomo、Red Shift 等服务?它们在规模上非常具有成本效益,并且为您优化和管理。

实际上,亚马逊的直接 Postgress 数据库可以处理大量的读取或写入。我们可以在读取时达到 2,000 到 6,000 IOPS,在写入时再达到 2,000 到 6,000 IOPS,而不会出现问题。我真的会考虑这个选项。Azure、甲骨文和谷歌也有竞争服务。

还要注意 Postgres-XL 完全没有 HA 支持。如果你失去一个节点,你就会失去一切。节点不能故障转移。

它是一个独立的叉子?

是的,它们是非常不同的应用程序,并且彼此分开开发。

Postgres 和 PostgresXL 版本如何兼容?

它们不兼容。您不能只将 Postgres 迁移到 Postgresl-XL。他们的工作方式非常不同。

使用 Postgres 特定算法生成 id 使得无法将数据从一个分片移动到另一个分片

不遵循这一点,但通过共享,您不应该将数据从一个分片移动到另一个分片。使用的密钥通常需要是特定的和唯一的,以拆分/隔离您的数据。像日期,或“类型”字段,或其他一些(希望是有序的)字段/列。这打破了一切,但在 a$$ 限制方面有明显的痛苦。

除了 Citus 和 PostgresXL 之外,还有其他分片解决方法吗?最好不要在我们的数据库中对 >>migrating 进行太多更改。

有很多选择,但是从标准 RDS 到 NoSql 或 MPP 数据库一开始就需要进行重大迁移,需要付出很多努力,并且无论您做什么,都会有很多限制。

Next Postress-XL 和 Citus 是 MPP(大规模并行处理)集群应用程序,并非专门共享。这是他们可以做的一部分,但这不是他们的重点。

MPP 的其他选项

pgPool——(不适合大量写入)

haProxy——(还没有做过,但读过。失去了设置和维护的工作。)

MySql Cluster -- (使用 OSS 版本和商业版本的主要 $$$ 非常痛苦)

绿铅垂

太极数据

垂直

迁移数据的最佳解决方案是什么?

很难找到这种开关的简单迁移。您可能需要自己从现有 RDS 导出数据并将其导入新数据库,并且可能需要自己编写一些内容才能以您想要的方式获得它。

于 2018-01-08T21:50:17.270 回答