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,就会到对应的表中查询,而不是查询两张表,从而能够提高速度。用户体验

    经过上面的方法就能够解决冷热数据分离 查询的问题了。欢迎你们使用。配置

相关文章
相关标签/搜索