用PostgreSxl将现有的PostgreSQL数据库分解



由于高磁盘负载,我们想将我们的PostgreSQL DB碎片。首先,我们查看了django碎片库,但是:

  1. 在我们的后端重写
  2. 将所有表迁移到64位初级钥匙是300-400GB表的艰苦工作
  3. 使用Postgres特定算法生成ID使得不可能将数据从碎片移动到碎片。不仅如此,我们还有一个带有旧ID的大数据库。更新所有这些也是一个大问题。
  4. 使用特殊表生成ID使我们每次插入数据时都会对主数据库进行特殊的选择查询。我们有很高的写入负载,所以不好。

考虑到所有这些,我们也决定也查看Postgres数据库碎片解决方案。我们发现了2个机会-Citus和PostgreSxl。Citus使我们过多地更改数据格式,并同时重写大量后端,因此我们将尝试使用PostgreSxl作为更透明的解决方案。但是阅读文档,我无法理解某些事情,并且将对建议很大。

  1. 除了Citus和PostgreSxl,还有其他碎片解决方法吗?在我们的数据库中,对迁移的数据库中的更改将是一件好事。
  2. 有关PostgreSxl的一些问题:
    • 我是否正确理解,它不是Postgres扩展,它是独立的叉子?因此,我应该从来源构建所有部分,而不是以某种方式移动数据?
    • Postgres和PostgreSXL版本如何兼容?我们有Postgresql 9.4。我在PostgreSxl中没有看到这样的版本(9.2或9.5没有中间?)。那么,我可以使用流式复制进行迁移吗?
    • 如果是/否,那么迁移数据的最佳解决方案是什么?如果我有2TB数据库的重写,可以以某种方式迁移它,而不会长时间停下来?

谢谢。

首先要挽救自己的头痛,您是否看过亚马逊的AUORA,DYNOMO,RED SHIVE等服务等选项?它们在大规模上非常有效,并为您进行了优化和管理。

实际上,亚马逊的直线后数据库可以处理大量的读取或写入。我们可以在读物上进行2,000-6,000个IOP,而另外2,000至6,000 iops则毫无问题地写入。我真的会以此为选项。Azure,Oracle和Google也提供竞争服务。

还要注意,Postgres-XL超出所有原因没有HA支持。如果您失去一个节点,您将失去所有内容。节点不会失败。

这是独立的叉子?

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

Postgres和PostgreSxl版本如何兼容?

他们不兼容。您不仅可以迁移到Postgresl-XL。他们的工作方式有所不同。

使用Postgres特定算法生成ID使得无法将数据从碎片移动到碎片

不遵循此功能,但是通过共享,您不应该将数据从一个碎片移动到另一片。使用的密钥通常是特定的,并且要拆分/分离您的数据。像日期或"类型"字段或其他一些(希望订购的)字段(S)/列(S)。这打破了事情,但在A $$限制中有明显的痛苦。

除了Citus和 postgresxl?在>>迁移的数据库中不要在我们的数据库中进行太大变化是一件好事。

吨的选项,但是从标准RD到NOSQL或MPP数据库的蝙蝠立即进行,无论您做什么,都将成为主要的迁移,很多努力,并且有很多限制。

下一个postress-xl和Citus是MPP(大量并行处理)集群应用程序,而不是专门共享。那是他们可以做的一部分,但这不是他们的重点。

MPP的其他选项

pgpool-(不太适合沉重写入)

haproxy-(尚未做到这一点,而是要阅读。

mysql群集 - (使用OSS版本的巨大痛苦和商业版本的主要$$$)

绿色铅板

teradata

vertica

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

不太可能为这种开关找到一个简单的迁移。您可能会期望需要从现有的RD中导出您的自我并将其导入新数据库,并且可能必须以自己的方式来写出您的自我。

最新更新