天天看點

PostgreSQL 百萬級每秒的流式實時統計應用

pipelinedb是基于postgresql研發的一種流式關系資料庫(0.8.1基于9.4.4),這種資料庫的特點是自動處理流式資料,不存儲原始資料,隻存儲處理後的資料,是以非常适合當下流行的實時流式資料處理,例如網站流量統計,it服務的監控統計,appstore的浏覽統計等等。

例子:

建立動态流視圖,不需要對表進行定義,太棒了,這類似活生生的nosql。

激活流視圖

往流寫入資料

查詢流視圖

在本地虛拟機進行試用

安裝

配置

初始化資料庫

和流處理相關的參數,例如設定記憶體大小,是否同步,合并的batch,工作程序數等等。

啟動資料庫,可以看到原生是支援postgis的,吐個槽,這個項目是專門為nasa研發的麼?

檢視pipelinedb加了哪些函數,有些是插件形式加入的,如postgis,有些是我們可以借鑒,直接拿來用的。

可以看到pipelinedb加入了hll,bloom,tdigest,cmsketch算法,還有很多可以發掘,例如支援grouping set, 視窗查詢的流視圖等等。

在我自己的筆記本中的虛拟機中的性能測試:

建立5個動态流視圖,動态流視圖就是不需要建立基表的流視圖。

激活流統計

檢視資料字典

批量插入測試

測試結果,注意這裡需要使用simple或者extended , 如果用prepared會導緻隻有最後一條sql起作用。現在不清楚是pipelinedb還是pgbench的bug。

每秒入庫約58萬條記錄,并完成5個流視圖的統計。

如果用實體機的話,估計可以到500萬每秒的級别。後面有時間再試試。

因為都在記憶體中完成,是以速度非常快。

pipelinedb使用了worker程序來處理資料合并。

壓測時的top如下:

在寫入 10 億 流資料後,資料庫的大小依舊隻有13mb,因為流資料都在記憶體中,處理完就丢棄了。

如果你的應用有類似場景,恭喜你,找到殺手锏了。

[參考]

https://github.com/pipelinedb/pipelinedb

https://www.pipelinedb.com/