我们的应用程序目前的工作原理如下:
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).
你有多少记忆?您的服务在峰值访问时间通常支持多少并发用户?这些是相关的信息.没有他们任何答案是无用的.一般来说,这是通过负载测试容易解决的问题.然后找到瓶颈并进行优化.在这之前,只要让它工作(在理性之内).
原文链接:https://www.f2er.com/php/131652.html但是…
如果你真的想知道你在看什么…
如果我们假设你没有存储多字节字符,你有400个名字* 100个字符(假设每个名字都最大限制你的char限制)…你正在看着〜40Kb的内存.似乎太小了,不用担心,不是吗?
显然,您将从PHP获取其他开销来保存数据结构本身.可以使用SplFixedArray而不是纯数组的数据结构更有效地存储东西吗?可能 – 但是你失去了高度优化的array_ *函数,否则你将不得不操纵列表.
用户将使用您计划在内存中缓冲的每个条目吗?如果你必须有他们的应用程序,它们并不重要,它们是多大的,是吗?保存大量不需要的内容不是一个好主意,只是因为.“您绝对不想做的一件事是在每个页面加载时查询数据库4000条记录.至少您需要将这些类型的事务放入内存存储(如memcached)或使用APC.
这个问题 – 像计算机科学中的大多数问题 – 只是一个受限制的最大化问题.它无法正确解决,除非您知道可用的变量.