【问题标题】:Postgresql vs Python Recurring Events SpeedPostgresql vs Python 重复事件速度
【发布时间】:2021-12-31 04:41:43
【问题描述】:

我正在构建一个包含重复事件的简单日历应用程序。我想象创建两张表,一张用于所有事件,一张用于重复。如果我制作一个单独的事件,我会将它添加到事件表中。如果我制作一个重复事件,我会将元信息添加到重复表中,然后将所有事件表中的事件添加到事件表中(每月重复一次会将 12 个事件添加到事件表中)。

我应该在 Postgresql (https://justatheory.com/2008/01/postgres-recurring-events/) 或 Python(我们的后端 API)中实现计算所有重复事件的日期的逻辑吗?有性能差异吗?

【问题讨论】:

    标签: python postgresql datetime


    【解决方案1】:

    理论上,在 Postgres 中,您只计算一次循环(在创建/更新时),但在 Python 中,您会在每次提取时重新计算它们,因此 Postgres 应该浪费更少的循环。但是,我怀疑这是很多计算。如果它不是某种高负载项目,它不应该对性能产生很大影响。我会从设计的角度来判断。

    如果您在 Postgres 中预先计算并保存重复,您需要确保:

    • 当相应的元记录被删除时,它们会被自动删除。这很简单,存储外键并级联。
    • 随着时间的推移,它们会自动更新(在您的示例中,您需要在一年过去后生成更多重复)。这个比较棘手,我不确定在 Postgres 中进行计划更新的“正确”方法是什么。

    如果您在 Python 中进行计算,您可以通过计划更新摆脱这个问题,您只需在每次提取时创建重复。但是您失去了从单一事实来源按原样获取数据并将其呈现给用户的美妙能力。逻辑层变厚了。

    总的来说,Postgres 解决方案对我来说似乎更好。我没有仔细研究您链接的文章,但它提到了观点。这可能意味着您还可以选择计算每个选择的重复次数,但在 Postgres 而不是 Python 中。我会选择更容易实现和维护的。

    如果你真的只关心性能,对不起,我没有足够的能力来分析它。

    【讨论】:

    • 另一种编写Python代码的方式是,每次添加新的循环时,我们将一行添加到循环表中,并将循环中的所有事件添加到事件表中。
    猜你喜欢
    • 2011-05-18
    • 2020-08-06
    • 1970-01-01
    • 2018-12-16
    • 2019-03-07
    • 2013-04-02
    • 2011-10-21
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多