摘录文章:蚂蚁金服研究员日照:OceanBase如何实现透明可扩展的企业级数据库?
在互联网里我们还会用另外一个方案叫做分库分表。这个方案非常好,用一个形象的比喻来说它其实有点像狗皮膏药。如果哪里有扩展性问题,就把它往哪里贴就好了。但是这种方案有很多问题并没有解决,它没有实现透明可扩展。
数据库里有一个最基本的功能叫做全局索引,当实现分库分表以后,对用户来讲原来是一张表格,现在被划分为多张表格,表格的语义都发生了区别。分库分表的方案从理论上讲就永远不可能实现全区索引这个功能。另外整个分库分表方案往往会在上面架一层中间件,通过中间件做简单的 SQL 转发、路由、聚合,以及一些比较基础的数据查询功能。
通过中间件提供的 SQL 能力相比真正的企业级数据库的能力,有非常大的差距,它不支持很多功能,包括全局快照——跨多台机器的全局快照,包括复杂查询——跨服务器的复杂查询,跨服务器的写入操作,也包括一个很重要的能力——带容错能力的分布式事务。
很多中间件是支持分布式事务的,但是中间件支持的分布式事务是不带容错能力的分布式事务。当服务器出现故障的时候,整个事务会被夯住,需要人肉去做容错。这种方案跟真正的分布式数据库里带容错的分布式事务是两个方案,有本质的差别。后面会详细的讲这个问题。