I don&#39;t want to hijack the file cache maintainer thread, so I am starting my own thread about this since I have some questions.<br><br>I did talk to Robert about this in January, and I have done extensive testing with his code.&nbsp; His code patches core files all over the place in order to check memcache if there is a cached version available and then load that first.&nbsp; He has stated at 
<a href="http://drupal.org/project/memcache">http://drupal.org/project/memcache</a> that &quot;A set of patches that can be applied selectively to Drupal to cache
various objects for high performance. The patches are necessary and
this cannot be avoided.&quot;&nbsp; <br><br>However, if we are doing object level caching for nodes than we can cache a complete loaded node without the need to hit the database until a node_save, until a new module is enabled or until the max life is hit.
<br><br>If the code in node_load hit the static variable $nodes first, then secondly hit cache_get then we would not need to have a set of patches, and this could be an option in the performance settings.&nbsp; You could then allow the pluggable 
cache.inc that I just realized has been merged into HEAD (As of January) to handle storage.&nbsp; This would only take a small change to the core modules in a few places.<br><br>For example in node.module, <br><br>if (is_numeric($param)) {
<br>&nbsp;&nbsp;&nbsp; if ($cachable &amp;&amp; isset($nodes[$param])) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return is_object($nodes[$param]) ? drupal_clone($nodes[$param]) : $nodes[$param];<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; $cond = &#39;n.nid = %d&#39;;<br>&nbsp;&nbsp;&nbsp; $arguments[] = $param;
<br>&nbsp; }<br><br>could be changed into something like this:<br><br>if (is_numeric($param)) {<br>&nbsp; if($cachable) {<br>&nbsp;&nbsp;&nbsp; if (isset($nodes[$param])) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return is_object($nodes[$param]) ? drupal_clone($nodes[$param]) : $nodes[$param];
<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; //Attempt to load from cache return false on cache miss<br>&nbsp;&nbsp;&nbsp; $node = cache_get($param, &#39;cache_node&#39;);<br>&nbsp;&nbsp;&nbsp; if($node) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Load into static $nodes<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $nodes[$param] = is_object($node) ? drupal_clone($node) : $node;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $node;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp; $cond = &#39;n.nid = %d&#39;;<br>&nbsp; $arguments[] = $param;<br>}<br><br>I have time to work on this and offer performance testing.&nbsp; I am just not sure how far anyone has gone down these roads or is currently working on it.&nbsp; I have been working on custom module development for clients for about 7 months now and I have not really had time to contribute to the Drupal project personally other than by spreading the good word and having clients use Drupal.&nbsp; This is one area that I feel could be substantially improved upon in order for us to allow Drupal to scale beyond the current ability.
<br><br>According to Dries testing on his website, he has seen Drupal into the 80+ Requests per second area (ref. <a href="http://buytaert.net/drupal-webserver-configurations-compared">http://buytaert.net/drupal-webserver-configurations-compared
</a>).&nbsp; With some of the testing I have done with caching, I have seen it go as high as 500-700 Requests per second.&nbsp; <br><br>In my testing out of the box I have seen Drupal do about 10 requests per second, with normal caching about 100 requests per second and with aggressive caching as high as 250 request per second.
<br><br>Thanks,<br><br>Steve Rude<br><br><br><div><span class="gmail_quote">On 3/6/07, <b class="gmail_sendername">Khalid Baheyeldin</b> &lt;<a href="mailto:kb@2bits.com">kb@2bits.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
See this <a href="http://drupal.org/project/memcache" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://drupal.org/project/memcache</a><br><br>Talk to Robert about it before you duplicate it.<div>
<span class="e" id="q_11128d1686daf8bf_1"><br><br><div><span class="gmail_quote">On 3/6/07, <b class="gmail_sendername">
Steve Rude</b> &lt;<a href="mailto:steve@achieveinternet.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">steve@achieveinternet.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

I have done much testing with memory based object caching using
memcached and I think it would be nice if there was the ability to
choose what type of caching you wanted (memory/file/db) and have the
cache.inc functionality basically an abstraction layer that the storage
mechanism can be taken care of by other include files (
e.g. cache-memcache.inc cache-file.inc.&nbsp; The same way that the database
abstraction works.<br><br>I
would be willing to begin some work on this if anyone is interested.&nbsp;
We are building a Drupal site now that will need to scale to &gt;30m
page views per month and I would like to work within an accepted method
to help grow and scale Drupal.&nbsp; <br><br>If anyone has any prior work or projects that can be looked
at to help get this going down the correct path, please point me in the
right direction.<br><br>Thanks,<br><br>Steve Rude<br><br><div><span><span class="gmail_quote">

On 3/6/07, <b class="gmail_sendername">Karoly Negyesi</b> &lt;<a href="mailto:karoly@negyesi.net" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">karoly@negyesi.net</a>&gt; wrote:</span></span><div>

<span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>I might be mistaken but I thought file caching was something much sought<br>after. I found posts relating to it as early as 2002.<br><br>And yet, when the possibility has arisen for it to happen cleanly<br>(pluggable 
cache.inc), the code for it has been dumped into CVS on August<br>26, 2006 and not a single cvs commit since then.<br><br>It&#39;s not used much according to the issues but that probably has something<br>to do with not having a single release.
<br><br>Is the community truly interested? If yes, then please a maintainer step<br>up.<br><br>And yes, I have contacted the current maintainers three months ago to no<br>avail.<br><br>Regards,<br><br>NK<br></blockquote>

</span></div></div>
<br><br clear="all"><br>-- <br><br>Steve Rude<br>Lead Web Developer<br><br>&nbsp;&nbsp;&nbsp;&nbsp;800-618-8777phone / 858-225-0479 fax<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.achieveinternet.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

www.achieveinternet.com</a><br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="mailto:steve@achieveinternet.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
steve@achieveinternet.com</a><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Achieve Internet is a Division of<br>&nbsp;&nbsp;&nbsp;&nbsp;Web Page Maintenance, Inc.
</blockquote></div><br><br clear="all"><br></span></div><div><span class="e" id="q_11128d1686daf8bf_2">-- <br><a href="http://2bits.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">2bits.com</a>
<br><a href="http://2bits.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://2bits.com</a><br>Drupal development, customization and consulting.
</span></div></blockquote></div><br><br clear="all"><br>-- <br><br>Steve Rude<br>Lead Web Developer<br><br>&nbsp;&nbsp;&nbsp;&nbsp;800-618-8777phone / 858-225-0479 fax<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.achieveinternet.com">www.achieveinternet.com</a>
<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="mailto:steve@achieveinternet.com">steve@achieveinternet.com</a><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Achieve Internet is a Division of<br>&nbsp;&nbsp;&nbsp;&nbsp;Web Page Maintenance, Inc.