我有时使用TextField
来存储数据,其结构可能经常(或非常复杂的数据)更改为模型实例,而不是使用关系范例对所有内容进行建模。
我可以使用更多模型,外键等来实现相同类型的事情,但有时直接存储JSON会更直接。
我仍然没有深入研究postgres JSON类型(如果我理解的话,可能对读取查询很有帮助)。目前,每当我想访问此类数据时,我都会执行一些json.dumps
和json.loads
。
我想知道(理论上)这样做的性能和缓存缺点(使用JSON类型而不是),与使用模型进行比较。
有了更多的知识可以帮助我稍后进行一些巧妙的比较和分析,以提高整体表现。
答案 0 :(得分:3)
将数据存储为json
(无论是text
- 类型字段,还是PostgreSQL的原生json
类型)是一种非规范化形式。
与大多数非规范化一样,在处理非常难以建模的数据时,或者将数据完全规范化存储到实体中存在严重的性能挑战时,它可能是一个合适的选择。
PostgreSQL通过支持数据库中json
值的某些操作来减少数据非规范化引起的一些问题的影响 - 您可以迭代json
数组或键/值对,加入json场提取等的结果。大多数有用的东西都是在9.3中添加的;在9.2中,json支持只是一种验证数据类型。在9.4中,将添加更强大的json功能,包括对json值中索引的一些支持。
对于您的问题,没有简单的一刀切的答案,而且您还没有真正描述您的数据或工作量。与大多数数据库挑战一样,“它取决于您对数据的处理。”
总的来说,我倾向于说如果数据是结构化和统一的,最好对数据进行关联建模。如果它是非结构化和非统一的,那么使用json
这样的存储可能更合适。