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