Attempt to speed up more cent group computation on account landing page, also discards item_impressions sooner, a=chris
Attempt to speed up more cent group computation on account landing page, also discards item_impressions sooner, a=chris
diff --git a/src/controllers/components/AccountaccessComponent.php b/src/controllers/components/AccountaccessComponent.php
index f639d3c29..a8e12a991 100644
--- a/src/controllers/components/AccountaccessComponent.php
+++ b/src/controllers/components/AccountaccessComponent.php
@@ -172,13 +172,19 @@ class AccountaccessComponent extends Component
$data['GROUPS'] = [];
$i = 0;
$len = strlen(C\PERSONAL_GROUP_PREFIX);
+ $group_ids = [];
+ foreach ($groups as $group) {
+ $group_ids[] = $group['GROUP_ID'];
+ }
+ $most_recent_views = $impression_model->mostRecentGroupViews($user_id,
+ $group_ids);
foreach ($groups as $group) {
$group_id = $group['GROUP_ID'];
$data['GROUPS'][$i] = $group;
$data['GROUPS'][$i]['MEMBER_STATUS'] =
$data['GROUPS'][$i]['STATUS'];
$data['GROUPS'][$i]["MOST_RECENT_VIEW"] =
- $impression_model->mostRecentGroupView($user_id, $group_id);
+ $most_recent_views[$group_id] ?? 0;
$item = $group_model->getMostRecentGroupPost($group_id);
$data['GROUPS'][$i]['NUM_POSTS'] =
$group_model->getGroupPostCount($group_id);
diff --git a/src/models/ImpressionModel.php b/src/models/ImpressionModel.php
index 15c087122..14d82fe06 100644
--- a/src/models/ImpressionModel.php
+++ b/src/models/ImpressionModel.php
@@ -155,19 +155,35 @@ class ImpressionModel extends Model
$rows = array_values(array_filter($rows));
return $rows;
}
- public function mostRecentGroupView($user_id, $group_id)
+ /**
+ * @param int $user_id
+ * @param array $group_ids
+ */
+ public function mostRecentGroupViews($user_id, $group_ids)
{
$db = $this->db;
- $sql = "SELECT MAX(VIEW_DATE) AS MOST_RECENT " .
+ $in_clause = " (";
+ $comma = "";
+ foreach ($group_ids as $group_id) {
+ $in_clause .= $comma . intval($group_id);
+ $comma = ",";
+ }
+ $in_clause .= ") ";
+ $sql = "SELECT ITEM_ID AS GROUP_ID, MAX(VIEW_DATE) AS MOST_RECENT " .
"FROM ITEM_IMPRESSION " .
"WHERE USER_ID = ? AND ITEM_TYPE = " . C\GROUP_IMPRESSION .
- " AND ITEM_ID = ? ";
- $result = $db->execute($sql, [$user_id, $group_id]);
+ " AND ITEM_ID IN $in_clause GROUP BY ITEM_ID";
+ $result = $db->execute($sql, [$user_id]);
if (!$result) {
- return -1;
+ return [];
}
- $row = $db->fetchArray($result);
- return $row["MOST_RECENT"] ?? -1;
+ $group_views = [];
+ while ($row = $db->fetchArray($result)) {
+ if (!empty($row["GROUP_ID"]) && $row["MOST_RECENT"]) {
+ $group_views[$row["GROUP_ID"]] = $row["MOST_RECENT"];
+ }
+ }
+ return $group_views;
}
/**
* Used by Analytics job to aggregate impression raw data to make
@@ -207,10 +223,10 @@ class ImpressionModel extends Model
}
// delete user data older than one year
$sql = "DELETE FROM ITEM_IMPRESSION WHERE VIEW_DATE < ?";
- $db->execute($sql, [$timestamp]);
+ $db->execute($sql, [$timestamps[C\ONE_DAY]]);
$sql = "DELETE FROM ITEM_IMPRESSION_SUMMARY WHERE UPDATE_TIMESTAMP < ?".
" AND UPDATE_PERIOD > ". C\FOREVER;
- $db->execute($sql, [$timestamp]);
+ $db->execute($sql, [$timestamps[C\ONE_YEAR]]);
}
/**
* Used to return an array of impression statistics for a particular update