postgresql中间件pgoneproxy支持冷热数据分离查询

    在某些应用场景中,随着时间的流逝,历史数据很少被访问,主要是访问新产生的数据。这种情况下会把很少访问的数据存储到IO比较慢的存储设备上,而把长期查询的数据存放到IO比较快的存储设备上面。比如,像网上交易系统,可以把几个月前的历史数据存放到机械硬盘上面,而把当月的数据存放到固态硬盘上面。从而让成本最优的情况下,提升用户体验。

     pgoneproxy目前已经支持这种冷热数据分离的情况,只要使用pgoneproxy的分库分表功能,同时把method设置为buffer即可。下面来详细介绍下冷热数据分离查询的功能:

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可以是数字和字符串。

如果需要以时间来进行分表操作,则可以修改pkey为时间的字段,同时设置type为time。在通过minval和maxval来指定时间的范围。

2. 查询

    查询时只要带上pkey指定的字段即可。pgoneproxy会根据pkey字段的值按照不同的规则进行数据的查询。下面得到的数据情况:

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指点,则会把查询语句发送到两张表中进行查询。比如进行下面的查询操作:

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

这个查询就会同时查询bigtest_0和bigtest_1表中的数据,最后进行合并后返回到客户端。像上面那样指定id,就会到对应的表中查询,而不是查询两张表,从而可以提升速度。

    通过上面的方法就可以解决冷热数据分离 查询的问题了。欢迎大家使用。

转载于:https://my.oschina.net/u/918218/blog/713982

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值