概述
什么是数据分片?请自行百度。本文主要讨论的是数据分片后的查询方案。什么?肯定有人纳闷了,查询还需要什么方案?要是这么想就肤浅了。
场景
试想一下这样的场景,多数情况下都是以单一维度进行范围分片(时间、地区、组织、用户ID等),这么一来是满足单一维度的查询,但是遇到多维度查询就会是一件非常头疼的事情。
不同维度数据查询,场景是不⼀样的,主要是分:有partition_key,没partition_key两个场景;
以电商订单为例,订单表的 partion_key 是 user_id。
用户查看自己的订单列表方便
商家查看自己店铺的订单列表就会非常麻烦,数据分布在不同数节点
解决方案
接下来,我将谈谈平时项目中常用的3种方案,大家也可以根据业务场景选择合适的方案。
一、字段表解析
设计一张字段映射表,通过这张表记录条件索引、分片索引和数据库索引形成映射关系,查询是通过这张表进行路由找到所有需要查询的数据库和表,避免全库、全表扫描。
二、NOSQL冗余方案
db->kafka->es 冗余
数据入库并通过消息队列冗余到NOSQL,后续查询通过NOSQL进行。
三、冗余双写方案
以电商为例,数据库设计时拆分商家库、用户库,数据入库时在商家库和用户库各存入一份。