首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里对数据执行计算:在对象中还是在数据库中?

在哪里对数据执行计算:在对象中还是在数据库中?
EN

Stack Overflow用户
提问于 2014-10-29 18:56:05
回答 3查看 372关注 0票数 0

我有一个使用MySQL后端的PHP应用程序。这是一个只有大约100个用户的内部应用程序--我们不会每秒收到数千个请求或类似的东西。

目前在我们的数据库中,我已经创建了所谓的“主”视图。这些视图连接所有查找表并执行任何基于行的计算。例如,在一个表中,我们将存储引用member_id表的members。在视图中,我将从members表中提取所有列。我对所有的查找表都这样做。对于基于行的计算,这些通常是简单的计算,比如两个日期之间的天差。我有这些主视图,因为它使编写查询(特别是对于报告)变得非常容易,因为我的所有联接都已经完成,并且已经完成了任何简单的计算。

我的问题是--这是最好的方法吗?例如,与其在视图中执行所有这些计算,不如将这些计算移到类中。因此,在上面的示例中,与其在视图中使用列来计算两个日期之间的差异(flock_age),不如在类中编写一个方法来执行此计算:

代码语言:javascript
复制
<?php
class FlockEx extends Flock
{
    public function getFlockAge()
    {
        $date1 = new \DateTime($this->getDatePlaced());
        $date2 = new \DateTime($this->getDatePickedUp());

        $difference = $date1->diff($date2);

        return $difference->days;
    }
}

与其加入所有这些查找表,不如创建这些类的新实例:

代码语言:javascript
复制
<?php
$flockdb = new FlockDB();
$flock = $flockdb->getFlockById(4);

$memberdb = new MemberDB();
$member = $memberdb->getMemberById($flock->getMemberId());
...

有什么“最好”的方法吗?还是最好的方法,简单地说,什么起作用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-29 19:13:02

应该使用数据库来利用联接和聚合。这是它擅长的地方。影响连接或要求连接/聚合作为计算的工件的计算通常应该在数据库本身中完成。

对于低延迟/加载/基数操作,或者当相同的基数据集基数/大小相似时,通常并不重要。

在这种情况下,日期-diff(在同一记录中的两个字段之间的数学)可以在客户机上执行;但是如果连接依赖于它,则可能不是这样。

票数 2
EN

Stack Overflow用户

发布于 2014-10-29 19:05:15

我在数据库里尽可能多地报告。我是一个OOP的拥护者,但是为了得到一个单独的SUM() sql调用所提供的相同的数字,我需要遍历数百个或数千个DB调用和对象创建,这是愚蠢的。

另外:你的问题很可能会结束,因为你在征求意见。别把这当回事。

票数 0
EN

Stack Overflow用户

发布于 2014-10-29 19:05:52

始终在DB结束时进行数据库计算。它也会给你带来巨大的性能提升。

了解一些DB概念,如PROCEDUREFUNCTION

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26638442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档