【问题标题】:Should I do numerical calculations in-database?我应该在数据库中进行数值计算吗?
【发布时间】:2013-11-13 22:49:04
【问题描述】:

我有一个数据库,其中包含我运行的许多模型的结果。我需要计算每个模型的 chi^2 值。我正在使用 python 和 psycopg2 与我的 PostgreSQL 数据库接口的包。我可以想到两种方法来做到这一点,但我不确定哪个更快,或者是否有区别。

方法一:从我的数据库中选择每个模型对应的行,然后在python中进行chi^2计算。每个模型都有大约 500-1000 行与之相关联,我必须读取这些行,并且有 20,000 个模型。

方法二:写一个SQL函数,计算数据库本身的chi^2,然后为每个模型选择这个数。

我比 SQL 更熟悉 Python,所以我很想单独使用方法 1。但是,我可以看到让 postgres 优化关系代数然后只需将每个模型读入我的 python 脚本的单个数字的优势。在选择一种方法而不是另一种方法时,我应该遵循一个通用策略吗?

【问题讨论】:

  • 方法 2 看起来更高效。 Plus 数据库函数本质上是可重复使用的。
  • 在这种情况下我通常会选择方法2
  • 在适当的数据库服务器上只有 20,000 条记录,所有过滤和行内计算几乎都是即时的。
  • Postgres 支持 PL/Python,这意味着你也可以使用 python 实现方法 2。

标签: python sql postgresql psycopg2


【解决方案1】:

首先,chi^2 不是一个复杂的计算。无论您使用哪种方法都无关紧要。但是我还是推荐你使用方法2,因为方法1可能会导致你的应用程序出现OUT OF MEMORY错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2012-09-14
    相关资源
    最近更新 更多