【问题标题】:Django & postgres - drawbacks of storing data as json in model fieldsDjango 和 postgres - 在模型字段中将数据存储为 json 的缺点
【发布时间】:2014-03-21 09:52:35
【问题描述】:

我有时使用TextField 将结构可能经常变化(或非常复杂的数据)的数据存储到模型实例中,而不是使用关系范式对所有内容进行建模。

我可以使用更多的模型、外键等来实现相同的目标,但有时直接存储 JSON 感觉更直接。

我仍然没有深入研究 postgres JSON 类型(如果我理解得很好的话,这对于读取查询尤其有用)。目前我每次想要访问此类数据时都会执行一些json.dumpsjson.loads

与对所有事物都使用模型相比,我想知道(理论上)这样做(使用 JSON 类型而不是不使用 JSON 类型)的性能和缓存缺点是什么。

对此有更多了解可以帮助我以后进行一些巧妙的比较和分析,以提高整体性能。

【问题讨论】:

标签: python json django postgresql


【解决方案1】:

将数据存储为json(无论是在text-typed 字段中,还是在PostgreSQL 的本机jsontype 中)是一种非规范化形式。

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

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

对于您的问题,没有一刀切的简单答案,而且您还没有真正表征您的数据或工作负载。与大多数数据库挑战一样,“这取决于”您对数据的处理方式。

一般来说,我倾向于说,如果数据是结构化且统一的,则最好对数据进行关系建模。如果它是非结构化且不统一的,则使用json 之类的存储可能更合适。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2010-10-12
    • 2017-03-28
    • 2012-03-29
    • 2021-09-15
    • 2016-12-29
    相关资源
    最近更新 更多