MongoDB集合集合的基礎知識是它們允許您設置表的最大大小,並且在達到大小限制時系統將清除舊數據。MongoDB在PostgreSQL中相當於集合的集合
有沒有人想出了PostgreSQL中的類似設置並將其用於生產?
MongoDB集合集合的基礎知識是它們允許您設置表的最大大小,並且在達到大小限制時系統將清除舊數據。MongoDB在PostgreSQL中相當於集合的集合
有沒有人想出了PostgreSQL中的類似設置並將其用於生產?
還沒有聽說過這樣的事情。我想你可以通過使用模擬封頂表的大小或圓形隊列:
特別有趣的(從我的角度看)是牛的迴應(即看看未接受的答案)。
通過引入一列的表中表示的索引,「收藏」和該列的序列,每個UPSERT可以基於所述條件:
where index = (sequence.nextval % max collection size)
實際上,只是使序列具有最大集合大小的CYCLE值。這可以讓你使用upsert觸發器,它只需要nextval並執行更新/插入操作。 – reedstrm
下面是一個簡單的解決方案對此,例如數據量不是很大,性能要求不太苛刻的情況。
首先,我們來創建我們的表。我們將有一個id列和一個數據列,但是您可以爲您的特定情況提供任何需要的列。
CREATE TABLE capped_collection (
id integer NOT NULL,
data text);
現在,我們爲我們的主鍵的順序,設置MAXVALUE
是我們的上限收集所需的大小,和我們使用CYCLE
選項,這樣序列將計數到MAXVALUE
,然後重新啓動再次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 capped_collection
SET data = 'your data here'
WHERE id = (SELECT nextval('capped_collection_id_seq'))
的nextval
命令獲取我們的下一個ID的最新情況,因爲我們指定CYCLE
它一旦達到MAXVALUE
,將回繞到1。最終的結果是,您在表格中只會有MAXVALUE
行,並且最老的條目已經過期。
(從http://www.rigelgroupllc.com/blog/2014/10/14/capped-collections-in-postgres/)
實現分區和編程丟棄舊的分區,並只保留最近的一個可能的工作。從理論上講,它應該比從表格中刪除行更好。 – Marquez