[wp-trac] [WordPress Trac] #3364: Metadata db improvements
WordPress Trac
wp-trac at lists.automattic.com
Fri Nov 17 16:58:03 GMT 2006
#3364: Metadata db improvements
--------------------------+-------------------------------------------------
Reporter: dougal | Owner: dougal
Type: enhancement | Status: new
Priority: low | Milestone: 2.1
Component: Optimization | Version: 2.1
Severity: normal | Keywords: meta, metadata, postmeta, usermeta, catmeta, postcustom, custom
--------------------------+-------------------------------------------------
Some disussion on the bbPress bbDev mailing list came up about our
implementation of postmeta (and of course the other metas, by extension).
We currently have a schema that includes 4 fields: {{{meta_id}}},
{{{post_id}}}, {{{meta_key}}}, and {{{meta_value}}}. The {{{meta_id}}} key
is really only needed because the {{{post_id}}}+{{{meta_key}}} combination
is not unique.
I originally designed it this way on purpose, to maximize the flexibility
and simplicity of the system. However, if we made
{{{post_id}}}+{{{meta_key}}} unique, it could improve the database
performance for meta queries. Since the bbPress API is still more liquid,
they are planning to go ahead and make this modification. Making a similar
change in WP would not only improve the db optimization when fetching
metadata, but would maintain consistency between the two sister
applications.
I think we can do this while maintaining the current API functions,
because we already 'smush' duplicate keys in the database into a single
cache key with an array of values. Basically, we want to make the database
structure mimic the PHP data structure that we're already using. This
should be pretty easy to do by just adding a little bit of automatic
serialization/deserialization, and using REPLACE instead of INSERT in
{{{add_post_meta()}}} and friends.
The main concern here is whether it might break existing plugins. But I
think we can make the change transparent to code that uses the API
functions (rather than direct db queries). And even code that is using
direct queries shouldn't require much change, just some magic
serialization/deserialization on the values. I'm going to try to find time
to work on patches for this, and maybe work up some test cases. In the
meantime, I'd appreciate any feedback from anyone who has an opinion on
this.
--
Ticket URL: <http://trac.wordpress.org/ticket/3364>
WordPress Trac <http://trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list