由于Postgres支持JSON字段,是否比WP仍然将每个配置项保存在某个表中的行优先呢?
全面披露:我要求以Postgres的Django新用户身份登录。
答案 0 :(得分:2)
这取决于。以下是一些需要考虑的事情:
数据结构是否可以很好地映射到JSON?尝试形象化它。数据是否更具关系性(考虑与其他数据的链接)或层次结构?如果您要存储的数据需要与关系存储的数据进行大量混合,则可能会很麻烦。
您是否在这些字段上进行复杂的搜索?查询jsonb字段具有强大的功能,但可能会涉及复杂性和学习。我喜欢查询jsonb并在查询中进行操作的强大功能,但对我而言,它从来没有像常规SQL那样容易或自然。
您的ORM和查询构建器之类的任何其他工具都可以很好地使用它吗?如果您使用的是旧技术,这是一个特别重要的问题。如果您使用ORM,则仅使用纯SQL来执行jsonb查询可能会很烦人。
延迟加载是另一个考虑因素。如果您有延迟加载策略,则它可能会转换为jsonb字段,也可能无法转换为jsonb字段。如果您的延迟加载策略很复杂,则可能需要做一些工作才能使其与jsonb字段配合使用。
必须有一个很好的序列化和反序列化策略。如果您没有很好的实现,它将变得笨拙。
顺便说一句...我是使用jsonb的拥护者。在我看来,这是一个很好的改变游戏规则的人。因此,不要以为我在劝阻它。就是说,如果您只是尝试将所有内容设为jsonb,您可能很快就会后悔。您只需要评估哪种方法最适合每种情况。总的来说,我认为它通常可以很好地用于config,尽管我需要了解具体情况。希望这对您有所帮助!
答案 1 :(得分:0)
对于存储配置,也许最好使用Django Constance之类的东西。您可以像这样使用它:
使用pip install django-constance[database]
安装Django constance。
在constance
中添加INSTALLED_APPS
:
INSTALLED_APPS = (
...
'constance',
)
在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变量并在那里进行自定义。