我有一个DataMapper创建一个对象,并且经常从DB加载具有相同数据的对象。我在一个循环中有DataMapper,正在创建的对象基本上一遍又一遍地加载相同的SQL。
如何缓存或重用数据以减轻数据库的负担?
代码
$initData = '...';
$result = '';
foreach($models as $model)
{
$plot = (new PlotDataMapper())->loadData($model, $initData);
$plot->compute();
$result[$i] = $plot->result();
}
class PlotDataMapper
{
function loadData($model, $initData)
{
$plot = Plot($initData);
//If the loop above executes 100 times, this SQL
//executes 100 times as well, even if $model is the same every time
$data = $db->query("SELECT * FROM .. WHERE .. $model");
$plot->setData($data);
return $plot;
}
}
我的想法
我的想法是我可以使用DataMapper本身作为缓存对象。如果已经使用了特定的$ model号,我将结果存储在PlotDataMapper
对象的某个表中,并在需要时检索它。听起来不错吗?有点像从数据库中记忆数据。