在MySQL Cluster集群,應(yīng)用數(shù)據(jù)均保存在數(shù)據(jù)節(jié)點(diǎn)。因此不僅MySQL實(shí)例可以對(duì)其進(jìn)行訪問,通過NDB的API其他應(yīng)用也可以訪問數(shù)據(jù)。 利用這個(gè)特性,開發(fā)者可以實(shí)現(xiàn)以下功能: 1.進(jìn)行跨應(yīng)用的復(fù)雜查詢 2.簡(jiǎn)單的Key/Value繞過SQL層實(shí)現(xiàn)快速讀寫 3.微秒級(jí)的實(shí)時(shí)響應(yīng) 利用以上功能,通過靈活配置應(yīng)用環(huán)境,可提高生產(chǎn)效率和靈活性,在不改動(dòng)數(shù)據(jù)庫結(jié)構(gòu)的前提下,確保新服務(wù)快速投入使用。 實(shí)現(xiàn)SQL&NoSQL:選擇正確的接口 下面的圖表顯示了所有可用的數(shù)據(jù)庫訪問方法。 MySQL Cluster的原生API 是基于NDB的C + +接口 。所有其他接口通過NDB API訪問數(shù)據(jù)。  在上圖的最右側(cè),一個(gè)應(yīng)用程序已經(jīng)嵌入了NDB API庫,使其能夠使用原生的C + +接口中調(diào)用數(shù)據(jù)庫,并因此提供盡可能低的延遲。 在上圖的左側(cè),MySQL提供了一個(gè)標(biāo)準(zhǔn)SQL接口的數(shù)據(jù)節(jié)點(diǎn),并可以連接所有標(biāo)準(zhǔn)的MySQ連接器包括: - 常見的Web開發(fā)語言和框架,即PHP,Perl,Python,Ruby, Ruby on Rails, Spring, Django等; - JDBC(也額外鏈接到ORMs,包括EclipseLink,Hibernate等) - .NET- ODBC 無論應(yīng)用程序選擇哪種API,最重要的是SQL和NoSQL的數(shù)據(jù)訪問可以同時(shí)操作同一數(shù)據(jù)集,提供給開發(fā)人員無限制的靈活度。 因此,MySQL Cluster可能實(shí)時(shí)支持以下服務(wù)的任意組合: - 使用SQL API的關(guān)系查詢; - 基于key/Value的Web服務(wù),使用的REST / JSON和memcached的API; - 使用ClusterJ和JPA API的企業(yè)應(yīng)用程序; - 目錄服務(wù)使用LDAP API; - 使用NDB API實(shí)現(xiàn)基于位置的實(shí)時(shí)Web服務(wù) 下圖總結(jié)了每個(gè)API的功能和使用場(chǎng)景:  非模式數(shù)據(jù)使用memcached API存儲(chǔ) 作為MySQL Cluster7.2版本里程碑式更新的一部分,Oracle宣布支持memcached的Key/Value API, 允許繞過SQL層直接訪問數(shù)據(jù)庫。作為最新的NoSQL API,它廣泛用于在世界各地的網(wǎng)絡(luò)架構(gòu)中,下面提供了一個(gè)更詳細(xì)的功能介紹。 和memcached一樣,MySQL Cluster在內(nèi)存中緩存了分布式哈希表。利用這個(gè)功能增加對(duì)寫密集型工作的支持,提供了一個(gè)完整的符合ACID關(guān)系模型,支持豐富的查詢,自動(dòng)共享,和99.999%的可用性,并具有豐富的管理和監(jiān)控功能。 所有的寫操作直接作用于MySQL Cluster,消除緩存失效和并通過數(shù)據(jù)一致性檢查,確保數(shù)據(jù)庫和緩存之間的同步。緩存和數(shù)據(jù)庫中的重復(fù)數(shù)據(jù)被淘汰,使數(shù)據(jù)的簡(jiǎn)單重復(fù)跨多個(gè)應(yīng)用,減少內(nèi)存占用。 使用memcached的API,用戶可以簡(jiǎn)化他們的架構(gòu),通過壓縮緩存和將數(shù)據(jù)庫層歸并到MySQL Cluster管理的數(shù)據(jù)數(shù),使他們能夠: - 通過重新使用現(xiàn)有的memcached客戶端保留其現(xiàn)有的投資和在memcached,而無需更改應(yīng)用程序; - 對(duì)密集型應(yīng)用提供更高的寫入性能; - 簡(jiǎn)化向外擴(kuò)展(無論是在memcached和MySQL Cluster層); - 提高持續(xù)運(yùn)行時(shí)間和可用性。  實(shí)現(xiàn)很簡(jiǎn)單 - 應(yīng)用程序發(fā)送讀取和寫入到memcached的進(jìn)程(使用標(biāo)準(zhǔn)memcached的API)。這反過來又調(diào)用NDB的Memcached的驅(qū)動(dòng)程序. 該解決方案已被設(shè)計(jì)為非常靈活,允許應(yīng)用架構(gòu)師找到一個(gè)最適合他們配置的需求。它可能被定位在數(shù)據(jù)節(jié)點(diǎn)、應(yīng)用的Memcached的API,或者在一個(gè)專門的memcached層。 開發(fā)人員仍然可以使用memcached服務(wù)器的高速緩存, 因此它是可以區(qū)別對(duì)待不同的數(shù)據(jù),例如: - 讀寫頻繁的數(shù)據(jù)保存在MySQL Cluster中; - 多讀少寫的數(shù)據(jù)緩存在memcached并備份在MySQL Cluster中; - 具有較短的生命周期,不需保存在MySQL Cluster的數(shù)據(jù)將僅存儲(chǔ)在memcached。 這種方法的好處是,用戶可以通過表配置行為上的每一個(gè)關(guān)鍵前綴的基礎(chǔ)上(在MySQL簇)和應(yīng)用程序不必關(guān)心 - 它只是使用的memcached的API和依賴上軟件存儲(chǔ)在正確的位置(S)的數(shù)據(jù),并保留一切同步。 默認(rèn)情況下,每個(gè)鍵/值寫入到相同的表每個(gè)鍵/值對(duì)存儲(chǔ)在單行 從而使模式較少的數(shù)據(jù)存儲(chǔ)。另外,開發(fā)人員可以定義一個(gè)關(guān)鍵的前綴,使每個(gè)價(jià)值與預(yù)先定義的列在一個(gè)特定的表。當(dāng)然,如果應(yīng)用程序需要通過SQL來訪問相同的數(shù)據(jù),然后開發(fā)人員可以映射的鍵到現(xiàn)有的表列的前綴,使Memcached的訪問已經(jīng)存儲(chǔ)在模式結(jié)構(gòu)化數(shù)據(jù)MySQL簇。 |