繁体   English   中英

OO表现问题

[英]OO performance question

我会对此快速而简单。 基本上,我需要快速合并多个Invoices(Object)。

一个简单的想法是

$invoice1 = new Invoice(1);
$invoice2 = new Invoice(2);
$invoice3 = new Invoice(3);
$invoice1->merge($invoice2,invoice3);
$invoice1->save();

由于每个对象都将查询它自己的数据,因此随着需要合并的发票数量的增加,查询数量会增加。

但是,这是单个查询的情况

SELECT * FROM invoice WHERE id IN (1,2,3)

可以满足要求,但是实现起来并不像上面那样优雅。

样本数据的初始基准测试表明,由于mysql查询数量庞大,上述速度降低了2.5倍-3倍。

请咨询

使用发票工厂。 您可以使用各种方法询问发票。 最新的(n)get(id)get(array(id,id,id))等等,它返回发票或单个发票对象的数组。

<?php
    $invoice56 = InvoiceFactory::Get(56); // Get's invoice 56
    $invoices = InvoiceFactory::Newest(25); // Get's an array of the newest 25 invoices
?>

你能使Invoice对象变得懒惰,让merge加载尚未加载的所有内容吗?

确保始终使用相同的数据库连接。 检查它没有在一个脚本执行线程中重新连接。

我可以建议使用实际的ORM(对象关系映射)来创建实际查询和使用的对象之间的分离。看看Propel或(我最喜欢的)Doctrine(版本2 非常容易使用)

这样一来,您只需使用相同数量的代码就可以完全拥有所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM