成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

持久化nosql,持久化對象

nosql與rdbms直接有什么區(qū)別

NoSQL與RDBMS的九點區(qū)別聯(lián)系?

成都創(chuàng)新互聯(lián)主要從事做網站、成都網站設計、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務化州,10年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575

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

2 理解持久化與非持久化的區(qū)別。這么說是因為有的NoSQL系統(tǒng)是純內存存儲的。

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

4與傳統(tǒng)關系數據庫有統(tǒng)一的SQL語言操作接口不同,NoSQL系統(tǒng)通常有自己特有的API接口。

5 在架構上,你必須搞清楚,NoSQL系統(tǒng)是被設計用于成百上千臺機器的集群中的,而非共享型數據庫系統(tǒng)的架構。

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

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

8 在NoSQL系統(tǒng)中,你要理解,很多時候數據并不總是可用的。

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

nosql數據庫有哪些

Membase

Membase 是 NoSQL 家族的一個新的重量級的成員。Membase是開源項目,源代碼采用了Apache2.0的使用許可。該項目托管在GitHub.Source tarballs上,可以下載beta版本的Linux二進制包。該產品主要是由North Scale的memcached核心團隊成員開發(fā)完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區(qū)網絡空間的供應商。

Membase容易安裝、操作,可以從單節(jié)點方便的擴展到集群,而且為memcached(有線協(xié)議的兼容性)實現了即插即用功能,在應用方面為開發(fā)者和經營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經在不同類型的領域(特別是大容量的Web應用)有了廣泛的使用,其中 Memcached的部分基礎代碼被直接應用到了Membase服務器的前端。

通過兼容多種編程語言和框架,Membase具備了很好的復用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置 的告警信息。

Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統(tǒng)一的節(jié)點進行復制。 另外,對存儲的數據進行再分配仍然是必要的。

這方面的一個有趣的特性是NoSQL解決方案所承諾的可預測的性能,類準確性的延遲和吞吐量。通過如下方式可以獲得上面提到的特性:

◆ 自動將在線數據遷移到低延遲的存儲介質的技術(內存,固態(tài)硬盤,磁盤)

◆ 可選的寫操作一一異步,同步(基于復制,持久化)

◆ 反向通道再平衡[未來考慮支持]

◆ 多線程低鎖爭用

◆ 盡可能使用異步處理

◆ 自動實現重復數據刪除

◆ 動態(tài)再平衡現有集群

◆ 通過把數據復制到多個集群單元和支持快速失敗轉移來提供系統(tǒng)的高可用性。

MongoDB

MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。它的特點是高性能、易部署、易使用,存儲數據非常方便。

主要功能特性:

◆ 面向集合存儲,易存儲對象類型的數據

“面向集合”(Collenction-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collenction)。每個 集合在數據庫中都有一個唯一的標識名,并且可以包含無限數目的文檔。集合的概念類似關系型數據庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。

◆ 模式自由

模式自由(schema-free),意味著對于存儲在mongodb數據庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個數據庫里。

◆支持動態(tài)查詢

◆支持完全索引,包含內部對象

◆支持查詢

◆支持復制和故障恢復

◆使用高效的二進制數據存儲,包括大型對象(如視頻等)

◆自動處理碎片,以支持云計算層次的擴展性

◆支持RUBY,PYTHON,JAVA,C++,PHP等多種語言

◆文件存儲格式為BSON(一種JSON的擴展)

BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各種復雜的文件類型。

◆可通過網絡訪問

MongoDB服務端可運行在Linux、Windows或OS X平臺,支持32位和64位應用,默認端口為27017。推薦運行在64位平臺,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。

MongoDB把數據存儲在文件中(默認路徑為:/data/db),為提高效率使用內存映射文件進行管理。

Hypertable

Hypertable是一個開源、高性能、可伸縮的數據庫,它采用與Google的Bigtable相似的模型。在過去數年中,Google為在PC集群 上運行的可伸縮計算基礎設施設計建造了三個關鍵部分。第一個關鍵的基礎設施是Google File System(GFS),這是一個高可用的文件系統(tǒng),提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數據復制來達到高可用性,并因此免受傳統(tǒng) 文件存儲系統(tǒng)無法避免的許多失敗的影響,比如電源、內存和網絡端口等失敗。第二個基礎設施是名為Map-Reduce的計算框架,它與GFS緊密協(xié)作,幫 助處理收集到的海量數據。第三個基礎設施是Bigtable,它是傳統(tǒng)數據庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數據,并實現高效的 查詢。Hypertable是Bigtable的一個開源實現,并且根據我們的想法進行了一些改進。

Apache Cassandra

Apache Cassandra是一套開源分布式Key-Value存儲系統(tǒng)。它最初由Facebook開發(fā),用于儲存特別大的數據。Facebook在使用此系統(tǒng)。

主要特性:

◆ 分布式

◆ 基于column的結構化

◆ 高伸展性

Cassandra的主要特點就是它不是一個數據庫,而是由一堆數據庫節(jié)點共同構成的一個分布式網絡服務,對Cassandra 的一個寫操作,會被復制到其他節(jié)點上去,對Cassandra的讀操作,也會被路由到某個節(jié)點上面去讀取。對于一個Cassandra群集來說,擴展性能 是比較簡單的事情,只管在群集里面添加節(jié)點就可以了。

Cassandra是一個混合型的非關系的數據庫,類似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 儲系統(tǒng))更豐富,但支持度卻不如文檔存儲MongoDB(介于關系數據庫和非關系數據庫之間的開源產品,是非關系數據庫當中功能最豐富,最像關系數據庫 的。Cassandra最初由Facebook開發(fā),后轉變成了開源項目。它是一個網絡社交云計算方面理想的數據庫。以Amazon專有的完全分布式的Dynamo為基礎,結合了Google BigTable基于列族(Column Family)的數據模型。P2P去中心化的存儲。很多方面都可以稱之為Dynamo 2.0。

CouchDB

所用語言: Erlang

特點:DB一致性,易于使用

使用許可: Apache

協(xié)議: HTTP/REST

雙向數據復制,持續(xù)進行或臨時處理,處理時帶沖突檢查,因此,采用的是master-master復制

MVCC – 寫操作不阻塞讀操作

可保存文件之前的版本

Crash-only(可靠的)設計

需要不時地進行數據壓縮

視圖:嵌入式 映射/減少

格式化視圖:列表顯示

支持進行服務器端文檔驗證

支持認證

根據變化實時更新

支持附件處理

因此, CouchApps(獨立的 js應用程序)

需要 jQuery程序庫

最佳應用場景:適用于數據變化較少,執(zhí)行預定義查詢,進行數據統(tǒng)計的應用程序。適用于需要提供數據版本支持的應用程序。

例如:CRM、CMS系統(tǒng)。 master-master復制對于多站點部署是非常有用的。

和其他數據庫比較,其突出特點是:

◆ 模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的字段。你可以在系統(tǒng)運行時隨意的添加或移除字段。這是一個驚人的效率提升,特別是在大型部 署上。

◆ 真正的可擴展性 :Cassandra是純粹意義上的水平擴展。為給集群添加更多容量,可以指向另一臺電腦。你不必重啟任何進程,改變應用查詢,或手動遷移任何數據。

◆ 多數據中心識別 :你可以調整你的節(jié)點布局來避免某一個數據中心起火,一個備用的數據中心將至少有每條記錄的完全復制。

◆ 范圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設置鍵的范圍來查詢。

◆ 列表數據結構 :在混合模式可以將超級列添加到5維。對于每個用戶的索引,這是非常方便的。

◆ 分布式寫操作 :有可以在任何地方任何時間集中讀或寫任何數據。并且不會有任何單點失敗。

問度娘,啥都有。

數據多的時候為什么要使用redis而不用mysql?

通常來說,當數據多、并發(fā)量大的時候,架構中可以引入Redis,幫助提升架構的整體性能,減少Mysql(或其他數據庫)的壓力,但不是使用Redis,就不用MySQL。

因為Redis的性能十分優(yōu)越,可以支持每秒十幾萬此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發(fā)的場景下數據的安全和一致性,所以它經常用于兩個場景:

緩存

判斷數據是否適合緩存到Redis中,可以從幾個方面考慮: 會經常查詢么?命中率如何?寫操作多么?數據大???

我們經常采用這樣的方式將數據刷到Redis中:查詢的請求過來,現在Redis中查詢,如果查詢不到,就查詢數據庫拿到數據,再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數據;不過要注意【緩存穿透】的問題。

緩存的刷新會比較復雜,通常是修改完數據庫之后,還需要對Redis中的數據進行操作;代碼很簡單,但是需要保證這兩步為同一事務,或最終的事務一致性。

高速讀寫

常見的就是計數器,比如一篇文章的閱讀量,不可能每一次閱讀就在數據庫里面update一次。

高并發(fā)的場景很適合使用Redis,比如雙11秒殺,庫存一共就一千件,到了秒殺的時間,通常會在極為短暫的時間內,有數萬級的請求達到服務器,如果使用數據庫的話,很可能在這一瞬間造成數據庫的崩潰,所以通常會使用Redis(秒殺的場景會比較復雜,Redis只是其中之一,例如如果請求超過某個數量的時候,多余的請求就會被限流)。

這種高并發(fā)的場景,是當請求達到服務器的時候,直接在Redis上讀寫,請求不會訪問到數據庫;程序會在合適的時間,比如一千件庫存都被秒殺,再將數據批量寫到數據庫中。

所以通常來說,在必要的時候引入Redis,可以減少MySQL(或其他)數據庫的壓力,兩者不是替代的關系 。

我將持續(xù)分享Java開發(fā)、架構設計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關注。

Redis和MySQL的應用場景是不同的。

通常來說,沒有說用Redis就不用MySQL的這種情況。

因為Redis是一種非關系型數據庫(NoSQL),而MySQL是一種關系型數據庫。

和Redis同類的數據庫還有MongoDB和Memchache(其實并沒有持久化數據)

那關系型數據庫現在常用的一般有MySQL,SQL Server,Oracle。

我們先來了解一下關系型數據庫和非關系型數據庫的區(qū)別吧。

1.存儲方式

關系型數據庫是表格式的,因此存儲在表的行和列中。他們之間很容易關聯(lián)協(xié)作存儲,提取數據很方便。而Nosql數據庫則與其相反,他是大塊的組合在一起。通常存儲在數據集中,就像文檔、鍵值對或者圖結構。

2.存儲結構

關系型數據庫對應的是結構化數據,數據表都預先定義了結構(列的定義),結構描述了數據的形式和內容。這一點對數據建模至關重要,雖然預定義結構帶來了可靠性和穩(wěn)定性,但是修改這些數據比較困難。而Nosql數據庫基于動態(tài)結構,使用與非結構化數據。因為Nosql數據庫是動態(tài)結構,可以很容易適應數據類型和結構的變化。

3.存儲規(guī)范

關系型數據庫的數據存儲為了更高的規(guī)范性,把數據分割為最小的關系表以避免重復,獲得精簡的空間利用。雖然管理起來很清晰,但是單個操作設計到多張表的時候,數據管理就顯得有點麻煩。而Nosql數據存儲在平面數據集中,數據經??赡軙貜汀蝹€數據庫很少被分隔開,而是存儲成了一個整體,這樣整塊數據更加便于讀寫

4.存儲擴展

這可能是兩者之間最大的區(qū)別,關系型數據庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機。因為數據存儲在關系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服。雖然有很大的擴展空間,但是最終會達到縱向擴展的上限。而Nosql數據庫是橫向擴展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通數據庫服務器來分擔負載。

5.查詢方式

關系型數據庫通過結構化查詢語言來操作數據庫(就是我們通常說的SQL)。SQL支持數據庫CURD操作的功能非常強大,是業(yè)界的標準用法。而Nosql查詢以塊為單元操作數據,使用的是非結構化查詢語言(UnQl),它是沒有標準的。關系型數據庫表中主鍵的概念對應Nosql中存儲文檔的ID。關系型數據庫使用預定義優(yōu)化方式(比如索引)來加快查詢操作,而Nosql更簡單更精確的數據訪問模式。

6.事務

關系型數據庫遵循ACID規(guī)則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql數據庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )、最終一致性(Eventual Consistency))。由于關系型數據庫的數據強一致性,所以對事務的支持很好。關系型數據庫支持對事務原子性細粒度控制,并且易于回滾事務。而Nosql數據庫是在CAP(一致性、可用性、分區(qū)容忍度)中任選兩項,因為基于節(jié)點的分布式系統(tǒng)中,很難全部滿足,所以對事務的支持不是很好,雖然也可以使用事務,但是并不是Nosql的閃光點。

7.性能

關系型數據庫為了維護數據的一致性付出了巨大的代價,讀寫性能比較差。在面對高并發(fā)讀寫性能非常差,面對海量數據的時候效率非常低。而Nosql存儲的格式都是key-value類型的,并且存儲在內存中,非常容易存儲,而且對于數據的 一致性是 弱要求。Nosql無需sql的解析,提高了讀寫性能。

8.授權方式

大多數的關系型數據庫都是付費的并且價格昂貴,成本較大(MySQL是開源的,所以應用的場景最多),而Nosql數據庫通常都是開源的。

所以,在實際的應用環(huán)境中,我們一般會使用MySQL存儲我們的業(yè)務過程中的數據,因為這些數據之間的關系比較復雜,我們常常會需要在查詢一個表的數據時候,將其他關系表的數據查詢出來,例如,查詢某個用戶的訂單,那至少是需要用戶表和訂單表的數據。

查詢某個商品的銷售數據,那可能就會需要用戶表,訂單表,訂單明細表,商品表等等。

而在這樣的使用場景中,我們使用Redis來存儲的話,也就是KeyValue形式存儲的話,其實并不能滿足我們的需要。

即使Redis的讀取效率再高,我們也沒法用。

但,對于某些沒有關聯(lián)少,且需要高頻率讀寫,我們使用Redis就能夠很好的提高整個體統(tǒng)的并發(fā)能力。

例如商品的庫存信息,我們雖然在MySQL中會有這樣的字段,但是我們并不想MySQL的數據庫被高頻的讀寫,因為使用這樣會導致我的商品表或者庫存表IO非常高,從而影響整個體統(tǒng)的效率。

所以,對于這樣的數據,且有沒有什么復雜邏輯關系(就只是隸屬于SKU)的數據,我們就可以放在Redis里面,下單直接在Redis中減掉庫存,這樣,我們的訂單的并發(fā)能力就能夠提高了。

個人覺得應該站出來更正一下,相反的數據量大,更不應該用redis。

為什么?

因為redis是內存型數據庫啊,是放在內存里的。

設想一下,假如你的電腦100G的資料,都用redis來存儲,那么你需要100G以上的內存!

使用場景

Redis最明顯的用例之一是將其用作緩存。只是保存熱數據,或者具有過期的cache。

例如facebook,使用Memcached來作為其會話緩存。

總之,沒有見過哪個大公司數據量大了,換掉mysql用redis的。

題主你錯了,不是用redis代替MySQL,而是引入redis來優(yōu)化。

BAT里越來越多的項目組已經采用了redis+MySQL的架構來開發(fā)平臺工具。

如題主所說,當數據多的時候,MySQL的查詢效率會大打折扣。我們通常默認如果查詢的字段包含索引的話,返回是毫秒級別的。但是在實際工作中,我曾經遇到過一張包含10個字段的表,1800萬+條數據,當某種場景下,我們不得不根據一個未加索引的字段進行精確查詢的時候,單條sql語句的執(zhí)行時長有時能夠達到2min以上,就更別提如果用like這種模糊查詢的話,其效率將會多么低下。

我們最開始是希望能夠通過增加索引的方式解決,但是面對千萬級別的數據量,我們也不敢貿然加索引,因為一旦數據庫hang住,期間的所有數據庫寫入請求都會被放到等待隊列中,如果請求是通過http請求發(fā)過來的,很有可能導致服務發(fā)生分鐘級別的超時不響應。

經過一番調研,最終敲定的解決方案是引入redis作為緩存。redis具有運行效率高,數據查詢速度快,支持多種存儲類型以及事務等優(yōu)勢,我們把經常讀取,而不經常改動的數據放入redis中,服務器讀取這類數據的時候時候,直接與redis通信,極大的緩解了MySQL的壓力。

然而,我在上面也說了,是redis+MySQL結合的方式,而不是替代。原因就是redis雖然讀寫很快,但是不適合做數據持久層,主要原因是使用redis做數據落盤是要以效率作為代價的,即每隔制定的時間,redis就要去進行數據備份/落盤,這對于單線程的它來說,勢必會因“分心”而影響效率,結果得不償失。

樓主你好,首先糾正下,數據多并不是一定就用Redis,Redis歸屬于NoSQL數據庫中,其特點擁有高性能讀寫數據速度,主要解決業(yè)務效率瓶頸。下面就詳細說下Redis的相比MySQL優(yōu)點。( 關于Redis詳細了解參見我近期文章: )

讀寫異???/p>

Redis非常快,每秒可執(zhí)行大約10萬次的讀寫速度。

豐富的數據類型

Redis支持豐富的數據類型,有二進制字符串、列表、集合、排序集和散列等等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數據類型來處理解決。

原子性

Redis的所有操作都是原子操作,這確保如果兩個客戶端并發(fā)訪問,Redis服務器能接收更新的值。

豐富實用工具 支持異機主從復制

Redis支持主從復制的配置,它可以實現主服務器的完全拷貝。

以上為開發(fā)者青睞Redis的主要幾個可取之處。但是,請注意實際生產環(huán)境中企業(yè)都是結合Redis和MySQL的特定進行不同應用場景的取舍。 如緩存——熱數據、計數器、消息隊列(與ActiveMQ,RocketMQ等工具類似)、位操作(大數據處理)、分布式鎖與單線程機制、最新列表(如新聞列表頁面最新的新聞列表)以及排行榜等等 可以看見Redis大顯身手的場景??墒菍τ趪乐數臄祿蚀_度和復雜的關系型應用MySQL等關系型數據庫依然不可替。

web應用中一般采用MySQL+Redis的方式,web應用每次先訪問Redis,如果沒有找到數據,才去訪問MySQL。

本質區(qū)別

1、mysql:數據放在磁盤 redis:數據放在內存。

首先要知道m(xù)ysql存儲在磁盤里,redis存儲在內存里,redis既可以用來做持久存儲,也可以做緩存,而目前大多數公司的存儲都是mysql + redis,mysql作為主存儲,redis作為輔助存儲被用作緩存,加快訪問讀取的速度,提高性能。

使用場景區(qū)別

1、mysql支持sql查詢,可以實現一些關聯(lián)的查詢以及統(tǒng)計;

2、redis對內存要求比較高,在有限的條件下不能把所有數據都放在redis;

3、mysql偏向于存數據,redis偏向于快速取數據,但redis查詢復雜的表關系時不如mysql,所以可以把熱門的數據放redis,mysql存基本數據。

mysql的運行機制

mysql作為持久化存儲的關系型數據庫,相對薄弱的地方在于每次請求訪問數據庫時,都存在著I/O操作,如果反復頻繁的訪問數據庫。第一:會在反復鏈接數據庫上花費大量時間,從而導致運行效率過慢;第二:反復地訪問數據庫也會導致數據庫的負載過高,那么此時緩存的概念就衍生了出來。

Redis持久化

由于Redis的數據都存放在內存中,如果沒有配置持久化,redis重啟后數據就全丟失了,于是需要開啟redis的持久化功能,將數據保存到磁盤上,當redis重啟后,可以從磁盤中恢復數據。redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。

redis是放在內存的~!

數據量多少絕對不是選擇redis和mysql的準則,因為無論是mysql和redis都可以集群擴展,約束它們的只是硬件(即你有沒有那么多錢搭建上千個組成的集群),我個人覺得數據讀取的快慢可能是選擇的標準之一,另外工作中往往是兩者同是使用,因為mysql存儲在硬盤,做持久化存儲,而redis存儲在內存中做緩存提升效率。

關系型數據庫是必不可少的,因為只有關系型數據庫才能提供給你各種各樣的查詢方式。如果有一系列的數據會頻繁的查詢,那么就用redis進行非持久化的存儲,以供查詢使用,是解決并發(fā)性能問題的其中一個手段

什么是redis數據庫

舉例select

1

表示切換到1數據庫

進入redis

默認是進入0數據庫,redis的數據庫是0-15,每個庫中可以存不同你想要的數據,本身redis屬于nosql,可以做數據緩存,也可以做存儲,缺點就是事務處理機制。

什么是NoSQL數據庫?

2. 什么是NoSQL?

2.1 NoSQL 概述

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,

泛指非關系型的數據庫。隨著互聯(lián)網web2.0網站的興起,傳統(tǒng)的關系數據庫在應付web2.0網站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發(fā)展。NoSQL數據庫的產生就是為了解決大規(guī)模數據集合多重數據種類帶來的挑戰(zhàn),尤其是大數據應用難題,包括超大規(guī)模數據的存儲。

(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。

2.2 NoSQL代表

MongDB、 Redis、Memcache

3. 關系型數據庫與NoSQL的區(qū)別?

3.1 RDBMS

高度組織化結構化數據

結構化查詢語言(SQL)

數據和關系都存儲在單獨的表中。

數據操縱語言,數據定義語言

嚴格的一致性

基礎事務

ACID

關系型數據庫遵循ACID規(guī)則

事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:

A (Atomicity) 原子性

原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

C (Consistency) 一致性

一致性也比較容易理解,也就是說數據庫要一直處于一致的狀態(tài),事務的運行不會改變數據庫原本的一致性約束。

I (Isolation) 獨立性

所謂的獨立性是指并發(fā)的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的

D (Durability) 持久性

持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。

3.2 NoSQL

代表著不僅僅是SQL

沒有聲明性查詢語言

沒有預定義的模式

鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫

最終一致性,而非ACID屬性

非結構化和不可預知的數據

CAP定理

高性能,高可用性和可伸縮性

分布式數據庫中的CAP原理(了解)

CAP定理:

Consistency(一致性), 數據一致更新,所有數據變動都是同步的

Availability(可用性), 好的響應性能

Partition tolerance(分區(qū)容錯性) 可靠性

P: 系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作。

定理:任何分布式系統(tǒng)只可同時滿足二點,沒法三者兼顧。

CAP理論的核心是:一個分布式系統(tǒng)不可能同時很好的滿足一致性,可用性和分區(qū)容錯性這三個需求,

因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三 大類:

CA - 單點集群,滿足一致性,可用性的系統(tǒng),通常在可擴展性上不太強大。

CP - 滿足一致性,分區(qū)容忍性的系統(tǒng),通常性能不是特別高。

AP - 滿足可用性,分區(qū)容忍性的系統(tǒng),通??赡軐σ恢滦砸蟮鸵恍?/p>

CAP理論就是說在分布式存儲系統(tǒng)中,最多只能實現上面的兩點。

而由于當前的網絡硬件肯定會出現延遲丟包等問題,所以分區(qū)容忍性是我們必須需要實現的。

所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統(tǒng)能同時保證這三點。

說明:C:強一致性 A:高可用性 P:分布式容忍性

舉例:

CA:傳統(tǒng)Oracle數據庫

AP:大多數網站架構的選擇

CP:Redis、Mongodb

注意:分布式架構的時候必須做出取舍。

一致性和可用性之間取一個平衡。多余大多數web應用,其實并不需要強一致性。

因此犧牲C換取P,這是目前分布式數據庫產品的方向。

4. 當下NoSQL的經典應用

當下的應用是 SQL 與 NoSQL 一起使用的。

代表項目:阿里巴巴商品信息的存放。

去 IOE 化。

ps:I 是指 IBM 的小型機,很貴的,好像好幾萬一臺;O 是指 Oracle 數據庫,也很貴的,好幾萬呢;M 是指 EMC 的存儲設備,也很貴的。

難點:

數據類型多樣性。

數據源多樣性和變化重構。

數據源改造而服務平臺不需要大面積重構。

標題名稱:持久化nosql,持久化對象
網站路徑:http://jinyejixie.com/article32/dsdgdpc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網站制作、網站維護、動態(tài)網站、小程序開發(fā)、建站公司、搜索引擎優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
大化| 汝城县| 忻城县| 利川市| 玉溪市| 封丘县| 阳江市| 十堰市| 山阴县| 县级市| 宜昌市| 长海县| 策勒县| 云浮市| 板桥市| 惠水县| 洮南市| 昆山市| 乌什县| 抚远县| 通江县| 山阳县| 邵武市| 沐川县| 清涧县| 兰州市| 阿图什市| 吉林市| 昭觉县| 天峨县| 合作市| 大理市| 长寿区| 思南县| 雷山县| 宜川县| 青川县| 嘉鱼县| 新巴尔虎右旗| 安仁县| 泊头市|