1
我有一個約10,000用戶的表。我想按照score
的排序觀看前10名,並在列表組成變化或前10名的任何分數發生變化時給予實時更新。Postgres觸發任何「頂部」行更改
用觸發器做到這一點的最好方法是什麼?這會是一個非常昂貴的觸發器,可以繼續運行嗎?
我有一個約10,000用戶的表。我想按照score
的排序觀看前10名,並在列表組成變化或前10名的任何分數發生變化時給予實時更新。Postgres觸發任何「頂部」行更改
用觸發器做到這一點的最好方法是什麼?這會是一個非常昂貴的觸發器,可以繼續運行嗎?
只要你有score
指數,這將是便宜有一個AFTER UPDATE
觸發FOR EACH ROW
包含:
IF (SELECT count(*)
FROM (SELECT 1
FROM users
WHERE score > NEW.score
LIMIT 10
) top_users
) < 10
OR
(SELECT count(*)
FROM (SELECT 1
FROM users
WHERE score > OLD.score
LIMIT 10
) top_users
) < 10
THEN
/* your action here */
END IF;
你想也需要一個DELETE
觸發僅包含的第二部分查詢和一個INSERT
只觸發第一部分。
我在這裏看到的問題是/* your action here */
。
這應該是一個很短的操作,比如向隊列中添加一些東西,否則最終可能會導致長事務和長鎖。
如何將數據與退貨程序連接起來?例如,要發送一行,我在'CREATE TRIGGER'語句中使用'FOR EACH ROW EXECUTE PROCEDURE'。這是你用'/ *你的動作在這裏* /'確定的問題嗎?我是Postgres的新手,所以你可以提供更多的細節。 –
是的,這將是一個'FOR EACH ROW'觸發器。我的疑問是,我不知道你打算在觸發中做什麼。它不應該說 - 在前端同步啓動刷新。 *您將數據與返回程序*連接起來是什麼意思? –