[英]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.