【问题标题】:Combine NoSQL and Relational Database on single Postgresql instance在单个 Postgresql 实例上结合 NoSQL 和关系数据库
【发布时间】:2018-03-28 04:18:06
【问题描述】:

我有一个现有的关系 Postgresql 数据库。一些表包含非常大的 blob,它们会比 NoSQL 文档好得多。这将大大减轻我们的关系数据库。

因此,我们考虑将这些 blob 表移出到 NoSQL 解决方案中,例如 CosmosDB 或 MongoDB。然而,纯粹的关系表存在外键依赖关系,这使得将这些表移出到它们自己的数据库中变得复杂。

我发现 PSQL 原生支持存储 Documents 并且可以分发。到目前为止,我看到的解决方案是 CitusData 和 Postgres XL。对于那些使用过的人,他们如何比较?

有没有人遇到过类似的情况?您是否分离到 NoSQL 数据库中?或者是否有人将他们的 PSQL 划分为关系和 NoSQL 部分?那是怎么回事?事后你会建议注意什么?

【问题讨论】:

  • 这种类型的问题非常广泛和征求意见,没有客观的答案。您如何完成此操作实际上取决于您,关于使用多个数据库(polyglot persistence)与在单个数据库中工作(在您的情况下为 Postgres)。不幸的是,这与 StackOverflow 无关。
  • 所以基本上你真的想要 SQL 但称它为 nosql?为什么?您是否尝试过将其全部设为“SQL”,或者至少是 JSON 对象? NoSQL 需要解决的问题是什么?

标签: mongodb postgresql nosql azure-cosmosdb citus


【解决方案1】:

(这里是 Citus 工程师)

Postgres 具有强大而灵活的 JSONB 列类型。您可以做的是保持结构表不变,并为 blob 数据放置一个 jsonb 列。使用单节点 Postgres 进行测试,如果这对您有用,那就太好了!

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

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

【讨论】:

    【解决方案2】:

    每个 RDBMS->NoSQL 迁移都需要以下两者之一: 1. 将这些依赖文档中的一部分嵌入到用户实际查询的文档中 2. 通过 id 引用依赖文档并在读取时推断这些关系。

    很典型,每个人每天都这样做,不要害怕。顺便说一句,您不必在 Cosmos DB 和 MongoDB 之间做出选择 - 只需将 Cosmos DB 与 MongoDB API 一起使用。

    【讨论】:

    • OP 没有要求从 RDBMS->NoSQL 迁移。而且它并不像嵌入与引用那么简单。通常需要重新评估整个架构。
    • 我的评论与这个有争议的思路有关:“我们考虑将这些 blob 表移到 CosmosDB 或 MongoDB 之类的 NoSQL 解决方案中。但是,纯粹的关系表存在外键依赖关系这使得将这些表移出到它们自己的数据库中变得复杂。” 是的,它是 RBDMS->NoSQL。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多