如何透明地支持数据库分库分表

60 阅读2分钟

设计一个分布式数据库,让应用逻辑不必关心数据库的物理分布。这样,无论把数据库拆成多少个分库,编程时都会像面对一个物理库似的没什么区别。

单一数据库服务器的处理能力是有限的,当数据量和访问量超过一定级别以后,就要开始做分库分表的操作。比如,把一个数据库的大表拆成几张表,把一个库拆成几个库,把读和写的操作分离开等等。我们把这类技术统称为分布式数据库技术。

分库分表(Sharding)有时也翻译成“数据库分片”。

image.png

通过数据库分片,我们可以提高数据库服务的性能和可伸缩性。当数据量和访问量增加时,增加数据库节点的数量就行了。不过,虽然数据库的分片带来了性能和伸缩性的好处,但它也带来了一些挑战。最明显的一个挑战,是数据库分片逻辑侵入到业务逻辑中。

数据库的物理分布,对应用是透明的。那么业务开发起来就很爽了。

需要解决的问题

跨库查询

首先是跨库查询的难题 在多个库中都执行查询,然后把查询结果合并,一般还要排序。

跨库写入

如果对数据库写入时遇到了跨库的情况,那么就必须实现分布式事务。

自动识别写哪个库

每次数据操作仅针对一个分库的时候,能否自动确定是哪个分库

解析 SQL 语句,判断访问哪个数据库,这一块,可以使用现成的工具,例如 Antlr。

此文章为3月Day29学习笔记,内容来源于极客时间《14 | 前端技术应用(一):如何透明地支持数据库分库分表? (geekbang.org)