Hai*_*ood 10 php mysql memory caching
我们的应用目前的工作原理如下
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;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但它仍然(通常会)导致多个查询(在这种情况下为400+).
因此,我只想查询数据库并$this->names使用数据库中的每个名称填充数组.
但我担心数据库中有多少条目我应该开始担心内存这样做?(数据库列是varchar(100))
你有多少记忆?在高峰访问时间内,您的服务通常支持多少并发用户?这些是相关的信息.没有它们,任何答案都是无用的.通常,这是通过负载测试容易解决的问题.然后,找到瓶颈并进行优化.在那之前,只需使它工作(在合理范围内).
如果你真的想知道你在看什么......
如果我们假设您没有存储多字节字符,那么您有400个名称*100个字符(假设每个名称都超出您的字符限制)...您正在查看~40Kb的内存.似乎太无关紧要了,不是吗?
显然,您将从PHP获得其他开销来保存数据结构本身.你能用一种像SplFixedArray普通的数据结构更有效地存储东西array吗?可能 - 但是你失去了高度优化的array_*功能,否则你必须操纵列表.
用户是否会使用您计划在内存中缓冲的每个条目?如果您必须将它们用于您的应用程序,它们的重要程度并不重要,是吗?在内存中保存大量不需要的信息并不是一个好主意"只是因为." 您绝对不想做的一件事是在每个页面加载时查询数据库以获得4000条记录.至少,您需要将这些类型的事务放入内存存储区(如memcached)或使用APC.
这个问题 - 就像计算机科学中的大多数问题一样 - 只是一个受约束的最大化问题.除非您知道可供使用的变量,否则无法正确解决.
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |