【发布时间】:2012-08-23 15:22:56
【问题描述】:
我们的应用目前的工作方式如下:
class myClass{
private $names = array();
function getNames($ids = array()){
$lookup = array();
foreach($ids as $id)
if (!isset($this->names[$id]))
$lookup[] = $id;
if(!empty($lookup)){
$result;//query database for names where id in $lookup
// now contains associative array of id => name pairs
$this->names = array_merge($this->names, $result);
}
$result = array();
foreach($ids as $id)
$result[$id] = $this->names[$id];
return $result;
}
}
这很好用,但它仍然可以(并且经常这样做)导致多个查询(在这种情况下为 400 多个)。
所以,我正在考虑简单地查询数据库并使用数据库中的每个名称填充 $this->names 数组。
但是我担心数据库中有多少条目我应该开始担心这样做时的内存? (数据库列是varchar(100))
【问题讨论】:
-
你有多少内存?在高峰访问期间,您的服务通常支持多少并发用户?这些是相关的信息。没有他们,任何答案都是无用的。一般来说,这是一个很容易通过负载测试解决的问题。然后,找到瓶颈并优化。在那之前,让它发挥作用(在合理范围内)。
-
如果问题是在一般的“用于分发的开源软件”(例如博客软件)中提出的,您会如何处理它?
-
请参阅:php.net/manual/en/function.memory-get-peak-usage.php。查看第一个贡献的注释。
-
阅读这篇文章How big are PHP arrays (and values) really?。也许它会帮助你。