【发布时间】:2018-11-07 21:47:41
【问题描述】:
我想在我的表 (Postgres) 中存储一个 JSON blob。该表需要经常阅读。在我的应用程序读取表后,它会将此 blob 的 JSON 序列化以及此表的其他属性返回给客户端。
# To illustrate, imagine an object like this
{
name: 'foo',
blob: {...} # this is blob that needs to be stored
}
当客户请求它时,我想返回一个 JSON 响应,例如
{"name": "foo", "blob": [...]}
给定一个 Postgres 数据库,显而易见的选择是将 blob 存储在 json/jsonb 列中。但是文本列呢?假设应用程序不使用 blob,将序列化的字符串存储在文本列中意味着服务器不需要反序列化 blob,然后在客户端发送请求时序列化回 JSON。换句话说,服务器可以简单地将 blob 视为字符串。听起来更有效率,对吧?
但是,由于现在将 blob 视为字符串,所以我得到的序列化变成了
{"name": "foo", "blob": "[...]"} # note the extra " around the array brackets
这会导致客户端应用程序中的解析不正确,因为现在 blob 被解析为字符串而不是数组。
所以我的问题是
一个。我是否正确假设文本列将比 jsonb 更有效(假设此问题已解决)?
b.如果是这样,是否有办法返回已经序列化的 JSON 对象而不将其视为字符串?如果没有,避免这种反序列化然后立即序列化浪费的最佳方法是什么?
【问题讨论】:
-
jsonb 最好。另外,您也可以对其进行索引和搜索blog.codeship.com/unleash-the-power-of-storing-json-in-postgres 还记得“......过早的优化是万恶之源”~ Knuth
标签: ruby-on-rails json ruby