【问题标题】:How to make process wide editable variable (storage) in django?如何在 django 中制作进程范围内的可编辑变量(存储)?
【发布时间】:2011-08-24 02:35:38
【问题描述】:

我想为项目/应用程序设置创建项目范围内可访问的存储。

我想要实现的目标:-每个应用程序都有自己的应用程序特定设置存储在 db 中是从 db 重新生成存储的调用

所以它的工作方式非常接近缓存,但我不能使用缓存机制,因为它正在序列化数据。我也可以为此目的使用 memcache,但我想开发通用解决方案(并非总是可以访问 memcache)。

如果有人有任何想法来解决我的问题,我将非常感谢分享。

【问题讨论】:

    标签: python django data-storage


    【解决方案1】:

    在向您提供任何具体建议之前,您需要了解这些系统的局限性。

    问题

    • Django 和 PHP/其他流行语言之间的架构差异。

      每次访问页面时,PHP 都会重新读取并重新评估整个代码树。这允许 PHP 在每次请求时从 DB/cache/whatever 重新读取设置。

    • 初始化

      许多 django 应用程序会初始化它们自己的内部设置和参数缓存,并在模块导入时(服务器启动)而不是每次请求时对这些参数执行验证。这意味着在修改未启用 db-settings 的应用程序的任何设置时,您无论如何都需要重新启动服务器,那么为什么不更改 settings.py 并重新启动服务器呢?

    • 多站点/多实例和内存设置

      Django 文档不鼓励在内存中进行更改,因为它们只会影响单个服务器实例。在多个站点 (contrib.sites) 的情况下,只有一个站点会收到对共享设置的更新。对于实例化服务器 (ep.io/gondor),任何更改都只会针对本地实例,而不是针对您的站点运行的每个实例。小心行事

    性能

    • 内存变化

      由于上述原因,django 文档不鼓励在服务器运行时更​​改设置值。但是,此选项不会影响性能。仅在您和单个服务器/实例制作的特定应用程序范围内使用。

    • 缓存 (redis-cache/memcached)

      这是中间速度选项。可以轻松地反序列化为复杂的 python 结构的设置的合理快速查找 - 非常适合 dict-configs。重要的是值在站点/实例之间安全共享并自动更新。

    • 数据库 (SLOOOOW)

      除非您破解连接池,否则一次从数据库中获取一个设置会非常非常慢。一次获取所有设置更快,但会增加每个请求的数据库传输。设置在站点/实例之间安全同步。仅用于 1 或 2 个设置,使用起来是合理的。

    结论

    可以将配置值存储在 database/cache/mem 中,但您必须注意注意事项以及潜在的性能损失。为 settings.py 创建一个通用替换将不起作用,但是创建一个存储其他应用设置的支持应用可能是一个可行的解决方案,只要其他应用接受必须在每个请求中重新加载设置。

    【讨论】:

    • 你给了我高质量的答案,但我需要的是技术支持而不是理论。
    • TL;DR:没有通用的解决方案。如果有,我们都会使用它。您必须根据您的用例选择自己的方法。如果你选择一种方法,我可以从那里帮助你,但我不是来照顾你的。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多