数据库沉余
A. 数据库与数据仓库的本质区别是什么
1、存放值区别:
数据库只存放在当前值,数据仓库存放历史值;
2、数据变化区别:
数据库内数据是动态变化的,只要有业务发生,数据就会被更新,而数据仓库则是静态的历史数据,只能定期添加、刷新;
3、数据结构区别:
数据库中的数据结构比较复杂,有各种结构以适合业务处理系统的需要,而数据仓库中的数据结构则相对简单;
4、访问频率不同:
数据库中数据访问频率较高,但访问量较少,而数据仓库的访问频率低但访问量却很高;
5、目标人群区别:
数据库中数据的目标是面向业务处理人员的,为业务处理人员提供信息处理的支持,而数据仓库则是面向高层管理人员的,为其提供决策支持;
B. Newsql为何使传统关系数据库黯然失色
传统数据库仍旧会有一席之地,至于NewSQL的优势又是什么,简单和大家说说:
首先关于“中间件+关系数据库分库分表”算不算NewSQL分布式数据库问题,国外有篇论文pavlo-newsql-sigmodrec,如果根据该文中的分类,Spanner、TiDB、OB算是第一种新架构型,Sharding-Sphere、Mycat、DRDS等中间件方案算是第二种(文中还有第三种云数据库,本文暂不详细介绍)。
基于中间件(包括SDK和Proxy两种形式)+传统关系数据库(分库分表)模式是不是分布式架构?我觉得是的,因为存储确实也分布式了,也能实现横向扩展。但是不是“伪”分布式数据库?从架构先进性来看,这么说也有一定道理。
“伪”主要体现在中间件层与底层DB重复的SQL解析与执行计划生成、存储引擎基于B+Tree等,这在分布式数据库架构中实际上冗余低效的。为了避免引起真伪分布式数据库的口水战,本文中NewSQL数据库特指这种新架构NewSQL数据库。
NewSQL数据库相比中间件+分库分表的先进在哪儿?画一个简单的架构对比图:
- 传统数据库面向磁盘设计,基于内存的存储管理及并发控制,不如NewSQL数据库那般高效利用;
- 中间件模式SQL解析、执行计划优化等在中间件与数据库中重复工作,效率相比较低;
- NewSQL数据库的分布式事务相比于XA进行了优化,性能更高;
- 新架构NewSQL数据库存储设计即为基于paxos(或Raft)协议的多副本,相比于传统数据库主从模式(半同步转异步后也存在丢数问题),在实现了真正的高可用、高可靠(RTO<30s,RPO=0);
- NewSQL数据库天生支持数据分片,数据的迁移、扩容都是自动化的,大大减轻了DBA的工作,同时对应用透明,无需在SQL指定分库分表键。