當前位置:首頁 » 數據倉庫 » 大數據挑戰與nosql資料庫技術pdf
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

大數據挑戰與nosql資料庫技術pdf

發布時間: 2022-08-24 13:27:23

『壹』 Nosql詳解:如何找到對的技術

NoSQL,泛指非關系型的資料庫。NoSQL資料庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

雖然關系型資料庫系統RDBMS在安裝和使用上仍然佔有主要地位,但毋庸置疑,非關系型資料庫NoSQL技術已經成為今天發展最快的資料庫技術。

NoSQL詳解:如何找到對的技術

NoSQL是對資料庫系統的總稱,在某種程度上,它的性能和用途可能完全不同。NoSQL一詞最早產生於上世紀九十年代,意思是NoSQL(沒有SQL語言),後來隨著時間和技術的發展,SQL界面仍然作為處理數據的方式存在,所以NoSQL又有了新的詮釋,即NotOnlySQL(不只是SQL語言)。今天,NoSQL資料庫憑借著其非關系型、分布式、開源和橫向擴展等優勢,被認為是下一代資料庫產品。

四種主要的NoSQL資料庫和它們主要的應用場景

鍵值資料庫:當數據以鍵的形式訪問時,比如通過國際標准書號ISBN找一本書,鍵值資料庫是最理想的。在這里,ISBN是鍵,書籍的其他信息就是值。必須知道鍵才能查詢,不過值是一堆無意義的數據,讀取之後必須經過翻譯。

文檔存儲資料庫:該資料庫以文檔的形式管理和存儲數據。有點類似於鍵值資料庫,但文檔資料庫中的數據有結構。與鍵值資料庫中值是一堆無意義的數據不同,文檔資料庫中數據以文檔的結構被描述,典型的是JavaScriptObjectNotation(JSON)或XML.文檔存儲資料庫中的數據可以通過定義的任何模式進行查詢,但鍵值資料庫只能通過它的鍵進行查詢。

『貳』 大數據應用程序最佳選擇:是SQL還是NoSQL

執行大數據[注]項目的企業面對的關鍵決策之一是使用哪個資料庫,SQL還是NoSQL?SQL有著驕人的業績,龐大的安裝基礎;而NoSQL正在獲得可觀的收益,且有很多支持者。我們來看看兩位專家對這個問題的看法。
專家
·VoltDB公司首席技術官Ryan Betts表示,SQL已經贏得了大型企業的廣泛部署,大數據是它可以支持的另一個領域。
·Couchbase公司首席執行官Bob Wiederhold表示,NoSQL是可行的選擇,並且從很多方面來看,它是大數據的最佳選擇,特別是涉及到可擴展性時。
SQL經歷時間的考驗,並仍然在蓬勃發展
VoltDB公司首席技術官Ryan Betts
結構化查詢語言(SQL)是經過時間考驗的勝利者,它已經主宰了幾十年,目前大數據公司和組織(例如谷歌、Facebook、Cloudera和Apache)正在積極投資於SQL。
在成為主導技術(例如SQL)後,有時候我們很容易忘記其優越性。SQL的獨特優勢包括:
1. SQL能夠加強與數據的交互,並允許對單個資料庫設計提出問題。這是很關鍵的特徵,因為無法交互的數據基本上是沒用的,並且,增強的交互性能夠帶來新的見解、新的問題和更有意義的未來交互。
2. SQL是標准化的,使用戶能夠跨系統運用他們的知識,並對第三方附件和工具提供支持。
3. SQL能夠擴展,並且是多功能和經過時間驗證的,這能夠解決從快寫為主導的傳輸到掃描密集型深入分析等問題。
4. SQL對數據呈現和存儲採用正交形式,一些SQL系統支持JSON和其他結構化對象格式,比NoSQL具有更好的性能和更多功能。
雖然NoSQL的出現帶來了一些影響,但SQL仍然主導著市場,並在大數據領域贏得了很多投資和廣泛部署。
NoSQL的說法很含糊,對於本次討論,我借用Rick Cattell對NoSQL的定義,即提供簡單操作(例如密鑰/數值存儲)或簡單記錄和索引,並專注於這些簡單操作的橫向可擴展性的系統。
很顯然,現在很多新的資料庫並不是都一樣,認識每種資料庫背後的原理以及潛在問題是成功的關鍵。NoSQL的主要特點使其更適合於特定的問題。例如,圖形資料庫更適合於數據通過關系組織的情況,而專門的文本搜索系統更適合於需要實時搜索的情況。
在這里,讓我們看看SQL系統的主要優勢和差異化功能:
* SQL可實現交互性。 SQL是一種聲明性查詢語言。用戶說出他們想要什麼(例如,顯示過去五年三月份期間頂級客戶的地理位置),資料庫內部就會構件演算法並提取請求的結果。相比之下,NoSQL編程創新MapRece是一種程序性查詢技術。在用戶提出請求時,MapRece要求用戶不僅說出自己想要什麼,而且要求他們陳述如何產生答案。
這聽起來像一個無趣的技術差異,但這很關鍵,原因在於:首先,聲明性SQL查詢更容易通過圖形化工具以及點擊報告構建器來構建。這讓分析師、操作員、管理者和其他不具備軟體編程能力的員工進行資料庫查詢;其次,資料庫引擎可以利用內部信息來選擇最有效的演算法。改變資料庫的物理布局或資料庫,最佳演算法仍然能夠計算出來。而在程序性系統中,編程人員需要重新訪問和重新編程演算法,這是非常昂貴且容易出錯的過程。
市場理解這個關鍵區別。在2010年,谷歌宣布部署SQL來補充MapRece,主要受內部用戶需求所驅動。最近,Facebook發布了Presto(一種SQL部署)來查詢其PB級HDFS集群。根據Facebook表示:「隨著我們的倉庫增長到PB級,以及我們的需求變化,我們清楚地意識到,我們需要一個提供低延時查詢的互動系統。」此外,Cloudera也正在構建Impala—另一個基於HDFS的SQL部署。
* SQL是標准化的。 雖然供應商有時候會添加自己的語言到SQL界面,但SQL的核心是標准化的,還有其他規格(例如ODBC和JDBC)提供廣泛可用的穩定界面到SQL存儲。這帶來了一個管理和操作工具生態系統,可以在SQL系統之上設計、監控、檢查、探索和構建應用程序。
SQL用戶和程序員可用跨多個後端系統重復使用其API和UI知識,減少了應用程序的開發時間。標准化還允許聲明性第三方提取、轉換、載入(ETL)工具,使企業可以在資料庫之間以及跨系統傳輸數據。
* SQL可擴展。 認為SQL必須犧牲以獲得可擴展性的看法,完全是錯誤的。如前所述,Facebook創建了一個SQL界面來查詢PB級數據。SQL能夠非常有效地運行極快的ACID傳輸。SQL對數據存儲和索引提供的抽象[注]化允許跨各種問題和數據集大小的一致使用,讓SQL可以跨集群復制數據存儲有效地運行。使用SQL作為界面獨立於構建雲、規模或HA系統,SQL中並沒有什麼在阻止和限制容錯、高可用性和復制。事實上,所有現代SQL系統支持雲友好型橫向可擴展性、復制和容錯性。
* SQL支持JSON。 幾年前,很多SQL系統增加了XML文檔支持。現在,隨著JSON成為一種流行的數據交換格式,SQL供應商也紛紛加入了JSON型的支持。基於現在靈活的編程過程和web基礎設施的正常運行時間要求,我們很需要結構化數據類型的支持。Oracle 12c、PostgreSQL 9.2、VoltDB和其他支持JSON的資料庫,通常具有優於「原生」JSON的性能。
SQL將繼續贏得市場份額,並會繼續看到新的投資和部署。NoSQL資料庫提供專有查詢語言或簡單的鍵值語義,而沒有更深層次的技術差異化。現代SQL系統提供可擴展性的同時,還支持更豐富的查詢語義,並有龐大的用戶安裝基礎,廣泛的生態系統整合和深度企業部署。
NoSQL更適合大數據應用程序
Couchbase公司首席執行官Bob Wiederhold
NoSQL越來越多地被認為是關系型資料庫的可行替代品,特別是對於大數據應用程序。此外,無模式數據模型通常更適合於現在捕捉和處理的數據種類和類型。
當我們談論NoSQL領域的大數據時,我們指的是從操作資料庫讀取和寫入。不要將操作資料庫與分析資料庫混淆,這通常會查看大量數據,並從這些數據獲取可視性。
雖然操作資料庫的大數據看起來不具有可分析性,但操作資料庫通常會存儲超大量用戶的大型數據集,這些用戶經常需要訪問數據來實時執行交易。這種資料庫的操作規模也解釋了NoSQL的關鍵特性,也就是為什麼NoSQL是大數據應用程序的關鍵的原因。
NoSQL是可擴展性的關鍵
每次技術行業經歷硬體發展的根本性轉變時,都會出現一個拐點。在資料庫領域,從縱向擴展到橫向擴展的轉變推動了NoSQL的發展。關系型資料庫(包括來自甲骨文和IBM的資料庫)是縱向擴展。也就是說,它們是集中式、共享一切的技術,只能通過增加更多昂貴的硬體來擴展。
而NoSQL資料庫是分布式橫向擴展技術。它們使用了分布式節點集(稱為集群)來提供高度彈性擴展功能,讓用戶可以添加節點來動態處理負載。
分布式橫向擴展的做法通常要比縱向做法更加便宜。商業關系型資料庫的授權費用也讓人望而卻步,因為他們的價格是按每台伺服器來計算。另一方面,NoSQL資料庫通常是開源技術,按照運行的伺服器集群收費,而且價格相對便宜。
NoSQL是靈活性的關鍵
關系型資料庫和NoSQL數據模型有很大的不同。關系型模式獲取數據,並將數據分配到很多相互關聯的表中,這些表通過外鍵相互應用。
當用戶需要對數據集運行查詢時,所需信息需要從多個表中收集(通常涉及數百個企業應用程序),並結合這些信息,再提供給應用程序。同樣地,當寫入數據時,需要在多個表協調和執行寫入。當數據相對較少,並且,數據以較慢速度流入資料庫時,關系型資料庫通常能夠捕捉和存儲信息。然而,現在的應用程序通常需要快速寫入(和讀取)海量數據。
NoSQL資料庫採用非常不同的模式。在其核心,NoSQL資料庫其實是「NoREL」,或者說非關系型,這意味著它們沒有依賴於表以及表之間的聯系,以存儲和組織信息。例如,以文檔為導向的NoSQL資料庫獲取你想要存儲的數據,並採用JSON格式整合到文檔中。每個JSON文檔可以被你的應用程序視為一個對象。JSON文檔可能會提取跨越25個表的數據,將數據集成到一個文檔中。
聚合這些信息可能會導致信息重復,但由於存儲已不再是一個成本問題,數據模型靈活性、發布所產生文檔的簡便性以及讀取和寫入性能提高,讓這成為不錯的選擇。
NoSQL是大數據應用程序的關鍵
通過第三方(包括社交媒體網站),數據正變得越來越容易捕捉和訪問。這些數據包括:個人用戶信息、地理位置數據、用戶生產的內容、機器記錄數據和感測器產生的數據。企業還可以依賴於大數據來推動其關鍵任務型應用程序。同時,企業正在轉向到NoSQL資料庫,因為這種資料庫非常適合現在新型的數據類型。
開發人員想要一個靈活的資料庫,可以很容易適應新的數據類型,並且,不會受第三方數據供應商的內容結構變化的影響。大多數新數據是非結構化和半結構化,因此,開發人員也需要能夠有效存儲這些數據的資料庫。然而,關系型資料庫採用的嚴格定義的基於模式的做法讓其不可能快速整合新數據類型,並且很不適合於非結構化和半結構化數據。
總體來說,隨著web和移動應用程序的增加、新的趨勢、網上消費者行為的轉變以及新的數據類型的出現,行業需要能夠提供可擴展的靈活的資料庫技術來管理和訪問數據。NoSQL技術是有效滿足這些需求的唯一可行解決方案。

『叄』 目前哪些NoSQL資料庫應用廣泛,各有什麼特點

特點:
它們可以處理超大量的數據。

它們運行在便宜的PC伺服器集群上。

PC集群擴充起來非常方便並且成本很低,避免了「sharding」操作的復雜性和成本。

它們擊碎了性能瓶頸。
NoSQL的支持者稱,通過NoSQL架構可以省去將Web或Java應用和數據轉換成SQL友好格式的時間,執行速度變得更快。
「SQL並非適用於所有的程序代碼,」 對於那些繁重的重復操作的數據,SQL值得花錢。但是當資料庫結構非常簡單時,SQL可能沒有太大用處。

沒有過多的操作。
雖然NoSQL的支持者也承認關系資料庫提供了無可比擬的功能集合,而且在數據完整性上也發揮絕對穩定,他們同時也表示,企業的具體需求可能沒有那麼多。

Bootstrap支持
因為NoSQL項目都是開源的,因此它們缺乏供應商提供的正式支持。這一點它們與大多數開源項目一樣,不得不從社區中尋求支持。

優點:
易擴展
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關系資料庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。

大數據量,高性能
NoSQL資料庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關系性,資料庫的結構簡單。一般MySQL使用 Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的 Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。

靈活的數據模型
NoSQL無需事先為要存儲的數據建立欄位,隨時可以存儲自定義的數據格式。而在關系資料庫里,增刪欄位是一件非常麻煩的事情。如果是非常大數據量的表,增加欄位簡直就是一個噩夢。這點在大數據量的web2.0時代尤其明顯。

高可用
NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過復制模型也能實現高可用。

主要應用:
Apache HBase
這個大數據管理平台建立在谷歌強大的BigTable管理引擎基礎上。作為具有開源、Java編碼、分布式多個優勢的資料庫,Hbase最初被設計應用於Hadoop平台,而這一強大的數據管理工具,也被Facebook採用,用於管理消息平台的龐大數據。

Apache Storm
用於處理高速、大型數據流的分布式實時計算系統。Storm為Apache Hadoop添加了可靠的實時數據處理功能,同時還增加了低延遲的儀錶板、安全警報,改進了原有的操作方式,幫助企業更有效率地捕獲商業機會、發展新業務。

Apache Spark
該技術採用內存計算,從多迭代批量處理出發,允許將數據載入內存做反復查詢,此外還融合數據倉庫、流處理和圖計算等多種計算範式,Spark用Scala語言實現,構建在HDFS上,能與Hadoop很好的結合,而且運行速度比MapRece快100倍。

Apache Hadoop
該技術迅速成為了大數據管理標准之一。當它被用來管理大型數據集時,對於復雜的分布式應用,Hadoop體現出了非常好的性能,平台的靈活性使它可以運行在商用硬體系統,它還可以輕松地集成結構化、半結構化和甚至非結構化數據集。

Apache Drill
你有多大的數據集?其實無論你有多大的數據集,Drill都能輕松應對。通過支持HBase、Cassandra和MongoDB,Drill建立了互動式分析平台,允許大規模數據吞吐,而且能很快得出結果。

Apache Sqoop
也許你的數據現在還被鎖定於舊系統中,Sqoop可以幫你解決這個問題。這一平台採用並發連接,可以將數據從關系資料庫系統方便地轉移到Hadoop中,可以自定義數據類型以及元數據傳播的映射。事實上,你還可以將數據(如新的數據)導入到HDFS、Hive和Hbase中。

Apache Giraph
這是功能強大的圖形處理平台,具有很好可擴展性和可用性。該技術已經被Facebook採用,Giraph可以運行在Hadoop環境中,可以將它直接部署到現有的Hadoop系統中。通過這種方式,你可以得到強大的分布式作圖能力,同時還能利用上現有的大數據處理引擎。

Cloudera Impala
Impala模型也可以部署在你現有的Hadoop群集上,監視所有的查詢。該技術和MapRece一樣,具有強大的批處理能力,而且Impala對於實時的SQL查詢也有很好的效果,通過高效的SQL查詢,你可以很快的了解到大數據平台上的數據。

Gephi
它可以用來對信息進行關聯和量化處理,通過為數據創建功能強大的可視化效果,你可以從數據中得到不一樣的洞察力。Gephi已經支持多個圖表類型,而且可以在具有上百萬個節點的大型網路上運行。Gephi具有活躍的用戶社區,Gephi還提供了大量的插件,可以和現有系統完美的集成到一起,它還可以對復雜的IT連接、分布式系統中各個節點、數據流等信息進行可視化分析。

MongoDB
這個堅實的平台一直被很多組織推崇,它在大數據管理上有極好的性能。MongoDB最初是由DoubleClick公司的員工創建,現在該技術已經被廣泛的應用於大數據管理。MongoDB是一個應用開源技術開發的NoSQL資料庫,可以用於在JSON這樣的平台上存儲和處理數據。目前,紐約時報、Craigslist以及眾多企業都採用了MongoDB,幫助他們管理大型數據集。(Couchbase伺服器也作為一個參考)。

十大頂尖公司:
Amazon Web Services
Forrester將AWS稱為「雲霸主」,談到雲計算領域的大數據,那就不得不提到亞馬遜。該公司的Hadoop產品被稱為EMR(Elastic Map Rece),AWS解釋這款產品採用了Hadoop技術來提供大數據管理服務,但它不是純開源Hadoop,經過修改後現在被專門用在AWS雲上。
Forrester稱EMR有很好的市場前景。很多公司基於EMR為客戶提供服務,有一些公司將EMR應用於數據查詢、建模、集成和管理。而且AWS還在創新,Forrester稱未來EMR可以基於工作量的需要自動縮放調整大小。亞馬遜計劃為其產品和服務提供更強大的EMR支持,包括它的RedShift數據倉庫、新公布的Kenesis實時處理引擎以及計劃中的NoSQL資料庫和商業智能工具。不過AWS還沒有自己的Hadoop發行版。
Cloudera
Cloudera有開源Hadoop的發行版,這個發行版採用了Apache Hadoop開源項目的很多技術,不過基於這些技術的發行版也有很大的進步。Cloudera為它的Hadoop發行版開發了很多功能,包括Cloudera管理器,用於管理和監控,以及名為Impala的SQL引擎等。Cloudera的Hadoop發行版基於開源Hadoop,但也不是純開源的產品。當Cloudera的客戶需要Hadoop不具備的某些功能時,Cloudera的工程師們就會實現這些功能,或者找一個擁有這項技術的合作夥伴。Forrester表示:「Cloudera的創新方法忠於核心Hadoop,但因為其可實現快速創新並積極滿足客戶需求,這一點使它不同於其他那些供應商。」目前,Cloudera的平台已經擁有200多個付費客戶,一些客戶在Cloudera的技術支持下已經可以跨1000多個節點實現對PB級數據的有效管理。
Hortonworks
和Cloudera一樣,Hortonworks是一個純粹的Hadoop技術公司。與Cloudera不同的是,Hortonworks堅信開源Hadoop比任何其他供應商的Hadoop發行版都要強大。Hortonworks的目標是建立Hadoop生態圈和Hadoop用戶社區,推進開源項目的發展。Hortonworks平台和開源Hadoop聯系緊密,公司管理人員表示這會給用戶帶來好處,因為它可以防止被供應商套牢(如果Hortonworks的客戶想要離開這個平台,他們可以輕松轉向其他開源平台)。這並不是說Hortonworks完全依賴開源Hadoop技術,而是因為該公司將其所有開發的成果回報給了開源社區,比如Ambari,這個工具就是由Hortonworks開發而成,用來填充集群管理項目漏洞。Hortonworks的方案已經得到了Teradata、Microsoft、Red Hat和SAP這些供應商的支持。
IBM
當企業考慮一些大的IT項目時,很多人首先會想到IBM。IBM是Hadoop項目的主要參與者之一,Forrester稱IBM已有100多個Hadoop部署,它的很多客戶都有PB級的數據。IBM在網格計算、全球數據中心和企業大數據項目實施等眾多領域有著豐富的經驗。「IBM計劃繼續整合SPSS分析、高性能計算、BI工具、數據管理和建模、應對高性能計算的工作負載管理等眾多技術。」
Intel
和AWS類似,英特爾不斷改進和優化Hadoop使其運行在自己的硬體上,具體來說,就是讓Hadoop運行在其至強晶元上,幫助用戶打破Hadoop系統的一些限制,使軟體和硬體結合的更好,英特爾的Hadoop發行版在上述方面做得比較好。Forrester指出英特爾在最近才推出這個產品,所以公司在未來還有很多改進的可能,英特爾和微軟都被認為是Hadoop市場上的潛力股。
MapR Technologies
MapR的Hadoop發行版目前為止也許是最好的了,不過很多人可能都沒有聽說過。Forrester對Hadoop用戶的調查顯示,MapR的評級最高,其發行版在架構和數據處理能力上都獲得了最高分。MapR已將一套特殊功能融入其Hadoop發行版中。例如網路文件系統(NFS)、災難恢復以及高可用性功能。Forrester說MapR在Hadoop市場上沒有Cloudera和Hortonworks那樣的知名度,MapR要成為一個真正的大企業,還需要加強夥伴關系和市場營銷。
Microsoft
微軟在開源軟體問題上一直很低調,但在大數據形勢下,它不得不考慮讓Windows也兼容Hadoop,它還積極投入到開源項目中,以更廣泛地推動Hadoop生態圈的發展。我們可以在微軟的公共雲Windows Azure HDInsight產品中看到其成果。微軟的Hadoop服務基於Hortonworks的發行版,而且是為Azure量身定製的。
微軟也有一些其他的項目,包括名為Polybase的項目,讓Hadoop查詢實現了SQLServer查詢的一些功能。Forrester說:「微軟在資料庫、數據倉庫、雲、OLAP、BI、電子表格(包括PowerPivot)、協作和開發工具市場上有很大優勢,而且微軟擁有龐大的用戶群,但要在Hadoop這個領域成為行業領導者還有很遠的路要走。」
Pivotal Software
EMC和Vmware部分大數據業務分拆組合產生了Pivotal。Pivotal一直努力構建一個性能優越的Hadoop發行版,為此,Pivotal在開源Hadoop的基礎上又添加了一些新的工具,包括一個名為HAWQ的SQL引擎以及一個專門解決大數據問題的Hadoop應用。Forrester稱Pivotal Hadoop平台的優勢在於它整合了Pivotal、EMC、Vmware的眾多技術,Pivotal的真正優勢實際上等於EMC和Vmware兩大公司為其撐腰。到目前為止,Pivotal的用戶還不到100個,而且大多是中小型客戶。
Teradata
對於Teradata來說,Hadoop既是一種威脅也是一種機遇。數據管理,特別是關於SQL和關系資料庫這一領域是Teradata的專長。所以像Hadoop這樣的NoSQL平台崛起可能會威脅到Teradata。相反,Teradata接受了Hadoop,通過與Hortonworks合作,Teradata在Hadoop平台集成了SQL技術,這使Teradata的客戶可以在Hadoop平台上方便地使用存儲在Teradata數據倉庫中的數據。
AMPLab
通過將數據轉變為信息,我們才可以理解世界,而這也正是AMPLab所做的。AMPLab致力於機器學習、數據挖掘、資料庫、信息檢索、自然語言處理和語音識別等多個領域,努力改進對信息包括不透明數據集內信息的甄別技術。除了Spark,開源分布式SQL查詢引擎Shark也源於AMPLab,Shark具有極高的查詢效率,具有良好的兼容性和可擴展性。近幾年的發展使計算機科學進入到全新的時代,而AMPLab為我們設想一個運用大數據、雲計算、通信等各種資源和技術靈活解決難題的方案,以應對越來越復雜的各種難題。

『肆』 案例分享:NoSQL如何處理生物醫學大數據

我們知道大數據產生了巨大的數據,那麼是需要去存儲這些數據的,NoSQL,泛指非關系型的資料庫,它類似於存放數據的倉庫,對數據進行存儲,相比mysql,是它的升級版,NoSQL資料庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

『伍』 為什麼海量數據場景中NoSQL越來越重要

本質是因為:隨著互聯網的進一步發展與各行業信息化建設進程加快、參與者的增多,人們對軟體有了更多更新的要求,需要軟體不僅能實現功能,而且要求保證許多人可以共同參與使用,因而軟體所需承載的數據量和吞吐量必須達到相應的需求。而目前的關系型資料庫在某些方面有一些缺點,導致不能滿足需要。


具體則需要對比關系型資料庫與Nosql之間的區別可以得出


關系型資料庫

關系型資料庫把所有的數據都通過行和列的二元表現形式表示出來。

關系型資料庫的優勢:

1.保持數據的一致性(事務處理)
2.由於以標准化為前提,數據更新的開銷很小(相同的欄位基本上都只有一處)
3.可以進行Join等復雜查詢
其中能夠保持數據的一致性是關系型資料庫的最大優勢。

關系型資料庫的不足:

不擅長的處理

1.大量數據的寫入處理(這點尤為重要)
2.為有數據更新的表做索引或表結構(schema)變更
3.欄位不固定時應用
4.對簡單查詢需要快速返回結果的處理

--大量數據的寫入處理

讀寫集中在一個資料庫上讓資料庫不堪重負,大部分網站已使用主從復制技術實現讀寫分離,以提高讀寫性能和讀庫的可擴展性。

所以在進行大量數據操作時,會使用資料庫主從模式。數據的寫入由主資料庫負責,數據的讀入由從資料庫負責,可以比較簡單地通過增加從資料庫來實現規模化,但是數據的寫入卻完全沒有簡單的方法來解決規模化問題。


第一,要想將數據的寫入規模化,可以考慮把主資料庫從一台增加到兩台,作為互相關聯復制的二元主資料庫使用,確實這樣可以把每台主資料庫的負荷減少一半,但是更新處理會發生沖突,可能會造成數據的不一致,為了避免這樣的問題,需要把對每個表的請求分別分配給合適的主資料庫來處理。


第二,可以考慮把資料庫分割開來,分別放在不同的資料庫伺服器上,比如將不同的表放在不同的資料庫伺服器上,資料庫分割可以減少每台資料庫伺服器上的數據量,以便減少硬碟IO的輸入、輸出處理,實現內存上的高速處理。但是由於分別存儲字不同伺服器上的表之間無法進行Join處理,資料庫分割的時候就需要預先考慮這些問題,資料庫分割之後,如果一定要進行Join處理,就必須要在程序中進行關聯,這是非常困難的。


--為有數據更新的表做索引或表結構變更

在使用關系型資料庫時,為了加快查詢速度需要創建索引,為了增加必要的欄位就一定要改變表結構,為了進行這些處理,需要對表進行共享鎖定,這期間數據變更、更新、插入、刪除等都是無法進行的。如果需要進行一些耗時操作,例如為數據量比較大的表創建索引或是變更其表結構,就需要特別注意,長時間內數據可能無法進行更新。


--欄位不固定時的應用

如果欄位不固定,利用關系型資料庫也是比較困難的,有人會說,需要的時候加個欄位就可以了,這樣的方法也不是不可以,但在實際運用中每次都進行反復的表結構變更是非常痛苦的。你也可以預先設定大量的預備欄位,但這樣的話,時間一長很容易弄不清除欄位和數據的對應狀態,即哪個欄位保存有哪些數據。

--對簡單查詢需要快速返回結果的處理 (這里的「簡單」指的是沒有復雜的查詢條件)

這一點稱不上是缺點,但不管怎樣,關系型資料庫並不擅長對簡單的查詢快速返回結果,因為關系型資料庫是使用專門的sql語言進行數據讀取的,它需要對sql與越南進行解析,同時還有對表的鎖定和解鎖等這樣的額外開銷,這里並不是說關系型資料庫的速度太慢,而只是想告訴大家若希望對簡單查詢進行高速處理,則沒有必要非使用關系型資料庫不可。





NoSQL資料庫

關系型資料庫應用廣泛,能進行事務處理和表連接等復雜查詢。相對地,NoSQL資料庫只應用在特定領域,基本上不進行復雜的處理,但它恰恰彌補了之前所列舉的關系型資料庫的不足之處。

優點:

易於數據的分散

各個數據之間存在關聯是關系型資料庫得名的主要原因,為了進行join處理,關系型資料庫不得不把數據存儲在同一個伺服器內,這不利於數據的分散,這也是關系型資料庫並不擅長大數據量的寫入處理的原因。相反NoSQL資料庫原本就不支持Join處理,各個數據都是獨立設計的,很容易把數據分散在多個伺服器上,故減少了每個伺服器上的數據量,即使要處理大量數據的寫入,也變得更加容易,數據的讀入操作當然也同樣容易。

典型的NoSQL資料庫

臨時性鍵值存儲(memcached、Redis)、永久性鍵值存儲(ROMA、Redis)、面向文檔的資料庫(MongoDB、CouchDB)、面向列的資料庫(Cassandra、HBase)

一、 鍵值存儲

它的數據是以鍵值的形式存儲的,雖然它的速度非常快,但基本上只能通過鍵的完全一致查詢獲取數據,根據數據的保存方式可以分為臨時性、永久性和兩者兼具 三種。

(1)臨時性

所謂臨時性就是數據有可能丟失,memcached把所有數據都保存在內存中,這樣保存和讀取的速度非常快,但是當memcached停止時,數據就不存在了。由於數據保存在內存中,所以無法操作超出內存容量的數據,舊數據會丟失。總結來說:

。在內存中保存數據

。可以進行非常快速的保存和讀取處理

。數據有可能丟失

(2)永久性

所謂永久性就是數據不會丟失,這里的鍵值存儲是把數據保存在硬碟上,與臨時性比起來,由於必然要發生對硬碟的IO操作,所以性能上還是有差距的,但數據不會丟失是它最大的優勢。總結來說:

。在硬碟上保存數據

。可以進行非常快速的保存和讀取處理(但無法與memcached相比)

。數據不會丟失

(3) 兩者兼備

Redis屬於這種類型。Redis有些特殊,臨時性和永久性兼具。Redis首先把數據保存在內存中,在滿足特定條件(默認是15分鍾一次以上,5分鍾內10個以上,1分鍾內10000個以上的鍵發生變更)的時候將數據寫入到硬碟中,這樣既確保了內存中數據的處理速度,又可以通過寫入硬碟來保證數據的永久性,這種類型的資料庫特別適合處理數組類型的數據。總結來說:

。同時在內存和硬碟上保存數據

。可以進行非常快速的保存和讀取處理

。保存在硬碟上的數據不會消失(可以恢復)

。適合於處理數組類型的數據

二、面向文檔的資料庫

MongoDB、CouchDB屬於這種類型,它們屬於NoSQL資料庫,但與鍵值存儲相異。

(1)不定義表結構

即使不定義表結構,也可以像定義了表結構一樣使用,還省去了變更表結構的麻煩。

(2)可以使用復雜的查詢條件

跟鍵值存儲不同的是,面向文檔的資料庫可以通過復雜的查詢條件來獲取數據,雖然不具備事務處理和Join這些關系型資料庫所具有的處理能力,但初次以外的其他處理基本上都能實現。

三、面向列的資料庫

Cassandra、HBae、HyperTable屬於這種類型,由於近年來數據量出現爆發性增長,這種類型的NoSQL資料庫尤其引入注目。

普通的關系型資料庫都是以行為單位來存儲數據的,擅長以行為單位的讀入處理,比如特定條件數據的獲取。因此,關系型資料庫也被成為面向行的資料庫。相反,面向列的資料庫是以列為單位來存儲數據的,擅長以列為單位讀入數據。



面向列的資料庫具有搞擴展性,即使數據增加也不會降低相應的處理速度(特別是寫入速度),所以它主要應用於需要處理大量數據的情況。另外,把它作為批處理程序的存儲器來對大量數據進行更新也是非常有用的。但由於面向列的資料庫跟現行資料庫存儲的思維方式有很大不同,故應用起來十分困難。

總結:關系型資料庫與NoSQL資料庫並非對立而是互補的關系,即通常情況下使用關系型資料庫,在適合使用NoSQL的時候使用NoSQL資料庫,讓NoSQL資料庫對關系型資料庫的不足進行彌補。

『陸』 NoSQL資料庫探討之一為什麼要用非關系資料庫

而傳統的關系資料庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:
1、High performance - 對資料庫高並發讀寫的需求
web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此資料庫並發負載非常高,往往要達到每秒上萬次讀寫請求。關系資料庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬碟IO就已經無法承受了。其實對於普通的BBS網站,往往也存在對高並發寫請求的需求。
2、Huge Storage - 對海量數據的高效率存儲和訪問的需求
對於大型的SNS網站,每天用戶產生海量的用戶動態,以國外的Friendfeed為例,一個月就達到了2.5億條用戶動態,對於關系資料庫來說,在一張2.5億條記錄的表裡面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關系資料庫也很難應付。
3、High Scalability && High Availability- 對資料庫的高可擴展性和高可用性的需求
在基於web的架構當中,資料庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的資料庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬體和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,為什麼資料庫不能通過不斷的添加伺服器節點來實現擴展呢?
在上面提到的「三高」需求面前,關系資料庫遇到了難以克服的障礙,而對於web2.0網站來說,關系資料庫的很多主要特性卻往往無用武之地,例如:
1、資料庫事務一致性需求
很多web實時系統並不要求嚴格的資料庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此資料庫事務管理成了資料庫高負載下一個沉重的負擔。
2、資料庫的寫實時性和讀實時性需求
對關系資料庫來說,插入一條數據之後立刻查詢,是肯定可以讀出來這條數據的,但是對於很多web應用來說,並不要求這么高的實時性。
3、對復雜的SQL查詢,特別是多表關聯查詢的需求
任何大數據量的web系統,都非常忌諱多個大表的關聯查詢,以及復雜的數據分析類型的復雜SQL報表查詢,特別是SNS類型的網站,從需求以及產品設計角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。
因此,關系資料庫在這些越來越多的應用場景下顯得不那麼合適了,為了解決這類問題的非關系資料庫應運而生。
NoSQL 是非關系型數據存儲的廣義定義。它打破了長久以來關系型資料庫與ACID理論大一統的局面。NoSQL 數據存儲不需要固定的表結構,通常也不存在連接操作。在大數據存取上具備關系型資料庫無法比擬的性能優勢。該術語在 2009 年初得到了廣泛認同。
當今的應用體系結構需要數據存儲在橫向伸縮性上能夠滿足需求。而 NoSQL 存儲就是為了實現這個需求。Google 的BigTable與Amazon的Dynamo是非常成功的商業 NoSQL 實現。一些開源的 NoSQL 體系,如Facebook 的Cassandra, Apache 的HBase,也得到了廣泛認同。

『柒』 大數據時代數據管理方式研究

大數據時代數據管理方式研究
1數據管理技術的回顧
數據管理技術主要經歷了人工管理階段、文件系統階段和資料庫系統階段。隨著數據應用領域的不斷擴展,數據管理所處的環境也越來越復雜,目前廣泛流行的資料庫技術開始暴露出許多弱點,面臨著許多新的挑戰。
1.1 人工管理階段
20 世紀 50 年代中期,計算機主要用於科學計算。當時沒有磁碟等直接存取設備,只有紙帶、卡片、磁帶等外存,也沒有操作系統和管理數據的專門軟體。該階段管理的數據不保存、由應用程序管理數據、數據不共享和數據不具有獨立性等特點。
1.2 文件系統階段
20 世紀 50 年代後期到 60 年代中期,隨著計算機硬體和軟體的發展,磁碟、磁鼓等直接存取設備開始普及,這一時期的數據處理系統是把計算機中的數據組織成相互獨立的被命名的數據文件,並可按文件的名字來進行訪問,對文件中的記錄進行存取的數據管理技術。數據可以長期保存在計算機外存上,可以對數據進行反復處理,並支持文件的查詢、修改、插入和刪除等操作。其數據面向特定的應用程序,因此,數據共享性、獨立性差,且冗餘度大,管理和維護的代價也很大。
1.3資料庫階段
20 世紀 60 年代後期以來,計算機性能得到進一步提高,更重要的是出現了大容量磁碟,存儲容量大大增加且價格下降。在此基礎上,才有可能克服文件系統管理數據時的不足,而滿足和解決實際應用中多個用戶、多個應用程序共享數據的要求,從而使數據能為盡可能多的應用程序服務,這就出現了資料庫這樣的數據管理技術。資料庫的特點是數據不再只針對某一個特定的應用,而是面向全組織,具有整體的結構性,共享性高,冗餘度減小,具有一定的程序與數據之間的獨立性,並且對數據進行統一的控制。
2大數據時代的數據管理技術
大數據(big data),或稱巨量資料,指的是所涉及的資料量規模巨大到無法透過目前主流軟體工具,在合理時間內達到擷取、管理、處理、並整理成為幫助企業經營決策更積極目的的資訊。大數據有 3 個 V,一是大量化(Volume),數據量是持續快速增加的,從 TB級別,躍升到 PB 級別;二是多樣化(Variety),數據類型多樣化,結構化數據已被視為小菜一碟,圖片、音頻、視頻等非結構化數據正以傳統結構化數據增長的兩倍速快速創建;三是快速化 (Velocity),數據生成速度快,也就需要快速的處理能力,因此,產生了「1 秒定律」,就是說一般要在秒級時間范圍內給出分析結果,時間太長就失去價值了,這個速度要求是大數據處理技術和傳統的數據挖掘技術最大的區別。
2.1 關系型資料庫(RDBMS)
20 世紀 70 年代初,IBM 工程師 Codd 發表了著名的論文「A Relational Model of Data for Large Shared DataBanks」,標志著關系資料庫時代來臨。關系資料庫的理論基礎是關系模型,是藉助於集合代數等數學概念和方法來處理資料庫中的數據,現實世界中的實體以及實體之間的聯系非常容易用關系模型來表示。容易理解的模型、容易掌握的查詢語言、高效的優化器、成熟的技術和產品,使得關系資料庫占據了資料庫市場的絕對的統治地位。隨著互聯網 web2.0 網站的興起,半結構化和非結構化數據的大量涌現,傳統的關系資料庫在應付 web2.0 網站特別是超大規模和高並發的 SNS(全稱 Social Networking Services,即社會性網路服務) 類型的 web2.0 純動態網站已經顯得力不從心,暴露了很多難以克服的問題。
2.2 noSQL資料庫
順應時代發展的需要產生了 noSQL資料庫技術,其主要特點是採用與關系模型不同的數據模型,當前熱門的 noSQL資料庫系統可以說是蓬勃發展、異軍突起,很多公司都熱情追捧之,如:由 Google 公司提出的 Big Table 和 MapRece 以及 IBM 公司提出的 Lotus Notes 等。不管是那個公司的 noSQL資料庫都圍繞著大數據的 3 個 V,目的就是解決大數據的 3個 V 問題。因此,在設計 noSQL 時往往考慮以下幾個原則,首先,採用橫向擴展的方式,通過並行處理技術對數據進行劃分並進行並行處理,以獲得高速的讀寫速度;其次,解決數據類型從以結構化數據為主轉向結構化、半結構化、非結構化三者的融合的問題;再次,放鬆對數據的 ACID 一致性約束,允許數據暫時出現不一致的情況,接受最終一致性;最後,對各個分區數據進行備份(一般是 3 份),應對節點失敗的狀況等。
對數據的應用可以分為分析型應用和操作型應用,分析型應用主要是指對大量數據進行分類、聚集、匯總,最後獲得數據量相對小的分析結果;操作型應用主要是指對數據進行增加、刪除、修改和查詢以及簡單的匯總操作,涉及的數據量一般比較少,事務執行時間一般比較短。目前資料庫可分為關系資料庫和 noSQL資料庫,根據數據應用的要求,再結合目前資料庫的種類,所以目前資料庫管理方式主要有以下 4 類。
(1)面向操作型的關系資料庫技術。
首先,傳統資料庫廠商提供的基於行存儲的關系資料庫系統,如 DB2、Oracle、SQL Server 等,以其高度的一致性、精確性、系統可恢復性,在事務處理方面仍然是核心引擎。其次,面向實時計算的內存資料庫系統,如 Hana、Timesten、Altibase 等通過把對數據並發控制、查詢和恢復等操作控制在內存內部進行,所以獲得了非常高的性能,在很多特定領域如電信、證券、網管等得到普遍應用。另外,以 VoltDB、Clustrix 和NuoDB 為代表的 new SQL 宣稱能夠在保持 ACDI 特性的同時提高了事務處理性能 50 倍 ~60 倍。
(2)面向分析型的關系資料庫技術。
首先,TeraData 是數據倉庫領域的領頭羊,Teradata 在整體上是按 Shared Nothing 架構體系進行組織的,定位就是大型數據倉庫系統,支持較高的擴展性。其次,面向分析型應用,列存儲資料庫的研究形成了另一個重要的潮流。列存儲資料庫以其高效的壓縮、更高的 I/O 效率等特點,在分析型應用領域獲得了比行存儲資料庫高得多的性能。如:MonetDB 和 Vertica是一個典型的基於列存儲技術的資料庫系統。
(3)面向操作型的 noSQL 技術。
有些操作型應用不受 ACID 高度一致性約束,但對大數據處理需要處理的數據量非常大,對速度性能要求也非常高,這樣就必須依靠大規模集群的並行處理能力來實現數據處理,弱一致性或最終一致性就可以了。這時,操作型 noSQL資料庫的優點就可以發揮的淋漓盡致了。如,Hbase 一天就可以有超過 200 億個到達硬碟的讀寫操作,實現對大數據的處理。另外,noSQL資料庫是一個數據模型靈活、支持多樣數據類型,如對圖數據建模、存儲和分析,其性能、擴展性是關系資料庫無法比擬的。
(4)面向分析型的 noSQL 技術。
面向分析型應用的 noSQL 技術主要依賴於Hadoop 分布式計算平台,Hadoop 是一個分布式計算平台,以 HDFS 和 Map Rece 為用戶提供系統底層細節透明的分布式基礎架構。《Hadoop 經典實踐染技巧》傳統的資料庫廠商 Microsoft,Oracle,SAS,IBM 等紛紛轉向 Hadoop 的研究,如微軟公司關閉 Dryad 系統,全力投入 Map Rece 的研發,Oracle 在 2011 年下半年發布 Big Plan 戰略計劃,全面進軍大數據處理領域,IBM 則早已捷足先登「,沃森(Watson)」計算機就是基於 Hadoop 技術開發的產物,同時 IBM 發布了 BigInsights 計劃,基於 Hadoop,Netezza 和 SPSS(統計分析、數據挖掘軟體)等技術和產品構建大數據分析處理的技術框架。同時也涌現出一批新公司來研究Hadoop 技術,如 Cloudera、MapRKarmashpere 等。
3數據管理方式的展望
通過以上分析,可以看出關系資料庫的 ACID 強調數據一致性通常指關聯數據之間的邏輯關系是否正確和完整,而對於很多互聯網應用來說,對這一致性和隔離性的要求可以降低,而可用性的要求則更為明顯,此時就可以採用 noSQL 的兩種弱一致性的理論 BASE 和 CAP.關系資料庫和 noSQL資料庫並不是想到對立的矛盾體,而是可以相互補充的,根據不同需求使用不同的技術,甚至二者可以共同存在,互不影響。最近幾年,以 Spanner 為代表新型資料庫的出現,給資料庫領域注入新鮮血液,這就是融合了一致性和可用性的 newSQL,這種新型思維方式或許會是未來大數據處理方式的發展方向。
4 結束語
隨著雲計算、物聯網等的發展,數據呈現爆炸式的增長,人們正被數據洪流所包圍,大數據的時代已經到來。正確利用大數據給人們的生活帶來了極大的便利,但與此同時也給傳統的數據管理方式帶來了極大的挑戰。

『捌』 什麼是NoSQL資料庫

1 理解ACID與BASE的區別(ACID是關系型資料庫強一致性的四個要求,而BASE是NoSQL資料庫通常對可用性及一致性的弱要求原則,它們的意思分別是,ACID:atomicity, consistency, isolation, rability;BASE:Basically Available, Soft-state, Eventually Consistent。同時有意思的是ACID在英語里意為酸,BASE意思為鹼)

2 理解持久化與非持久化的區別。這么說是因為有的NoSQL系統是純內存存儲的。

3 你必須意識到傳統有關系型資料庫與NoSQL系統在數據結構上的本質區別。傳統關系型資料庫通常是基於行的表格型存儲,而NoSQL系統包括了列式存儲(Cassandra)、key/value存儲(Memcached)、文檔型存儲(CouchDB)以及圖結構存儲(Neo4j)

4與傳統關系資料庫有統一的SQL語言操作介面不同,NoSQL系統通常有自己特有的API介面。

5 在架構上,你必須搞清楚,NoSQL系統是被設計用於成百上千台機器的集群中的,而非共享型資料庫系統的架構。

6在NoSQL系統中,可能你得習慣一下不知道你的數據具體存在何處的情況。

7 在NoSQL系統中,你最好習慣它的弱一致性。」eventually consistent」(最終一致性)正是BASE原則中的重要一項。比如在Twitter,你在Followers列表中經常會感受到數據的延遲。

8 在NoSQL系統中,你要理解,很多時候數據並不總是可用的。

9 你得理解,有的方案是擁有分區容忍性的,有的方案不一定有。

『玖』 nosql是什麼

您好
雖然關系資料庫已有諸多不便,但以NoSQL目前的發展狀況要代替他還為時過早,並且至少從目前來看,他們也各有所長,誰也替代不了誰。SQL語句的方便在許多情況下還是相當實用,SQL資料庫軟體的強壯程度度也是NoSQL資料庫軟體目前無法達到的。NoSQL在許多領域,比如高速緩存,高速消息隊列方面有著傳統關系資料庫無法比擬的優勢,他們將在今後一些年並駕齊驅,至於未來的方向還得看在實際使用和進一步開發中遇到的問題。這里有一篇譯自Redis(一種近年來發展迅速的NoSQL資料庫)官方網站的介紹文章,對NoSQL的特性可窺一斑。
這個要看你的應用范圍、場景