1、非partition key的查询问题<br>基于水平分库分表,拆分策略为常用的hash法<br>
端上除了partition key只有一个非partition key作为条件查询
注:写入时,基因法生成user_id,如图。关于xbit基因,例如要分8张表,23=8,故x取3,即3bit基因。<br>根据user_id查询时可直接取模路由到对应的分库或分表。<br>根据user_name查询时,先通过user_name_code生成函数生成user_name_code再对其取模路由到对应的分库或分表。<br>id生成常用snowflake算法<br>
端上除了partition key不止一个非partition key作为条件查询
注:按照order_id或buyer_id查询时路由到db_o_buyer库中,按照seller_id查询时路由到db_o_seller库中。<br>感觉有点本末倒置!有其他好的办法吗?改变技术栈呢?<br>
后台除了partition key还有各种非partition key组合条件查询
2、非partition key跨库跨表分页查询问题<br>基于水平分库分表,拆分策略为常用的hash法<br>
注:用NoSQL法解决(ES等)
3、扩容问题<br>基于水平分库分表,拆分策略为常用的hash法<br>
水平扩容表(双写迁移法)
第一步:(同步双写)修改应用配置和代码,加上双写,部署;
第二步:(同步双写)将老库中的老数据复制到新库中;
第三步:(同步双写)以老库为准校对新库中的老数据;
第四步:(同步双写)修改应用配置和代码,去掉双写,部署;