将数据保存在Config表中的行中与将其另存为Postgres JSONField中的键相比,哪个更好?

时间:2018-12-01 01:27:32

标签: python django postgresql

由于Postgres支持JSON字段,是否比WP仍然将每个配置项保存在某个表中的行优先呢?

全面披露:我要求以Postgres的Django新用户身份登录。

2 个答案:

答案 0 :(得分:2)

这取决于。以下是一些需要考虑的事情:

  1. 数据结构是否可以很好地映射到JSON?尝试形象化它。数据是否更具关系性(考虑与其他数据的链接)或层次结构?如果您要存储的数据需要与关系存储的数据进行大量混合,则可能会很麻烦。

  2. 您是否在这些字段上进行复杂的搜索?查询jsonb字段具有强大的功能,但可能会涉及复杂性和学习。我喜欢查询jsonb并在查询中进行操作的强大功能,但对我而言,它从来没有像常规SQL那样容易或自然。

  3. 您的ORM和查询构建器之类的任何其他工具都可以很好地使用它吗?如果您使用的是旧技术,这是一个特别重要的问题。如果您使用ORM,则仅使用纯SQL来执行jsonb查询可能会很烦人。

  4. 延迟加载是另一个考虑因素。如果您有延迟加载策略,则它可能会转换为jsonb字段,也可能无法转换为jsonb字段。如果您的延迟加载策略很复杂,则可能需要做一些工作才能使其与jsonb字段配合使用。

  5. 必须有一个很好的序列化和反序列化策略。如果您没有很好的实现,它将变得笨拙。

顺便说一句...我是使用jsonb的拥护者。在我看来,这是一个很好的改变游戏规则的人。因此,不要以为我在劝阻它。就是说,如果您只是尝试将所有内容设为jsonb,您可能很快就会后悔。您只需要评估哪种方法最适合每种情况。总的来说,我认为它通常可以很好地用于config,尽管我需要了解具体情况。希望这对您有所帮助!

答案 1 :(得分:0)

对于存储配置,也许最好使用Django Constance之类的东西。您可以像这样使用它:

  1. 使用pip install django-constance[database]安装Django constance。

  2. constance中添加INSTALLED_APPS

    INSTALLED_APPS = (
    
        ...
        'constance',
    )
    
  3. CONSTNCE_CONFIG中添加settings.py

     CONSTANCE_CONFIG = {
      'THE_ANSWER': (42, 'Answer to the Ultimate Question of Life, '
                   'The Universe, and Everything'),
    }
    

我建议使用constance,因为您可以在代码中轻松使用它:

 from constance import config

 if config.ANSWER == 44:
     # do something

及其单例,因此所有常量实例在代码中都相同。这对于IMO非常重要,因为它们是配置,并且应该保持一致。

此外,您还可以在Adminsite中访问constance变量并在那里进行自定义。