[wp-hackers] how big objects can i cache using wp transient api?
Phillip Lord
phillip.lord at newcastle.ac.uk
Mon Oct 3 11:03:23 UTC 2011
I have been worrying about this also.
I may have this wrong, but looking at the back end implementation,
transients appears to back on directly to the options API. Now at times,
this calls "wp_load_alloptions()"
function get_transient( $transient ) {
// ....snip
// If option is not in alloptions, it is not autoloaded and thus has a timeout
$alloptions = wp_load_alloptions();
// .... snip
}
which in turn looks like this...
function wp_load_alloptions() {
// ....snip
if ( !$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload = 'yes'" ) )
$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" );
// ....snip
}
So, it seems to me, that extensive use of the transients API with big
things is going to come with a substantial performance problem.
Potentially, this will affect not just "get_transient" calls but also
anything that results in wp_load_alloptions() being called.
The reason I mention this, is I have tried putting a reasonable amount
of stuff (100's of records, although not individually large) into
transients. I also appear to be getting some memory issues, and I am a
bit suspicious that this is transients, but haven't had time to
investigate really heavily.
I was thinking of rewriting the entire thing as a custom post type,
although this seems a pity as the transients API otherwise does (nearly)
what I need.
Am I barking up the wrong tree here? Have I totally misunderstood the
implementation?
Phil
Otto <otto at ottodestruct.com> writes:
> The option_value is longtext, which has a maximum size of 2^32-1
> (4,294,967,295) characters.
>
> In practical terms, the limit will be lower, but there's no particular
> issue with storing large data values in a transient. You may have
> speed issues in retrieving something that large from the database very
> often though. I'd suggest evaluating what parts of the data you
> actually need to use and store only those. If you're using the whole
> thing, then maybe another approach would work better, such as storing
> it in a custom post type.
>
> -Otto
>
>
>
> On Fri, Sep 30, 2011 at 5:41 AM, Konrad Karpieszuk
> <kkarpieszuk at gmail.com> wrote:
>> hello
>>
>> i cannnot find answer for this question. i have quite huge array which
>> i want to remember in transient. this array after serialization has
>> lenght over 300000 signs ( i check this using
>> strlen(serialize($my_array))
>>
>> will it be a problem for transient api?
>>
>> --
>> (en) regards / (pl) pozdrawiam
>> Konrad Karpieszuk
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
>
--
Phillip Lord, Phone: +44 (0) 191 222 7827
Lecturer in Bioinformatics, Email: phillip.lord at newcastle.ac.uk
School of Computing Science, http://homepages.cs.ncl.ac.uk/phillip.lord
Room 914 Claremont Tower, skype: russet_apples
Newcastle University, msn: msn at russet.org.uk
NE1 7RU twitter: phillord
More information about the wp-hackers
mailing list