在单个Postgresql实例上组合NoSQL和关系数据库

问题描述:

我有一个现有的关系型Postgresql数据库。一些表包含非常胖的blob,它们会比NoSQL文档好得多。这将显着减轻我们的关系数据库。在单个Postgresql实例上组合NoSQL和关系数据库

因此,我们考虑将这些blob表移动到像CosmosDB或MongoDB这样的NoSQL解决方案中。但是,有纯关系表的外键依赖关系,这使得将这些表移出到他们自己的数据库变得非常复杂。

我发现PSQL本身支持存储文档并可以分发。我目前看到的解决方案是CitusData和Postgres XL。对于那些使用那些他们如何比较的人?

有没有人遇到过类似的情况?你是否分离出一个NoSQL数据库?或者有人将他们的PSQL划分为关系型和NoSQL部分?那是怎么回事?你有什么建议在事后看出来?

+1

这种类型的问题非常广泛和意见征求,没有客观的答案。如何实现这一点真的取决于你,关于使用多个数据库(* polyglot persistence *),vs在单个数据库(在你的情况下是Postgres)内工作。不幸的是,关于StackOverflow的主题。 –

+1

所以基本上你真的想要SQL但称它为nosql?为什么?你有没有尝试过把所有的“SQL”,或至少是JSON对象? NoSQL需要解决的问题是什么? –

每RDBMS-> NoSQL的迁移需要的两个一: 1.嵌入一些相关文件到实际上是由用户查询 2.参照由ID相关的文件,并推断在读这些关系的那些。

非常典型,每个人每天都在做,不要害怕。顺便说一句,你不必在Cosmos DB和MongoDB之间做出选择 - 只需使用Cosmos DB和MongoDB API即可。

+0

OP不要求从RDBMS-> NoSQL进行迁移。它不像嵌入和引用那么简单。通常整个模式需要重新评估。 –

+0

我的评论涉及到这个有争议的思路:_“我们认为将这些blob表移动到像CosmosDB或MongoDB这样的NoSQL解决方案中,但是存在与纯关系表的外键依赖关系,这使得将这些表移出自己的数据库“。_是的,它是RBDMS-> NoSQL。 – alekseys

(西特斯工程师在这里)

Postgres有JSONB列类型是强大和灵活。你可以做的是保持你的结构表,并为blob数据放置一个jsonb列。用单节点Postgres测试这个,如果这对你有用,太棒了!

如果您的数据规模有问题,即单个机器的内存或存储或CPU不足以满足您的工作负载,并且您无法扩大规模,那么您可以尝试使用Citus或Postgres-XL进行扩展。

我对Postgres-XL没有经验,但Citus很容易尝试。有可以使用的码头图像,或者您可以在Citus Cloud上创建一个账户来尝试1周的免费开发计划(它不适合基准测试)。

您不需要Citus或Postgres-XL使用Progres的JSONB文档数据类型(它们的NoSQL数据类型)。定期开箱的Postgres可以默认这样做。

这两者之间有很长的细节清单。需要注意的是,Postgres-XL没有HA或故障转移支持。如果在集群中丢失任何节点,则会丢失整个数据库。在Citus方面,准备一些非常昂贵的六位数年度订阅费,并被迫将其用作“云”服务。他们在技术上支持你运行你的自我,但他们扔了这么多的路障,这是不可行的。