Django& postgres - 在模型字段中将数据存储为json的缺点

时间:2014-02-20 12:38:39

标签: python json django postgresql

我有时使用TextField来存储数据,其结构可能经常(或非常复杂的数据)更改为模型实例,而不是使用关系范例对所有内容进行建模。

我可以使用更多模型,外键等来实现相同类型的事情,但有时直接存储JSON会更直接。

我仍然没有深入研究postgres JSON类型(如果我理解的话,可能对读取查询很有帮助)。目前,每当我想访问此类数据时,我都会执行一些json.dumpsjson.loads

我想知道(理论上)这样做的性能和缓存缺点(使用JSON类型而不是),与使用模型进行比较。

有了更多的知识可以帮助我稍后进行一些巧妙的比较和分析,以提高整体表现。

1 个答案:

答案 0 :(得分:3)

将数据存储为json(无论是text - 类型字段,还是PostgreSQL的原生json类型)是一种非规范化形式。

与大多数非规范化一样,在处理非常难以建模的数据时,或者将数据完全规范化存储到实体中存在严重的性能挑战时,它可能是一个合适的选择。

PostgreSQL通过支持数据库中json值的某些操作来减少数据非规范化引起的一些问题的影响 - 您可以迭代json数组或键/值对,加入json场提取等的结果。大多数有用的东西都是在9.3中添加的;在9.2中,json支持只是一种验证数据类型。在9.4中,将添加更强大的json功能,包括对json值中索引的一些支持。

对于您的问题,没有简单的一刀切的答案,而且您还没有真正描述您的数据或工作量。与大多数数据库挑战一样,“它取决于您对数据的处理。”

总的来说,我倾向于说如果数据是结构化和统一的,最好对数据进行关联建模。如果它是非结构化和非统一的,那么使用json这样的存储可能更合适。