分布式数据库设计

1、分库分表

为解决单库存储数据量太大导致的操作数据库效率问题,一般采用的是分库分表的方式。
分库:即将原本存储在一个库的数据分布到多个库中。
分表:即将原本存储在一个表的数据按照业务特性或数据特性进行拆分,将数据拆分到多个表中。

分库设计过程中常面临的问题:分布式存储后如何保证访问效率,举例:当要查询一个key的数据时,快速定位在哪个库,如何快速地查询出来。方案一般有下面两种方式:

1.1 专门开放一个库来存储路由分库信息

比如在专门的一个库中存储订单号与订单所在库的信息,举例:
orderno,dbSrc
这样在进行订单信息查询时只需进行两次查询即可获取到想要的信息:
①在路由库中获取对应订单所在库
②切换到指定库查询订单信息
这样设计的优点:在路由库设计的对应关系表方便拓展,灵活性较高。
缺点也比较明显:仍不够快,需要进行两次查询!

1.2 在查询的key的结构中设计分库信息

比如设计的订单号中拼接上所在库信息:
ORDER00001_DB1
下划线前半段为实际订单业务的键,后半段即为所在库。这样在查询的时候仅查询一次即可获取到订单信息。
优点:在分库的前提下,仅查询一次即可获取想要的信息;
缺点:将所在库的信息冗余到了key值上,使其显得不够简洁,且对比路由库的设计不方便拓展。

以上两种设计各有优劣。实际应用过程要考虑的因素会更多,以博主所在公司业务举例,采用的是路由库的方式,因为在我们的业务逻辑中一个key对应的信息是可以分布在多个库的,比如一个工单需要关联多个库。当然是用方式2也可以实现,只不过那样就得生成两个工单号,显得比较累赘。

拓展文章:
分库分表后如何设计索引?全局索引、二级索引

你可能感兴趣的:(数据库,分布式)