gpt4 book ai didi

json - 在 Postgres 中存储大型 JSON 数据是不可行的,那么有什么替代方案?

转载 作者:行者123 更新时间:2023-12-02 02:56:47 25 4
gpt4 key购买 nike

我的表的每条记录中都有大于 2kB 的大型 JSON 数据,目前,这些数据存储在 JSONB 字段中。我的技术堆栈是 Django 和 Postgres。我没有对这个 json 数据执行任何更新/修改,但我确实需要经常快速地阅读它。但是,由于JSON数据大于2kB,Postgres将其拆分成 block 放入TOAST表中,因此读取过程变得非常缓慢。那么有哪些选择呢?我应该使用另一个数据库(如 MongoDB)来存储这些大型 JSON 数据字段吗?注意:我不想从这个 JSON 中提取键并将它们变成列。此数据来自 API。

最佳答案

如果不了解您的具体情况,很难具体回答,但您可以尝试以下几点:

  1. 使用 Postgres 12(已存储)generated columns维护通常需要的字段或较小的 JSON blob。这会增加存储开销,但您不必自己维护这种重复。
  2. Create indexes for any JSON fields您正在查询(Postgresql 允许您为 JSON 表达式创建索引)。
  3. 使用 composite index ,其中索引中的第一个字段是您要查询的字段,第二个字段(/json 表达式)是您希望检索的值。在这种情况下,Postgresql 应该从索引中检索值。
  4. 类似于 1,创建一个 materialised view它提取您需要的字段并允许您快速查询它们。您也可以向物化 View 添加索引。这可能是一个很好的解决方案,因为物化 View 的更新速度可能很慢,但在您的情况下,您的数据无论如何都不会更新。
  5. 调查 toast 表运行缓慢的原因。我不确定您看到的性能如何,但如果您确实需要提取大量数据,那么无论您选择使用何种数据库,都需要快速数据访问。

您的里程可能会因上述所有建议而异,尤其是因为每个建议都取决于您的特定用例。 (请参阅我评论中的问题)

但是,总体思路是使用 Postgresql 提供的工具来快速访问您的数据。是的,这可能涉及从其原始 JSON blob 中提取数据,但这不需要手动完成。 Postgresql 为此提供了一些很棒的工具。

关于json - 在 Postgres 中存储大型 JSON 数据是不可行的,那么有什么替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60938043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com