我想知道为什么在Postgres 9.3中对JSON支持有如此多的大惊小怪。 JSON优于用户定义类型(UDT)有哪些优势?使用UDT有哪些缺陷?访问具有UDT的表是否效率低下? ALTER TYPE ADD属性是否缓慢? Postgres如何物理存储UDT?
请解释并提供其他信息的链接。
答案 0 :(得分:4)
正如之前回答中提到的 Roman Pekar 一样, JSON 支持提供了更大的灵活性,它提供了模仿 NoSQL 关系上的行为。
此外,它使Client-Server应用程序更容易存储从客户端直接从数据库发送的JSON值。
可以将30%的字段用于应用程序的客户端,30%用于另一个,依此类推,而不必使用大量列来定义多个表或表。因此,可以将大量的异构信息存储在一个地方。
最后但同样重要的是,JSON是一个标准,它得到了许多大型编程语言的支持。
(我们目前正在使用我们项目中的功能(并且自Beta版以来一直在使用它);此外,这是我们为应用程序选择 Postgres 的主要原因,因为我们需要一个大的数据库主要是解耦信息。我们尝试使用NoSQL数据库,但是我们需要太多的表来存储信息,而且“连接”的成本很高。另一方面,很难只处理关系数据库,因此,我们选择了 Postgres 的JSON支持,而不是半关系半非关系。)
答案 1 :(得分:2)
答案 2 :(得分:1)
不太认真,这是一个营销一点点:)。更严重的是 - 内部JSON支持是该主题多年工作的最后阶段。内部类型与UDT之间没有太大差异,许多内部类型(和功能)以UDT或UDF开头。向上游的转移是相对艰难的过程,概念(和API)很难测试和讨论。因此,内部实现可以保证更高的质量和更高的稳定性(更少的错误,更稳定的API)和支持。一个社区说 - “这对我们来说很有意思,我们会加强和支持”。没有其他差异 - (性能或存储格式)。
答案 3 :(得分:0)
有关用户定义类型的一些内容:
用户定义的类型允许您比JSON更加可靠地扩展这些类型的SQL,但JSON为您提供了更多的灵活性。此外,嵌套类型是 lot 在支持时作为复合类型而不是9.3中的JSON对象更灵活(尽管这可能在某些时候发生变化)。如果JSON对象完全嵌套,则无法在9.3中将JSON对象转换为复合类型。