[buddypress-trac] [BuddyPress Trac] #3794: Deleted activity items remain favourited

buddypress-trac noreply at wordpress.org
Sun Sep 28 17:56:50 UTC 2014


#3794: Deleted activity items remain favourited
--------------------------+--------------------
 Reporter:  ewebber       |       Owner:
     Type:  defect (bug)  |      Status:  new
 Priority:  normal        |   Milestone:  2.2
Component:  Activity      |     Version:  1.5.1
 Severity:  normal        |  Resolution:
 Keywords:  has-patch     |
--------------------------+--------------------

Comment (by boonebgorges):

 > To be completely sure, maybe we could compare what's best in terms of
 query performance between calculating the number of favorites querying the
 user's 'activity_favorite' type VS using a usermeta for the count and
 making sure once an activity is deleted,

 Yes, I think we need some actual benchmarks here. Take the two cases:

 1. We store the count in usermeta. The activity item is deleted. We now
 have to do this:

 {{{
 foreach ( $users_who_favorited as $user_id ) {
     reset_favorite_count_for_user( $user_id );
 }
 }}}

 If the item has been favorited by 100 or 1000 people, this is an extremely
 expensive operation. (Though, granted, it only happens rarely.)

 2. We get favorite counts dynamically from the activity table (or wherever
 it's stored) when the page is rendered. We no longer have to do the
 occasional very-resource-intensive task described in 1, but now we have
 added overhead to every page: instead of automatically fetching all
 relevant usermeta when the page is loaded and having the cached count as
 part of that (one query), we have at least one query for each user (twenty
 queries).

 I would like to see real numbers for these cases on sites with user counts
 in the tens of thousands and activity tables in the hundreds of thousands
 or millions.

 Side note - I think we can do a bit better with 2: a function that
 prefetches counts for all users in the stream with a single DB query.
 Something like: "SELECT item_id, user_id FROM wp_bp_activity WHERE type =
 'activity_favorite' AND user_id IN (1,6,10,30)", then parse it out and add
 it to the cache. I'm fairly certain this will be faster than what imath's
 currently doing, but again, it would be helpful to benchmark a bit.

 As for the question of storage, we seem to be talking about three options:

 1. Standalone table (wp_bp_favorites or something like that)
 2. Activity table (as in imath's patch)
 3. Generic relationship table

 Like r-a-y and jjj, I like option 3 from the point of flexibility and
 elegance. But I am also concerned about duplicating effort, both with what
 WP may one day create and what we already have. We already have a couple
 of relationship tables: `wp_bp_groups_members`, `wp_bp_friends`,
 `wp_bp_user_blogs`, and - most importantly - `wp_bp_activity`. Our
 activity table is already quite generic (it has a `type` column! and
 `item_id` and `secondary_id`!). We should only go to something even more
 generic if we have evidence that wp_bp_activity is, say, getting too
 bloated - but I don't think we have that.

--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/3794#comment:21>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list