oracle集群Oracle RAC是業(yè)界最流行的產品。其架構的最大特點是共享存儲架構(Shared-disk),整個RAC集群是建立在一個共享的存儲設備之上的,節(jié)點之間采用 高速網絡互連。在 Oracle RAC 環(huán)境中,每個 Oracle 數(shù)據塊都被賦予一個(且只有一個)“主”Oracle RAC 節(jié)點。該 Oracle RAC 節(jié)點的全局緩存服務 (GCS) 負責管理對這些數(shù)據塊集的訪問。當其中一個 Oracle 節(jié)點需要訪問某個 Oracle 數(shù)據塊時,它必須首先與該數(shù)據塊協(xié)商。然后,該主節(jié)點的 GCS 或者指示請求的 Oracle 節(jié)點從磁盤中獲取該數(shù)據塊,或者指示該Oracle 數(shù)據塊的當前持有者將被請求的數(shù)據塊發(fā)送到請求節(jié)點。Oracle 嘗試跨所有 RAC 節(jié)點統(tǒng)一分發(fā)該數(shù)據塊的所有權。在 Oracle RAC 環(huán)境中,數(shù)據塊大致相等的所有節(jié)點都將被指定為主節(jié)點。(如果 Oracle RAC 節(jié)點數(shù)是 Oracle 數(shù)據塊數(shù)的約數(shù),則所有 RAC 節(jié)點都是具有同樣數(shù)量的數(shù)據塊的主節(jié)點。)mysql集群MySQL cluster和Oracle RAC完全不同,它采用Shared-nothing架構。整個集群由管理節(jié)點(ndb_mgmd),處理節(jié)點(mysqld)和存儲節(jié)點(ndbd)組 成,不存在一個共享的存儲設備。MySQL cluster主要利用了NDB存儲引擎來實現(xiàn),NDB存儲引擎是一個內存式存儲引擎,要求數(shù)據必須全部加載到內存之中。數(shù)據被自動分布在集群中的不同存 儲節(jié)點上,每個存儲節(jié)點只保存完整數(shù)據的一個分片(fragment)。同時,用戶可以設置同一份數(shù)據保存在多個不同的存儲節(jié)點上,以保證單點故障不會造成數(shù)據丟失。MySQL cluster的優(yōu)點在于其是一個分布式的數(shù)據庫集群,處理節(jié)點和存儲節(jié)點都可以線性增加,整個集群沒有單點故障,可用性和擴展性都可以做到很高,更適合 OLTP應用。但是它的問題在于:1.NDB存儲引擎必須要求數(shù)據全部加載到內存之中,限制比較大,但是目前NDB新版本對此做了改進,允許只在內存中加 載索引數(shù)據,數(shù)據可以保存在磁盤上。2.目前的MySQL cluster的性能還不理想,因為數(shù)據是按照主鍵hash分布到不同的存儲節(jié)點上,如果應用不是通過主鍵去獲取數(shù)據的話,必須在所有的存儲節(jié)點上掃描, 返回結果到處理節(jié)點上去處理。而且,寫操作需要同時寫多份數(shù)據到不同的存儲節(jié)點上,對節(jié)點間的網絡要求很高。