用PostgresXL对现有的PostgreSQL数据库进行分片

3
我们希望对我们的PostgreSQL数据库进行分片,以减轻高磁盘负载。首先,我们看了django-sharding library,但是存在以下问题:
  1. 需要在后端大量重写代码
  2. 将所有表迁移到64位主键在300-400GB大小的表上是非常困难的工作
  3. 使用Postgres的特殊算法生成ID会使得无法将数据从分片移动到另一个分片。此外,我们有很多旧ID的大型数据库。更新所有这些ID也是一个很大的问题。
  4. 使用特殊表生成ID会使我们每次插入数据时都要特殊查询主数据库。我们有很高的写入负载,这不太好。
考虑到这些情况,我们决定寻找Postgres数据库分片解决方案。我们发现了两个机会——Citus和PostgresXL。Citus会让我们改变数据格式,并同时重写一大堆后端代码,因此我们打算尝试更透明的解决方案PostgresXL。但是阅读文档后,我无法理解某些事情,如果您有建议,将不胜感激:
  1. 除了Citus和PostgresXL之外,还有其他分片解决方案吗?在迁移时最好不要在我们的数据库中做太多更改。
  2. 关于PostgresXL的一些问题:
    • 我理解得对吗,它不是Postgres扩展,而是一个独立的分支?所以我应该从源代码构建它的所有部分,然后以某种方式移动数据?
    • Postgres和PostgresXL版本如何兼容?我们有PostgreSQL 9.4。我在PostgresXL中没有看到这样的版本(9.2或9.5没有中间版本?)。那么我可以使用流复制进行迁移吗?
    • 如果是/否,什么是迁移数据的最佳解决方案?如果我有一个2Tb的数据库,有大量写入,我能否在不停机的情况下进行迁移?

谢谢。

1个回答

0

首先,为了避免让你自己头疼不止,你有没有考虑过像亚马逊的Auora、Dynomo、Red Shift等服务选项?它们在规模上非常划算,而且经过了优化和管理。

实际上,亚马逊的Postgres数据库可以处理海量的读写操作。我们可以进行2,000到6,000次读取操作,另外还有2,000到6,000次写入操作,完全没有问题。我真的建议你考虑这个选项。Azure、Oracle和Google也提供类似的服务。

此外,请注意Postgres-XL没有任何HA支持。如果你失去一个节点,你就会失去一切。这些节点无法故障转移。

这是一个独立的分支吗?

是的,它们是非常不同的应用程序,相互独立开发。

Postgres和PostgresXL版本如何兼容?

它们不兼容。你不能把Postgres迁移到Postgresl-XL。它们的工作方式非常不同。

使用Postgres特定算法生成ID会使数据无法从分片中移动

不遵循此规则,但在共享数据时,不应将数据从一个分片移动到另一个分片。通常使用的关键字需要是特定且唯一的,以便在其上拆分/隔离数据。例如日期、"类型"字段或其他(希望有序的)字段/列。这样可以将数据分解,但显然会有痛苦的限制。

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

有很多选择,但首先从标准RDS转换到NoSql或MPP数据库将是一次重大迁移,需要大量的工作,并且无论您做什么都会有很多限制。

接下来,Postress-XL和Citus是MPP(大规模并行处理)集群应用程序,而不是专门的共享。这是它们能够做到的一部分,但不是它们的重点。

MPP的其他选项

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

haProxy--(没有尝试过,但读过相关资料。设置和维护都需要大量工作。)

MySql Cluster --(使用OSS版本非常痛苦,商业版本价格昂贵)

Green Plumb

Teradata

Vertica

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

很难找到这种转换的简单迁移方法。您可能需要从现有RDS导出数据并将其导入新的数据库,还可能需要自己编写一些代码来使其符合您的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接