Improve vote count with cache

This commit is contained in:
2020-09-04 15:22:15 +02:00
parent 24d8f1d58b
commit 5def84282d
3 changed files with 32 additions and 4 deletions

View File

@@ -28,6 +28,7 @@ begin
count_opinion(a.id) as opinions,
zdb.score(a.ctid) _score
from article as a
left join vote_cache ca using (id)
where (
_search is null
or _search = ''
@@ -43,8 +44,8 @@ begin
case sort
when 'title' then a.title
when 'created_at' then a.created_at::text
when 'vote' then count_vote(a.id)->>'score'
when 'popularity' then count_vote(a.id)->>'total'
when 'vote' then ca.score::text
when 'popularity' then ca.total::text
else null
end
end,
@@ -52,8 +53,8 @@ begin
case sort
when 'title' then a.title
when 'created_at' then a.created_at::text
when 'vote' then count_vote(a.id)->>'score'
when 'popularity' then count_vote(a.id)->>'total'
when 'vote' then ca.score::text
when 'popularity' then ca.total::text
end
end
desc,

View File

@@ -35,6 +35,19 @@ begin
end if;
select count_vote(_target_id) into resource;
insert into vote_cache (id, total, score, percent) values
(
_target_id,
(resource->>'total')::int,
(resource->>'score')::int,
(resource->>'percent')::int
)
on conflict (id) do update set
updated_at = now(),
total = excluded.total,
score = excluded.score,
percent = excluded.percent;
end;
$$;

View File

@@ -495,6 +495,20 @@ create table vote_for_comment_on_constitution
unique (created_by_id, target_id)
) inherits (vote);
create table vote_cache
(
id uuid not null primary key,
updated_at timestamp not null default now(),
total int not null default 0,
score int not null default 0,
percent int not null default 0
);
create index on vote_cache (total);
create index on vote_cache (score);
create index on vote_cache (percent);
-- Stats
create table resource_view
(