一、怎么看待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 是一門特殊的語言,專門用來操作關系數據庫不區分大小寫