问题1。
传统关系型数据库,如Oracle、MySQL、DB2等,支持SQL操作,具备ACID属性,通常用于处理业务数据较小的OLTP。随着业务数据的增长,传统关系型数据库已慢慢无法满足业务需求,于是,应用系统开始考虑分库分表的方式,即将一个业务系统的数据按照一定的规则,分布到多个数据库上,这样每个数据库需要处理的数据可以更少,以此满足业务系统不断增加的数据处理需求。中间件+分布式数据库模式就是属于此种情形。其中中间件主要用于数据的分片与分布式事务的处理,对应用来说是透明的。因此,中间件+分布式数据库主要用于数据量大的OLTP业务。而原生分布式数据库需重构数据库系统,原生支持分布式事务处理与数据切分,原生分布式数据库根据其数据处理引擎,有些适用于OLTP场景,有些适用于OLAP场景,还有些适用于离线分析场景。因此,我们在选择数据库时,首先要考虑是应用于哪类业务场景,其次要考虑该业务所要处理的数据量、数据增长的速度,业务的并发量等。如果选择的是中间件+关系型数据库,在数据库设计时,需要特别注意分区键和分区策略的选择,合理布局数据,尽量避免跨节点的分布式事务处理,以提高数据库的效率。
问题2:
对于OLAP应用,虽然各类数据库都可以实现业务数据的处理需求,但实现的成本和实现的效果大不不同。比如,关系型数据库(包括中间件+关系型数据库),大都采用行存,适用于OLTP场景,如果用于OLAP,虽然可实现业务能力,但效率较差。即使是原生分布式数据库,因重构数据库系统,也要根据数据处理引擎,选择合适的原生分布式数据库来处理OLAP业务。至于NoSQL,因SQL支持能力有限,如果要用于OLAP,会增加应用的开发难度。故在实际应用时,需要根据业务场景,以及自身发技术储备,选择合适的数据库。