与传统的表结构相比,使用 JSON(B) 有什么好处吗?
想象一下有这样一个表结构:
create table table1 (
t_id int,
first_name varchar(20),
last_name varchar(20),
age int
)
如果您将相同的列存储在 JSON(B) 字段中,如下所示:
{
"first_name":"name",
"last_name":"name",
"age":2
}
并有一张这样的桌子:
create table table2 (
t_id int,
attribute jsonb
)
如果我错了,请纠正我,但是由于如果该行有任何更新或删除,这两个变体都会导致该行被完全重写,那么这两个变体在这方面是相同的。
如果您真的希望能够不受限制地添加任意数量的字段(除了任意文档大小限制),请考虑使用 NoSQL 解决方案,例如 MongoDB。
对于关系数据库:每个值使用一列。将 JSON blob 放在列中几乎不可能进行查询(当您真正找到有效的查询时会非常缓慢)。
关系数据库在索引时利用数据类型,并且旨在使用规范化结构实现。
附带说明:这并不是说您永远不应该将 JSON 存储在关系数据库中。如果您要添加真正的元数据,或者如果您的 JSON 正在描述不需要查询且仅用于显示的信息,则为所有数据点创建单独的列可能是矫枉过正。 检查此以获取详细说明
大型复杂模型可以低成本存储(读取和写入)在数据库中。您正在避免昂贵的连接和其他数据库操作。
在您的应用程序中开箱即用的序列化/反序列化,您可以完全避免 ORM。
您可以在不更改数据库架构的情况下灵活地更改模型。
另一方面,您正在失去规范化、参照完整性、数据类型检查等数据库机制......
查询json数据并非不可能,但比查询关系数据要慢。
用例场景是由您的应用程序专门操作的数据。