【问题标题】:What data type to choose json or jsonb or text选择什么数据类型json或者jsonb或者text
【发布时间】:2016-12-26 18:56:27
【问题描述】:

我想存储一个大的 json 散列(或内容,随心所欲地调用它),“大”是指超过 1000 个键值对的东西,我不想对该 json 字段进行任何搜索,我只想从数据库中检索它并将其传递给 javascript 来解析它并构造一个可视化结果。

在 Postgresql 上有一个 json 类型和 jsonb 类型(也许我也可以使用 text 字段来存储 json)。我只是想为此做出正确的选择,所以我想请有经验的人给我一些建议。

【问题讨论】:

  • 您的问题不在于您没有发布代码,而在于您正在征求对哪种类型最好的意见。
  • @RobertColumbia 好笑!寻求建议有什么问题:)

标签: json postgresql


【解决方案1】:

假设您谈论的是实际的、严格的 JSON(没有诸如未引用键之类的怪癖)...

jsontext 没有太大区别。除了验证 JSON 之外,它并没有多大作用。

jsonb 与这两者相比是一种不同的野兽:它是一个成熟的数据结构,具有自己的内部格式,在搜索中具有更多可用的操作。例如json 没有适用的=(等式运算符)。 jsonb 有。 (text 也有,尽管它在语义上有所不同。)

索引更明智,但它必须在读取和写入过程中来回转换。

鉴于此,jsonb 在这里看起来不是一个合理的选择。


...所以只有一个决定要做:

您想确保您的数据库在您的列中只包含有效的 JSON 值吗?在数据库级别? 还是您相信该数据库的每个客户端(通常是服务器应用程序)只提供有效数据?

json 是一个相对安全的选择。 由于缺乏验证,理论上使用text 可以将性能提高可以忽略不计,但您只能通过基准测试获得特定数字。但它没有针对非 JSON 值的保护措施,并且客户端中的意外错误可能会被忽视。负责任地测试!

【讨论】:

  • 我有一个按钮,当用户单击它时,它会通过 javascript 生成 json 哈希,然后通过 ajax 将其发送到数据库,我认为用户不能在这里修改某些内容,但即使他这样做只会影响他的帐户:)
  • 所以我认为在这种情况下一个文本字段就足够了! :)
  • @medBo 可能。不过,不要忽视您自己的软件中存在错误的可能性。使用 json 可以防止您出于任何原因写入错误类型的值,例如草率的引用。
  • 如果有人感兴趣,这里是我发现的另一个有用的信息来源:stackoverflow.com/questions/22654170/…
  • @WestCoastProjects 是真的。不过,我会将这种怪癖归类为与对重复键的支持相同的联盟。 RFC 7159 提出了一个有效的观点,即依赖 JSON 对象中字段的顺序会损害互操作性。 jsonb 正是展示了这一点?
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多