6

我想知道为什么在 Postgres 9.3 中对 JSON 支持如此大惊小怪。JSON 与用户定义类型 (UDT) 相比有哪些优势?使用 UDT 有哪些陷阱?访问带有 UDT 的表是否效率低下?ALTER TYPE ADD 属性慢吗?Postgres 如何物理存储 UDT?

请解释并提供附加信息的链接。

4

4 回答 4

3
  • 我认为 JSON 比用户定义的类型灵活得多,你可以添加任何你想要的可选属性,你可以嵌套它们,你可以将它们放入列表中;
  • JSON 是一种可读性很强的格式;
  • JSON 是许多语言(Javascript、Python)中的标准对象表示法,因此您可以从表中读取数据并使用它;
  • 当您想处理数据时,您不必随时创建新类型,您可以创建 JSON,处理它,然后忘记它;
于 2013-08-23T14:12:15.413 回答
3

正如Roman Pekar在之前的一个答案中提到的那样,JSON支持提供了更大的灵活性,并且它提供了在关系上模仿NoSQL行为的可能性。

此外,它使客户端-服务器应用程序更容易存储从客户端直接从数据库发送的 JSON 值。

可以为应用程序的客户端使用 30% 的字段,为另一个客户端使用 30%,依此类推,无需定义多个表或具有大量列的表。因此,可以将大量异构信息存储到一个地方。

最后但同样重要的是,JSON 是一种标准,许多大型编程语言都支持它。

(我们目前正在我们的项目中使用该功能(并且从 Beta 版开始就一直在使用它);此外,这是我们为应用程序选择Postgres的主要原因,因为我们需要一个主要具有解耦信息的大型数据库。我们尝试使用 NoSQL数据库,但我们需要太多的表来存储信息,而且“连接”的成本很高。另一方面,仅处理关系数据库会很困难,所以不要使用半关系半非关系,我们选择了Postgres的 JSON 支持。)

于 2013-09-23T12:39:16.180 回答
2

不太严重的是,它有点营销:)。更严重的是 - 内部 JSON 支持是该主题几年工作的最后阶段。内部类型和 UDT 之间没有太大区别,并且许多内部类型(和功能)以 UDT 或 UDF 开头。向上游迁移是一个相对困难的过程,并且几乎没有测试和讨论概念(和 API)。因此,内部实现显着保证了更高的质量和更高的稳定性(更少的错误,更稳定的 API)和支持。一个社区说 - “这对我们来说很有趣,我们会加强和支持”。没有其他差异 - (在性能或存储格式方面)。

于 2013-08-08T07:21:21.090 回答
0

关于用户定义类型的一些事情:

  1. 它们是固定格式(JSON 是无模式的)
  2. 你可以对它们做出假设。
  3. 您可以更灵活地解决索引问题。
  4. 复合类型(UDT 的一种形式)可以具有 JSON 属性。

与 JSON 相比,用户定义的类型允许您围绕这些类型更可靠地扩展 SQL,但 JSON 为您提供了更多的灵活性。此外,嵌套类型在支持方面比 9.3 中的 JSON 对象更灵活(尽管这可能会在某些时候改变)在 9.3 中,如果 JSON 对象完全嵌套,则无法将 JSON 对象转换为复合类型。

于 2013-11-05T10:15:05.533 回答