閱讀568 返回首頁    go 技術社區[雲棲]


PostgreSQL數據保留窗口功能的使用

標簽

PostgreSQL , 保留窗口 , ttl , stream , continuous view , pipelinedb


背景

類似mongodb的rotate collate(設置表的上限容量、上限記錄數,持續寫入,自動覆蓋最老的記錄),PostgreSQL通過pipelinedb也能實現類似的功能。

此類功能非常適合日誌數據,無需維護成本,持續寫入,自動覆蓋最老的記錄。

pipelinedb計劃會在2017-07月份轉換為postgresql插件,屆時使用會更加便利。

如果不使用pipelinedb的cv ttl功能,直接使用postgresql的話,可以使用PostgreSQL 10的worker process,設置刪除任務,自動調度,刪除記錄,效果也是一樣的。

pipelinedb cv ttl例子

創建一個流(定義數據的格式)

CREATE STREAM s1 (id int, info text, crt_time timestamp default now());  

創建cv ttl,例如根據crt_time字段,保留1分鍾。

CREATE CONTINUOUS VIEW cv1 WITH (ttl = '1 min', ttl_column = 'crt_time') AS  
  SELECT id,info,crt_time FROM s1;  

激活cv

activate cv1;  

測試

寫入數據

pipeline=# insert into s1 values (1,'test',now());  
INSERT 0 1  

查看數據

pipeline=# select * from cv1;  
 id | info |          crt_time            
----+------+----------------------------  
  1 | test | 2017-06-12 17:11:45.774904  
(1 row)  

1分鍾後查看數據,自動被刪除。

修改ttl,保留10秒

pipeline=# select set_ttl('cv1', '10 second', 'crt_time');  
 set_ttl   
---------  
 (10,3)  
(1 row)  

重新測試,數據寫入10秒後,自動刪除。

參考

https://docs.pipelinedb.com/continuous-views.html

《PostgreSQL 10.0 preview 功能增強 - 後台運行(pg_background)》

最後更新:2017-06-13 02:32:06

  上一篇:go  懶人促進社會進步 - 5種索引的原理和優化Case (btree,hash,gin,gist,brin)
  下一篇:go  PostgreSQL (varbit, roaring bitmap) VS pilosa(bitmap庫)