场景1: 订单按照会员ID拆分,根据会员ID,订单ID,订单号查询。所以订单ID和订单号都要带上会员ID后X位。 但是RANGE_HASH(COL1, COL2, N),只能填两个列,为啥不改为RANGE_HASH(N,COL1, COL2,CoLN… )。
场景2: 有内容表和内容评论表,因为热门内容评论多,冷门热门评论少,如果按照内容ID去拆分评论表,那么数据容易不均匀。因此希望能够自定义分片函数。比如每个内容的最新1万条评论按照内容ID分片存储。1万条之后的内容移到历史评论表,由于不是固定的分片规则,所以需要在内容表加一个记录该内容对应的历史评论所在的库表分片的位置。查询的时候,如果是查询1万条后的评论则先根据内容ID查分片位置再查评论数据。 场景2的这种做法,如何通过PolarDB-X实现?
【回答】
场景1中,可以将RANGE_HASH函数的参数改为N,这样就可以填写多个列了。
场景2中,可以通过自定义分片函数来实现,具体实现方式: 1、先查询出所有符合条件的内容ID, 2、对于每个内容ID,再查询出该内容的历史评论数量,将其存储到一个列表中。
注: 在查询时,先根据内容ID查询出该内容在历史评论表中的位置,然后再查询该位置之后的评论数量即可。可以使用PolarDB-X中的API来实现该功能。