小编lat*_*ell的帖子

更好的数据库“始终保留每个 ID 的 5 个最新条目并删除旧条目”?

我有一个带有history表的 PostgreSQL 数据库,我在其中存储一个fooID(不是主键序列而是一个文本)、一个属性target和当前时间戳,每当targetfooID更改时:

CREATE TABLE history (
  fooId       text not null,
  target      text not null,
  updated_at  timestamp not null default default now()
);
Run Code Online (Sandbox Code Playgroud)

该表中有几百万个条目,每天有几千次更改。每天我都会扫描表格并保留最后 5 个条目fooId并删除所有旧条目。

DELETE ... WHERE id in ... rank() over (partiton by nr order by created_at...查询是我的问题,即工程。只是需要很长时间。

我的问题是:标准 PostgreSQL 表是解决此问题的最佳方法吗?

PostgreSQL 表分区在这里有帮助吗?我知道分区用于轻松丢弃超过 X 天的大块数据,但分区按fooId在我的情况下分区似乎会创建太多分区。

是否有NoSQL数据库会更快,因为它们存储的数据不同?

是否有其他 PostgreSQL 技巧可以帮助我以不同的方式存储数据并针对日常清除的用例进行更优化(SELECT 不是问题,它很少被查询)?

每周 1 小时的独占锁定是可以接受的。大约有 100 万个不同,fooIDs因此每个fooID …

postgresql database-design greatest-n-per-group

6
推荐指数
1
解决办法
1963
查看次数