MongoDB capped collections 的基本原理是它们允许您设置表的最大大小,当达到大小限制时系统将清除旧数据。
有没有人在 PostgreSQL 中提出类似的设置并在生产中使用它?
MongoDB capped collections 的基本原理是它们允许您设置表的最大大小,当达到大小限制时系统将清除旧数据。
有没有人在 PostgreSQL 中提出类似的设置并在生产中使用它?
这是一个简单的解决方案,例如数据大小不太大且性能要求不太苛刻的情况。
首先,让我们创建我们的表。我们将有一个 id 列和一个 data 列,但是您可以拥有您特定情况所需的任何列。
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
现在,我们为我们的主键创建一个序列,将 设置MAXVALUE
为我们的上限集合的所需大小,并使用该CYCLE
选项,以便该序列将计数到MAXVALUE
1,然后从 1 重新开始。
CREATE SEQUENCE capped_collection_id_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 10000
CACHE 1
CYCLE
OWNED BY capped_collection.id;
在下一步中(此处未显示),您应该使用MAXVALUE
记录预先设置表。我们这样做是为了让每个 id 值都有一行,我们不必担心决定是执行 INSERT 还是 UPDATE 操作,只是为了保持简单和高性能。
现在我们的表已经设置好了,每当我们想要插入一个新行时,我们都会像这样执行 UPDATE
UPDATE capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
该nextval
命令为我们提供了下一个 id,并且因为我们指定CYCLE
它一旦到达 就会回绕回 1 MAXVALUE
。最终结果是您将永远只有MAXVALUE
表中的行,最旧的条目被老化。
(来自http://www.rigelgroupllc.com/blog/2014/10/14/capped-collections-in-postgres/)
没听说过这样的事。我想您可以使用以下方法模拟上限表大小或循环队列:
特别有趣(从我的角度来看)是牛的反应(即看不被接受的答案)。
通过向表中引入一个列来表示“集合”的索引和列的序列,每个 upsert 可以基于条件:
where index = (sequence.nextval % max collection size)