Postgres 9.3中JSON和用户定义类型的比较

时间:2013-08-07 11:15:06

标签: json performance postgresql types user-defined

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

请解释并提供其他信息的链接。

4 个答案:

答案 0 :(得分:4)

正如之前回答中提到的 Roman Pekar 一样, JSON 支持提供了更大的灵活性,它提供了模仿 NoSQL 关系上的行为。

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

可以将30%的字段用于应用程序的客户端,30%用于另一个,依此类推,而不必使用大量列来定义多个表或表。因此,可以将大量的异构信息存储在一个地方。

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

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

答案 1 :(得分:2)

  • 我认为JSON比用户定义的类型更灵活,你可以添加你想要的任何可选属性,你可以嵌套它们,你可以将它们放入列表中;
  • JSON是非常易读的格式;
  • JSON是许多语言(Javascript,Python)中的标准对象表示法,因此您可以从表中读取数据并使用它;
  • 当您想要处理数据时,您不必随时创建新类型,您可以创建JSON,处理它,然后忘记它;

答案 2 :(得分:1)

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

答案 3 :(得分:0)

有关用户定义类型的一些内容:

  1. 它们是固定格式(JSON是无模式的)
  2. 你可以对它们做出假设。
  3. 您可以更灵活地解决索引问题。
  4. 复合类型(UDT的一种形式)可以具有JSON属性。
  5. 用户定义的类型允许您比JSON更加可靠地扩展这些类型的SQL,但JSON为您提供了更多的灵活性。此外,嵌套类型是 lot 在支持时作为复合类型而不是9.3中的JSON对象更灵活(尽管这可能在某些时候发生变化)。如果JSON对象完全嵌套,则无法在9.3中将JSON对象转换为复合类型。