exadata的架构我也仔细思考过很久,个人愚见,exadata引进了部分MPP思想,当并非MPP native,只有share nothing才可以做到MPP native。exadata的MPP成分:存储节点相当于sharding节点,支持列式存储和query predicate push down,计算节点相当于mapreduce的reduce聚合运算节点。
一、怎么看待oracle的exadata与share nothing系列的hadoop等
exadata的架构我也仔细思考过很久,个人愚见,exadata引进了部分MPP思想,当并非MPP native,只有share nothing才可以做到MPP native。exadata的MPP成分:存储节点相当于sharding节点,支持列式存储和query predicate push down,计算节点相当于mapreduce的reduce聚合运算节点。exadata vs GP的区别,看两个大表Jion的场景,A jion B,jion键是A和B的主键;A、Bsharding分片都是两个,sharding原则相同,A的分片1和B的分片1都在同一个节点;如果是GP,在本地就可以做join,然后做汇总,如果是exadata,估计要把所有sharding分片数据读取到计算节点才能做join。这个例子中,exadata缺点无法利用data locality的特性。
另外一个例子,A jion B,如果A的分片跟B的分片不在同一节点,GP的处理是对B或者A或者AB一起的分片择优做data redistribution,这个过程比较复杂,类似map reduce里面的shuffle,也有点像RDBMS里面的hash join,而且如何择优做redistribution、join,是一个hard problem,数学上讲是个NP问题,需要采用启发式搜索的决策树算法;GP针对此问题实现了一个复杂的并行的分布式的基于代价的查询计划优化器叫做orca,apache的HAWQ也是用的这个。exadata是否会做这件事不太确定,个人猜测应该是聚合到计算节点来做join,如果是这样,那exadata就是一个利用硬件堆积性能的伪MPP数据库。补充一点,涉及到大量数据的网络传输,任务较多时,不同任务之间的互相影响可能会导致单个步骤执行过慢而影响整个系统的性能,实现一个分布式OLAP并没有那么难,很多公司都号称有MPP产品了,但是要多租户多任务并发公平调度,就很困难了。
延伸阅读:
二、SQL是什么
Structured Query Language
‘SQL’是结构化查询语言,是一种用来操作 RDBMS 的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库
- SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询,如select**
DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete**
TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
DCL:数据控制语言,进行授权与权限回收,如grant、revoke
DDL:数据定义语言,进行数据库、表的管理等,如create、drop
CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor - 对于web程序员来讲,重点是数据的crud(增删改查),必须熟练编写DQL、DML,能够编写DDL完成数据库、表的操作,其它语言如TPL、DCL、CCL了解即可
- SQL 是一门特殊的语言,专门用来操作关系数据库
- 不区分大小写