nosql是not only sql的意思。是近今年新發(fā)展起來的存儲(chǔ)系統(tǒng)。當(dāng)前使用最多的是key-value模型,用于處理超大規(guī)模的數(shù)據(jù)。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了堆龍德慶免費(fèi)建站歡迎大家使用!
以下是摘自百度百科中的一部分
NoSQL 是非關(guān)系型數(shù)據(jù)存儲(chǔ)的廣義定義。它打破了長久以來關(guān)系型數(shù)據(jù)庫與ACID理論大一統(tǒng)的局面。NoSQL 數(shù)據(jù)存儲(chǔ)不需要固定的表結(jié)構(gòu),通常也不存在連接操作。在大數(shù)據(jù)存取上具備關(guān)系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢(shì)。該術(shù)語在 2009 年初得到了廣泛認(rèn)同。
當(dāng)今的應(yīng)用體系結(jié)構(gòu)需要數(shù)據(jù)存儲(chǔ)在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲(chǔ)就是為了實(shí)現(xiàn)這個(gè)需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業(yè) NoSQL 實(shí)現(xiàn)。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認(rèn)同。從這些NoSQL項(xiàng)目的名字上看不出什么相同之處:Hadoop、Voldemort、Dynomite,還有其它很多。
NoSQL與關(guān)系型數(shù)據(jù)庫設(shè)計(jì)理念比較
關(guān)系型數(shù)據(jù)庫中的表都是存儲(chǔ)一些格式化的數(shù)據(jù)結(jié)構(gòu),每個(gè)元組字段的組成都一樣,即使不是每個(gè)元組都需要所有的字段,但數(shù)據(jù)庫會(huì)為每個(gè)元組分配所有的字段,這樣的結(jié)構(gòu)可以便于表與表之間進(jìn)行連接等操作,但從另一個(gè)角度來說它也是關(guān)系型數(shù)據(jù)庫性能瓶頸的一個(gè)因素。而非關(guān)系型數(shù)據(jù)庫以鍵值對(duì)存儲(chǔ),它的結(jié)構(gòu)不固定,每一個(gè)元組可以有不一樣的字段,每個(gè)元組可以根據(jù)需要增加一些自己的鍵值對(duì),這樣就不會(huì)局限于固定的結(jié)構(gòu),可以減少一些時(shí)間和空間的開銷。
你好,目前大數(shù)據(jù)常用的工具有Apache Hadoop、Apache Spark、Apache Storm、Apache Cassandra、Apache Kafka等等。下面分別介紹一下這幾種工具:
Hadoop用于存儲(chǔ)過程和分析大數(shù)據(jù)。Hadoop 是用 Java 編寫的。Apache Hadoop 支持并行處理數(shù)據(jù),因?yàn)樗瑫r(shí)在多臺(tái)機(jī)器上工作。它使用集群架構(gòu)。集群是一組通過 LAN 連接的系統(tǒng)。Apache Hadoop?是大數(shù)據(jù)行業(yè)中最常用的工具之一
Apache Spark可以被認(rèn)為是 Hadoop 的繼承者,因?yàn)樗朔怂娜秉c(diǎn)。Spark 與 Hadoop 不同,它同時(shí)支持實(shí)時(shí)和批處理。它是一個(gè)通用的集群系統(tǒng)。它還支持內(nèi)存計(jì)算,比 Hadoop 快 100 倍。這可以通過減少對(duì)磁盤的讀/寫操作次數(shù)來實(shí)現(xiàn)
Apache Storm 是一個(gè)開源的大數(shù)據(jù)工具,分布式實(shí)時(shí)和容錯(cuò)處理系統(tǒng)。它有效地處理無限的數(shù)據(jù)流。通過無界流,我們指的是不斷增長的數(shù)據(jù),并且有一個(gè)開始但沒有定義的結(jié)束
Apache Cassandra是一個(gè)分布式數(shù)據(jù)庫,可提供高可用性和可擴(kuò)展性,而不會(huì)影響性能效率。它是最好的大數(shù)據(jù)工具之一,可以容納所有類型的數(shù)據(jù)集,即結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化
MongoDB?是一個(gè)開源數(shù)據(jù)分析工具,提供跨平臺(tái)能力的NoSQL數(shù)據(jù)庫。對(duì)于需要快速移動(dòng)和實(shí)時(shí)數(shù)據(jù)來做出決策的企業(yè)來說,它堪稱典范
Apache Kafka 是一個(gè)分布式事件處理或流式處理平臺(tái),可為系統(tǒng)提供高吞吐量。它的效率足以每天處理數(shù)萬億個(gè)事件。它是一個(gè)高度可擴(kuò)展的流媒體平臺(tái),還提供了出色的容錯(cuò)能力
當(dāng)然,除了這些之外,還有一些其他跨平臺(tái)的工具可供大數(shù)據(jù)使用。
希望我的回答能幫到你!
Apache Cassandra數(shù)據(jù)庫的優(yōu)缺點(diǎn)有哪些?
本文將超越眾所周知的一些細(xì)節(jié),探討與 Cassandra 相關(guān)的不太明顯的細(xì)節(jié)。您將檢查 Cassandra 數(shù)據(jù)模型、存儲(chǔ)模式設(shè)計(jì)、架構(gòu),以及與 Cassandra 相關(guān)的潛在驚喜。
在數(shù)據(jù)庫歷史文章 “What Goes Around Comes Around”中,Michal Stonebraker 詳細(xì)描述了存儲(chǔ)技術(shù)是如何隨著時(shí)間的推移而發(fā)展的。實(shí)現(xiàn)關(guān)系模型之前,開發(fā)人員曾嘗試過其他模型,比如層次圖和有向圖。值得注意的是,基于 SQL 的關(guān)系模型(即使到現(xiàn)在也仍然是事實(shí)上的標(biāo)準(zhǔn))已經(jīng)盛行了大約 30 年。鑒于計(jì)算機(jī)科學(xué)的短暫歷史及其快速發(fā)展的步伐,這是一項(xiàng)非凡的成就。關(guān)系模型建立已久,以至于許多年來,解決方案架構(gòu)師很容易為應(yīng)用程序選擇數(shù)據(jù)存儲(chǔ)。他們的選擇總是關(guān)系數(shù)據(jù)庫。
諸如增加系統(tǒng)、移動(dòng)設(shè)備、擴(kuò)展的用戶在線狀態(tài)、云計(jì)算和多核系統(tǒng)的用戶群之類的開發(fā)已經(jīng)導(dǎo)致產(chǎn)生越來越多的大型系統(tǒng)。Google 和 Amazon 之類的高科技公司都是首批觸及規(guī)模問題的公司。他們很快就發(fā)現(xiàn)關(guān)系數(shù)據(jù)庫并不足以支持大型系統(tǒng)。
為了避免這些挑戰(zhàn),Google 和 Amazon 提出了兩個(gè)可供選擇的解決方案:Big Table 和 Dynamo,他們可以由此放松關(guān)系數(shù)據(jù)模型提供的保證,從而實(shí)現(xiàn)更高的可擴(kuò)展性。Eric Brewer 的 “CAP Theorem”后來官方化了這些觀察結(jié)果。它宣稱,對(duì)于可擴(kuò)展性系統(tǒng),一致性、可用性和分區(qū)容錯(cuò)性都是權(quán)衡因素,因?yàn)楦静豢赡軜?gòu)建包含所有這些屬性的系統(tǒng)。不久之后,根據(jù) Google 和 Amazon 早期的工作,以及所獲得的對(duì)可擴(kuò)展性系統(tǒng)的理解,計(jì)劃創(chuàng)建一種新的存儲(chǔ)系統(tǒng)。這些系統(tǒng)被命名為 “NoSQL” 系統(tǒng)。該名稱最初的意思是 “如果想縮放就不要使用 SQL”,后來被重新定義為 “不只是 SQL”,意思是說,除了基于 SQL 的解決方案外,還有其他的解決方案。
有許多 NoSQL 系統(tǒng),而且每一個(gè)系統(tǒng)都緩和或改變了關(guān)系模型的某些方面。值得注意的是,沒有一個(gè) NoSQL 解決方案適用于所有的場(chǎng)景。每一個(gè)解決方案都優(yōu)于關(guān)系模型,且針對(duì)一些用例子集進(jìn)行了縮放。我的早期文章 “在 Data Storage Haystack 中為您的應(yīng)用程序?qū)ふ艺_的數(shù)據(jù)解決方案” 討論了如何使應(yīng)用程序需求和 NoSQL 解決方案相匹配。
Apache Cassandra是其中一個(gè)最早也是最廣泛使用的 NoSQL 解決方案。本文詳細(xì)介紹了 Cassandra,并指出了一些首次使用 Cassandra 時(shí)不容易發(fā)現(xiàn)的細(xì)節(jié)和復(fù)雜之處。
Apache Cassandra
Cassandra 是一個(gè) NoSQL 列族 (column family) 實(shí)現(xiàn),使用由 Amazon Dynamo 引入的架構(gòu)方面的特性來支持 Big Table 數(shù)據(jù)模型。Cassandra 的一些優(yōu)勢(shì)如下所示:
高度可擴(kuò)展性和高度可用性,沒有單點(diǎn)故障
NoSQL 列族實(shí)現(xiàn)
非常高的寫入吞吐量和良好的讀取吞吐量
類似 SQL 的查詢語言(從 0.8 起),并通過二級(jí)索引支持搜索
可調(diào)節(jié)的一致性和對(duì)復(fù)制的支持
靈活的模式
這些優(yōu)點(diǎn)很容易讓人們推薦使用 Cassandra,但是,對(duì)于開發(fā)人員來說,至關(guān)重要的一點(diǎn)是要深入探究 Cassandra 的細(xì)節(jié)和復(fù)雜之處,從而掌握該程序的復(fù)雜性。
什么是列?
列 有點(diǎn)用詞不當(dāng),使用名稱單元格 很可能更容易理解一些。我會(huì)堅(jiān)持使用列,因?yàn)檫@是一種習(xí)慣用法。
Cassandra 數(shù)據(jù)模型包括列、行、列族和密鑰空間 (keyspace)。讓我們逐一進(jìn)行詳細(xì)介紹它們。
?列:Cassandra 數(shù)據(jù)模型中最基本的單元,每一個(gè)列包括一個(gè)名稱、一個(gè)值和一個(gè)時(shí)間戳。在本文的討論中,我們忽略了時(shí)間戳,您可以將一個(gè)列表示為一個(gè)名稱值對(duì)(例如 author="Asimov")。
?行:用一個(gè)名稱標(biāo)記的列的集合。例如,清單 1 顯示了如何表示一個(gè)行:
清單 1. 行的示例
"Second Foundation"- {
author="Asimov",
publishedDate="..",
tag1="sci-fi", tag2="Asimov"
}
Cassandra 包括許多存儲(chǔ)節(jié)點(diǎn),并且在單個(gè)存儲(chǔ)節(jié)點(diǎn)內(nèi)存儲(chǔ)每一個(gè)行。在每一行內(nèi),Cassandra 總是存儲(chǔ)按照列名稱排序的列。使用這種排序順序,Cassandra 支持切片查詢,在該查詢中,給定了一個(gè)行,用戶可以檢索屬于給定的列名稱范圍內(nèi)的列的子集。例如,范圍 tag0 到 tag9999 內(nèi)的切片查詢會(huì)獲得所有名稱范圍在 tag0 和 tag9999 內(nèi)的列。
?列族:用一個(gè)名稱標(biāo)記的行的集合。清單 2 顯示了樣例數(shù)據(jù)的可能形式:
清單 2. 列族示例
Books-{
"Foundation"-{author="Asimov", publishedDate=".."},
"Second Foundation"-{author="Asimov", publishedDate=".."},
…
}
人們常說列族就像是關(guān)系模型中的一個(gè)表格。如下例所示,相似點(diǎn)將不復(fù)存在。
?密鑰空間:許多列族共同形成的一個(gè)組。它只是列族的一個(gè)邏輯組合,并為名稱提供獨(dú)立的范圍。
最后,超級(jí)列位于一個(gè)列族中,該列族對(duì)一個(gè)密鑰下的多個(gè)列進(jìn)行分組。正如開發(fā)人員不贊成使用超級(jí)列一樣,在此,我對(duì)此也不作任何討論。
Cassandra 與 RDBMS 數(shù)據(jù)模型
根據(jù)以上對(duì) Cassandra 數(shù)據(jù)模型的描述,數(shù)據(jù)被放入每一個(gè)列族的二維 (2D) 空間中。要想在列族中檢索數(shù)據(jù),用戶需要兩個(gè)密鑰:行名稱和列名稱。從這個(gè)意義上來說,盡管還存在多處至關(guān)重要的差異,關(guān)系模型和 Cassandra 仍然非常相似。
?關(guān)系列均勻分布在表中的所有行之間。數(shù)據(jù)項(xiàng)之間通常有明顯的縱向關(guān)系,但這種情況并不適用于 Cassandra 列。這就是 Cassandra 使用各個(gè)數(shù)據(jù)項(xiàng)(列)來存儲(chǔ)列名稱的原因。
?有了關(guān)系模型,2D 數(shù)據(jù)空間就完整了。2D 空間內(nèi)的每一個(gè)點(diǎn)至少應(yīng)當(dāng)擁有存儲(chǔ)在此處的 null 值。另外,這種情況不適用于 Cassandra,Cassandra 可以擁有只包括少數(shù)項(xiàng)的行,而其他行可以擁有數(shù)百萬個(gè)項(xiàng)。
?有了關(guān)系模型,就可以對(duì)模式進(jìn)行預(yù)定義,而且在運(yùn)行時(shí)不可以更改模式,而 Cassandra 允許用戶在運(yùn)行時(shí)更改模式。
?Cassandra 始終存儲(chǔ)數(shù)據(jù),這樣就可以根據(jù)其名稱對(duì)列進(jìn)行排序。這使得使用切片查詢?cè)诹兄兴阉鲾?shù)據(jù)變得很容易,但在行中搜索數(shù)據(jù)變得很困難,除非您使用的是保序分區(qū)程序。
?另一個(gè)重要差異是,RDMBS 中的列名稱表示與數(shù)據(jù)有關(guān)的元數(shù)據(jù),但絕不是數(shù)據(jù)。而在 Cassandra 中,列名稱可以包括數(shù)據(jù)。因此,Cassandra 行可以擁有數(shù)百萬個(gè)列,而關(guān)系模型通常只有數(shù)十個(gè)列。
?關(guān)系模型使用定義良好的不可變模式來支持復(fù)雜的查詢,這些查詢中包括 JOIN 和聚合等。使用關(guān)系模型,用戶無需擔(dān)心查詢就可定義數(shù)據(jù)模式。Cassandra 不支持 JOIN 和大多數(shù) SQL 搜索方法。因此,模式必須滿足應(yīng)用程序的查詢要求。
Web1.0的時(shí)代,數(shù)據(jù)訪問量很有限,用一夫當(dāng)關(guān)的高性能的單點(diǎn)服務(wù)器可以解決大部分問題。
隨著Web2.0的時(shí)代的到來,用戶訪問量大幅度提升,同時(shí)產(chǎn)生了大量的用戶數(shù)據(jù)。加上后來的智能移動(dòng)設(shè)備的普及,所有的互聯(lián)網(wǎng)平臺(tái)都面臨了巨大的性能挑戰(zhàn)。
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關(guān)系型的數(shù)據(jù)庫。
NoSQL 不依賴業(yè)務(wù)邏輯方式存儲(chǔ),而以簡(jiǎn)單的key-value模式存儲(chǔ)。因此大大的增加了數(shù)據(jù)庫的擴(kuò)展能力。
Memcache Memcache Redis Redis MongoDB MongoDB 列式數(shù)據(jù)庫 列式數(shù)據(jù)庫 Hbase Hbase
HBase是Hadoop項(xiàng)目中的數(shù)據(jù)庫。它用于需要對(duì)大量的數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)的讀寫操作的場(chǎng)景中。
HBase的目標(biāo)就是處理數(shù)據(jù)量非常龐大的表,可以用普通的計(jì)算機(jī)處理超過10億行數(shù)據(jù),還可處理有數(shù)百萬列元素的數(shù)據(jù)表。
Cassandra Cassandra
Apache Cassandra是一款免費(fèi)的開源NoSQL數(shù)據(jù)庫,其設(shè)計(jì)目的在于管理由大量商用服務(wù)器構(gòu)建起來的龐大集群上的海量數(shù)據(jù)集(數(shù)據(jù)量通常達(dá)到PB級(jí)別)。在眾多顯著特性當(dāng)中,Cassandra最為卓越的長處是對(duì)寫入及讀取操作進(jìn)行規(guī)模調(diào)整,而且其不強(qiáng)調(diào)主集群的設(shè)計(jì)思路能夠以相對(duì)直觀的方式簡(jiǎn)化各集群的創(chuàng)建與擴(kuò)展流程。
主要應(yīng)用:社會(huì)關(guān)系,公共交通網(wǎng)絡(luò),地圖及網(wǎng)絡(luò)拓譜(n*(n-1)/2)
而傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,例如:
1、High performance - 對(duì)數(shù)據(jù)庫高并發(fā)讀寫的需求
web2.0網(wǎng)站要根據(jù)用戶個(gè)性化信息來實(shí)時(shí)生成動(dòng)態(tài)頁面和提供動(dòng)態(tài)信息,所以基本上無法使用動(dòng)態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬次讀寫請(qǐng)求。關(guān)系數(shù)據(jù)庫應(yīng)付上萬次SQL查詢還勉強(qiáng)頂?shù)米。菓?yīng)付上萬次SQL寫數(shù)據(jù)請(qǐng)求,硬盤IO就已經(jīng)無法承受了。其實(shí)對(duì)于普通的BBS網(wǎng)站,往往也存在對(duì)高并發(fā)寫請(qǐng)求的需求。
2、Huge Storage - 對(duì)海量數(shù)據(jù)的高效率存儲(chǔ)和訪問的需求
對(duì)于大型的SNS網(wǎng)站,每天用戶產(chǎn)生海量的用戶動(dòng)態(tài),以國外的Friendfeed為例,一個(gè)月就達(dá)到了2.5億條用戶動(dòng)態(tài),對(duì)于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網(wǎng)站的用戶登錄系統(tǒng),例如騰訊,盛大,動(dòng)輒數(shù)以億計(jì)的帳號(hào),關(guān)系數(shù)據(jù)庫也很難應(yīng)付。
3、High Scalability High Availability- 對(duì)數(shù)據(jù)庫的高可擴(kuò)展性和高可用性的需求
在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時(shí)候,你的數(shù)據(jù)庫卻沒有辦法像web server和app server那樣簡(jiǎn)單的通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。對(duì)于很多需要提供24小時(shí)不間斷服務(wù)的網(wǎng)站來說,對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,為什么數(shù)據(jù)庫不能通過不斷的添加服務(wù)器節(jié)點(diǎn)來實(shí)現(xiàn)擴(kuò)展呢?
在上面提到的“三高”需求面前,關(guān)系數(shù)據(jù)庫遇到了難以克服的障礙,而對(duì)于web2.0網(wǎng)站來說,關(guān)系數(shù)據(jù)庫的很多主要特性卻往往無用武之地,例如:
1、數(shù)據(jù)庫事務(wù)一致性需求
很多web實(shí)時(shí)系統(tǒng)并不要求嚴(yán)格的數(shù)據(jù)庫事務(wù),對(duì)讀一致性的要求很低,有些場(chǎng)合對(duì)寫一致性要求也不高。因此數(shù)據(jù)庫事務(wù)管理成了數(shù)據(jù)庫高負(fù)載下一個(gè)沉重的負(fù)擔(dān)。
2、數(shù)據(jù)庫的寫實(shí)時(shí)性和讀實(shí)時(shí)性需求
對(duì)關(guān)系數(shù)據(jù)庫來說,插入一條數(shù)據(jù)之后立刻查詢,是肯定可以讀出來這條數(shù)據(jù)的,但是對(duì)于很多web應(yīng)用來說,并不要求這么高的實(shí)時(shí)性。
3、對(duì)復(fù)雜的SQL查詢,特別是多表關(guān)聯(lián)查詢的需求
任何大數(shù)據(jù)量的web系統(tǒng),都非常忌諱多個(gè)大表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜SQL報(bào)表查詢,特別是SNS類型的網(wǎng)站,從需求以及產(chǎn)品設(shè)計(jì)角度,就避免了這種情況的產(chǎn)生。往往更多的只是單表的主鍵查詢,以及單表的簡(jiǎn)單條件分頁查詢,SQL的功能被極大的弱化了。
因此,關(guān)系數(shù)據(jù)庫在這些越來越多的應(yīng)用場(chǎng)景下顯得不那么合適了,為了解決這類問題的非關(guān)系數(shù)據(jù)庫應(yīng)運(yùn)而生。
NoSQL 是非關(guān)系型數(shù)據(jù)存儲(chǔ)的廣義定義。它打破了長久以來關(guān)系型數(shù)據(jù)庫與ACID理論大一統(tǒng)的局面。NoSQL 數(shù)據(jù)存儲(chǔ)不需要固定的表結(jié)構(gòu),通常也不存在連接操作。在大數(shù)據(jù)存取上具備關(guān)系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢(shì)。該術(shù)語在 2009 年初得到了廣泛認(rèn)同。
當(dāng)今的應(yīng)用體系結(jié)構(gòu)需要數(shù)據(jù)存儲(chǔ)在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲(chǔ)就是為了實(shí)現(xiàn)這個(gè)需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業(yè) NoSQL 實(shí)現(xiàn)。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認(rèn)同。