postgresql中間件pgoneproxy支持冷熱數據分離查詢

    在某些應用場景中,隨着時間的流逝,歷史數據不多被訪問,主要是訪問新產生的數據。這種狀況下會把不多訪問的數據存儲到IO比較慢的存儲設備上,而把長期查詢的數據存放到IO比較快的存儲設備上面。好比,像網上交易系統,能夠把幾個月前的歷史數據存放到機械硬盤上面,而把當月的數據存放到固態硬盤上面。從而讓成本最優的狀況下,提高用戶體驗。spa

     pgoneproxy目前已經支持這種冷熱數據分離的狀況,只要使用pgoneproxy的分庫分表功能,同時把method設置爲buffer便可。下面來詳細介紹下冷熱數據分離查詢的功能:code

1. 配置

    當前假設把冷數據存放到bigtest_1的表中,把熱數據放到bigtest_0的表中。其中假設id在0-100內的數據爲熱數據,而id在101-1000內的數據爲冷數據,則proxy-part-tables項的配置爲:字符串

[
 {
        "table"  : "bigtest",
        "pkey"   :  "id",
        "type"   :  "int",
        "method" :  "buffer",
        "partitions":
        [
                {"suffix":"_0", "group":"data1", "minval":"0", "maxval":"100"},
                {"suffix":"_1", "group":"data1", "minval":"101","maxval":"1000"}
        ]
  }
]

經過上面的配置能夠看到經過minval和maxval來指定數據的範圍。其中minval和maxval能夠是數字和字符串。it

若是須要以時間來進行分表操做,則能夠修改pkey爲時間的字段,同時設置type爲time。在經過minval和maxval來指定時間的範圍。io

2. 查詢

    查詢時只要帶上pkey指定的字段便可。pgoneproxy會根據pkey字段的值按照不一樣的規則進行數據的查詢。下面獲得的數據狀況:table

pgbench=> select * from bigtest_0;
 id |  name  | age 
----+--------+-----
 10 | name10 |  10
 11 | name11 |  11
 12 | name12 |  12
 13 | name13 |  13
 14 | name14 |  14
 15 | name15 |  15
 16 | name16 |  16
(7 rows)

pgbench=> select * from bigtest_1;
 id  |  name   | age 
-----+---------+-----
 110 | name110 | 110
 111 | name111 | 111
 112 | name112 | 112
 113 | name113 | 113
 114 | name114 | 114
 115 | name115 | 115
 116 | name116 | 116
(7 rows)

pgbench=> select * from bigtest where id = 10;
 id |  name  | age 
----+--------+-----
 10 | name10 |  10
(1 row)

pgbench=> select * from bigtest where id = 110;
 id  |  name   | age 
-----+---------+-----
 110 | name110 | 110
(1 row)

也能夠經過這個規則直接把數據插入到對應的表中。若是不指定id指點,則會把查詢語句發送到兩張表中進行查詢。好比進行下面的查詢操做:test

pgbench=> select * from bigtest where name = 'name110';
 id  |  name   | age 
-----+---------+-----
 110 | name110 | 110

這個查詢就會同時查詢bigtest_0和bigtest_1表中的數據,最後進行合併後返回到客戶端。像上面那樣指定id,就會到對應的表中查詢,而不是查詢兩張表,從而能夠提高速度。用戶體驗

    經過上面的方法就能夠解決冷熱數據分離 查詢的問題了。歡迎你們使用。配置

相關文章
相關標籤/搜索