一、MySQL Cluster和NoSQL數(shù)據(jù)庫(kù)相比的優(yōu)勢(shì)
1、數(shù)據(jù)一致性
MySQL Cluster 使用多主復(fù)制技術(shù),實(shí)現(xiàn)了數(shù)據(jù)在多個(gè)節(jié)點(diǎn)之間的同步,并保證了數(shù)據(jù)一致性。
2、插件擴(kuò)展性
MySQL Cluster 支持插件機(jī)制,可以擴(kuò)展其功能,例如支持某些存儲(chǔ)引擎、增加新的數(shù)據(jù)分區(qū)方式,以及支持不同的編程語(yǔ)言。
3、安全性
MySQL Cluster 提供了諸如用戶身份驗(yàn)證、訪問(wèn)控制、審計(jì)日志等安全特性,以確保數(shù)據(jù)的安全性。
一、MySQL Cluster和NoSQL數(shù)據(jù)庫(kù)相比的劣勢(shì)
1、復(fù)雜性高
MySQL Cluster 的運(yùn)維和管理比較復(fù)雜,需要專(zhuān)業(yè)技能和經(jīng)驗(yàn)的支持。
2、難以擴(kuò)展到大規(guī)模
雖然 MySQL Cluster 可以處理數(shù)百萬(wàn)并發(fā)連接和海量數(shù)據(jù),但它擴(kuò)展性相對(duì)較差,難以在更大規(guī)模的場(chǎng)景下繼續(xù)擴(kuò)展。
3、數(shù)據(jù)模型限制
MySQL Cluster 是關(guān)系型數(shù)據(jù)庫(kù),適合存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),但是存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù)時(shí),存儲(chǔ)效率不如 NoSQL 數(shù)據(jù)庫(kù)高。
三、MySQL Cluster
1、基本概念
MySQL Cluster簡(jiǎn)單地講是一種MySQL集群的技術(shù),是由一組計(jì)算機(jī)構(gòu)成,每臺(tái)計(jì)算機(jī)可以存放一個(gè)或者多個(gè)節(jié)點(diǎn),其中包括MySQL服務(wù)器,DNB Cluster的數(shù)據(jù)節(jié)點(diǎn),管理其他節(jié)點(diǎn),以及專(zhuān)門(mén)的數(shù)據(jù)訪問(wèn)程序,這些節(jié)點(diǎn)組合在一起,就可以為應(yīng)用提高可高性能、高可用性和可縮放性的Cluster數(shù)據(jù)管理。
MySQL Cluster的訪問(wèn)過(guò)程大致是這樣的,應(yīng)用通常使用一定的負(fù)載均衡算法將對(duì)數(shù)據(jù)訪問(wèn)分散到不同的SQL節(jié)點(diǎn),SQL節(jié)點(diǎn)對(duì)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)訪問(wèn)并從數(shù)據(jù)節(jié)點(diǎn)返回?cái)?shù)據(jù)結(jié)果,管理節(jié)點(diǎn)僅僅只是對(duì)SQL節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)進(jìn)行配置管理。
2、節(jié)點(diǎn)
MySQL Cluster按照節(jié)點(diǎn)類(lèi)型可以分為3種類(lèi)型的節(jié)點(diǎn),分別是管理節(jié)點(diǎn)、SQL節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn),所有的這些節(jié)點(diǎn)構(gòu)成了一個(gè)完整的MySQL集群體系,事實(shí)上,數(shù)據(jù)保存在NDB存儲(chǔ)服務(wù)器的存儲(chǔ)引擎中,表結(jié)構(gòu)則保存在MySQL服務(wù)器中,應(yīng)用程序通過(guò)MySQL服務(wù)器訪問(wèn)數(shù)據(jù),而集群管理服務(wù)器則通過(guò)管理工具ndb_mgmd來(lái)管理NDB存儲(chǔ)服務(wù)器。
管理節(jié)點(diǎn):主要是用來(lái)對(duì)其他的節(jié)點(diǎn)進(jìn)行管理。通常通過(guò)配置config.ini文件來(lái)配置集群中有多少需要維護(hù)的副本、配置每個(gè)數(shù)據(jù)節(jié)點(diǎn)上為數(shù)據(jù)和索引分配多少內(nèi)存、IP地址、以及在每個(gè)數(shù)據(jù)節(jié)點(diǎn)上保存數(shù)據(jù)的磁盤(pán)路徑。SQL節(jié)點(diǎn):簡(jiǎn)單地講就是mysqld服務(wù)器,應(yīng)用不能直接訪問(wèn)數(shù)據(jù)節(jié)點(diǎn),只能通過(guò)SQL節(jié)點(diǎn)訪問(wèn)數(shù)據(jù)節(jié)點(diǎn)來(lái)返回?cái)?shù)據(jù)。任何一個(gè)SQL節(jié)點(diǎn)都是連接到所有的存儲(chǔ)節(jié)點(diǎn)的,所以當(dāng)人任何一個(gè)存儲(chǔ)節(jié)點(diǎn)發(fā)生故障的時(shí)候,SQL節(jié)點(diǎn)都可以把請(qǐng)求轉(zhuǎn)移到另一個(gè)存儲(chǔ)節(jié)點(diǎn)執(zhí)行。通常來(lái)講,SQL節(jié)點(diǎn)越多越好,SQL節(jié)點(diǎn)越多,分配到每個(gè)SQL節(jié)點(diǎn)的負(fù)載就越小,系統(tǒng)的整體性能就越好。數(shù)據(jù)節(jié)點(diǎn):用來(lái)存放Cluster里面的數(shù)據(jù),MySQL Cluster在各個(gè)數(shù)據(jù)節(jié)點(diǎn)之間復(fù)制數(shù)據(jù),任何一個(gè)節(jié)點(diǎn)發(fā)生了故障,始終會(huì)有另外的數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)。通常這3種不同邏輯的節(jié)點(diǎn)可以分布在不同的計(jì)算機(jī)上面,集群最少有3臺(tái)計(jì)算機(jī),為了保證能夠正常維護(hù)集群服務(wù),通常將管理節(jié)點(diǎn)放在一個(gè)單獨(dú)的主機(jī)上。
四、NoSQL 數(shù)據(jù)庫(kù)
1、簡(jiǎn)介
人們使用“ NoSQL 數(shù)據(jù)庫(kù)”一詞時(shí),通常會(huì)使用它來(lái)指代任何非關(guān)系型數(shù)據(jù)庫(kù)。有人說(shuō)“ NoSQL”代表“非 SQL”,而另一些人則說(shuō)“不僅僅是SQL”。無(wú)論哪種方式,大多數(shù)人都認(rèn)為 NoSQL 數(shù)據(jù)庫(kù)是以關(guān)系表以外的格式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)。
一個(gè)常見(jiàn)的誤解是 NoSQL 數(shù)據(jù)庫(kù)或非關(guān)系型數(shù)據(jù)庫(kù)不能很好地存儲(chǔ)關(guān)系型數(shù)據(jù)。NoSQL 數(shù)據(jù)庫(kù)可以存儲(chǔ)關(guān)系型數(shù)據(jù)—它們與關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)方式不同。實(shí)際上,與 SQL 數(shù)據(jù)庫(kù)相比,許多人發(fā)現(xiàn)在 NoSQL 數(shù)據(jù)庫(kù)中對(duì)關(guān)系型數(shù)據(jù)建模比在SQL 數(shù)據(jù)庫(kù)中更容易,因?yàn)椴槐卦诒碇g拆分相關(guān)數(shù)據(jù)。
2、類(lèi)型
隨著時(shí)間的推移,出現(xiàn)了四種主要的 NoSQL 數(shù)據(jù)庫(kù)類(lèi)型:
文檔數(shù)據(jù)庫(kù):將數(shù)據(jù)存儲(chǔ)在類(lèi)似于 JSON(JavaScript 對(duì)象表示法)對(duì)象的文檔中。每個(gè)文檔包含成對(duì)的字段和值。這些值通常可以是各種類(lèi)型,包括字符串、數(shù)字、布爾值、數(shù)組或?qū)ο蟮?,并且它們的結(jié)構(gòu)通常與開(kāi)發(fā)者在代碼中使用的對(duì)象保持一致。由于字段值類(lèi)型和強(qiáng)大的查詢(xún)語(yǔ)言的多樣性,因此文檔數(shù)據(jù)庫(kù)非常適合各種各樣的使用案例,并且可以用作通用數(shù)據(jù)庫(kù)。它們可以橫向擴(kuò)展以適應(yīng)大量數(shù)據(jù)。據(jù) DB-engines 指出,MongoDB 一直被評(píng)為世界上較受歡迎的 NoSQL 數(shù)據(jù)庫(kù),它就是一種文檔數(shù)據(jù)庫(kù)。鍵值數(shù)據(jù)庫(kù):是一種較簡(jiǎn)單的數(shù)據(jù)庫(kù),其中每個(gè)項(xiàng)目都包含鍵和值。通常只能通過(guò)引用鍵來(lái)檢索值,因此學(xué)習(xí)如何查詢(xún)特定鍵值對(duì)通常很簡(jiǎn)單。鍵值數(shù)據(jù)庫(kù)非常適合需要存儲(chǔ)大量數(shù)據(jù)但無(wú)需執(zhí)行復(fù)雜查詢(xún)來(lái)檢索數(shù)據(jù)的使用案例。常見(jiàn)的使用案例包括存儲(chǔ)用戶優(yōu)選項(xiàng)或緩存。Redis 和 DynanoDB 是流行的鍵值數(shù)據(jù)庫(kù)。寬列存儲(chǔ):將數(shù)據(jù)存儲(chǔ)在表、行和動(dòng)態(tài)列中。寬列存儲(chǔ)提供了比關(guān)系型數(shù)據(jù)庫(kù)更大的靈活性,因?yàn)椴恍枰恳恍卸季哂邢嗤牧?。許多人認(rèn)為寬列存儲(chǔ)是二維鍵值數(shù)據(jù)庫(kù)。寬列存儲(chǔ)非常適合需要存儲(chǔ)大量數(shù)據(jù)并且可以預(yù)測(cè)查詢(xún)模式的情況。寬列存儲(chǔ)通常用于存儲(chǔ)物聯(lián)網(wǎng)數(shù)據(jù)和用戶配置文件數(shù)據(jù)。Cassandra 和 HBase 是較受歡迎的兩種寬列存儲(chǔ)。圖形數(shù)據(jù)庫(kù):將數(shù)據(jù)存儲(chǔ)在節(jié)點(diǎn)和邊中。節(jié)點(diǎn)通常存儲(chǔ)有關(guān)人物、地點(diǎn)和事物的信息,而邊緣則存儲(chǔ)有關(guān)節(jié)點(diǎn)之間的關(guān)系的信息。在需要遍歷關(guān)系以查找模式(例如社交網(wǎng)絡(luò),欺詐檢測(cè)和推薦引擎)的使用案例中,圖形數(shù)據(jù)庫(kù)非常出色。Neo4j 和 JanusGraph 是圖形數(shù)據(jù)庫(kù)的示例。延伸閱讀1:常見(jiàn)數(shù)據(jù)庫(kù)有哪些
Oracle:Oracle是甲骨文公司的一款關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在數(shù)據(jù)庫(kù)領(lǐng)域一直處于名列前茅地位的產(chǎn)品,是目前世界上流行的關(guān)系型數(shù)據(jù)庫(kù)之一,是一種高效率、可靠性好、適應(yīng)高吞吐量的數(shù)據(jù)庫(kù)方案。SQL Server:SQL Server是 Microsoft(微軟)公司推出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),主要應(yīng)用于大型的管理系統(tǒng)中。MySQL:MySQL是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典 MySQL AB 公司開(kāi)發(fā),屬于 Oracle 旗下產(chǎn)品。Access:Access是由 Microsoft(微軟)發(fā)布的小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),是微軟把數(shù)據(jù)庫(kù)引擎的圖形用戶界面和軟件開(kāi)發(fā)工具結(jié)合在一起的一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)。