欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

NoSQL數(shù)據(jù)庫(kù)技術(shù)特性解析之文檔數(shù)據(jù)庫(kù)

系統(tǒng) 3720 0

現(xiàn)今云計(jì)算的從業(yè)人員對(duì)NoSQL一詞并不感到陌生,雖然很多技術(shù)人員都長(zhǎng)期從事關(guān)系數(shù)據(jù)庫(kù)的工作,但現(xiàn)在他們對(duì)NoSQL技術(shù)充滿期待。對(duì)于企業(yè)來(lái)說(shuō),從關(guān)系型數(shù)據(jù)庫(kù)到NoSQL數(shù)據(jù)庫(kù)轉(zhuǎn)變絕對(duì)是個(gè)需要深思熟慮的大改變。這涉及的不僅是軟件的變化,更多的是對(duì)于數(shù)據(jù)存儲(chǔ)上觀念性的變化。

CouchDB專家兼作者Bradley Holt認(rèn)為NoSQL并不是反SQL的運(yùn)動(dòng),為對(duì)應(yīng)的工作選擇最恰當(dāng)?shù)墓ぞ卟攀钦_的模式。

大多數(shù)非關(guān)系數(shù)據(jù)庫(kù)都具有快速和可伸縮的特性。通過(guò)放棄關(guān)系存儲(chǔ)模型和架構(gòu),關(guān)系數(shù)據(jù)庫(kù)便可脫離由緊密結(jié)合的架構(gòu)所帶來(lái)對(duì)其施加的限制。應(yīng)用程序也無(wú)需再鏈接數(shù)據(jù)庫(kù)內(nèi)表中的數(shù)據(jù)。

MongoDB和CouchDB以及RavenDB(RavenDB是基于Mocrosoft .NET Framework編寫的)等文檔數(shù)據(jù)庫(kù)除了某些特定的轉(zhuǎn)換外,通常都是通過(guò)HTTP為其提供數(shù)據(jù),然后將數(shù)據(jù)存儲(chǔ)為JSON(JavaScript Object Notation)格式的文檔,并提供多種語(yǔ)言的API接口。這三款開源的文檔數(shù)據(jù)庫(kù)都將簡(jiǎn)潔、速度和可伸縮性作為其設(shè)計(jì)的重要指標(biāo)。RavenDB的創(chuàng)建者Ayende Rahien就表示“RavenDB的設(shè)計(jì)初衷就旨在快速寫入并讀取”。

NoSQL——關(guān)系數(shù)據(jù)庫(kù)的有力補(bǔ)充

現(xiàn)今,NoSQL和文檔數(shù)據(jù)庫(kù)成為關(guān)系數(shù)據(jù)庫(kù)的有力補(bǔ)充(而非替代品),同時(shí)提供了更多的選擇。如果企業(yè)準(zhǔn)備將數(shù)據(jù)遷移,那么選擇NoSQL的重要標(biāo)準(zhǔn)就是要看CAP(Consistency、Availability和Partition Tolerance),也就是我們所說(shuō)的一致性、可用性和分區(qū)容忍性。但CAP原則要求在分布式系統(tǒng)只能選擇一致性、可用性和分區(qū)容忍性其中的兩項(xiàng)。所以如果企業(yè)認(rèn)為一致性是重要的那么關(guān)系數(shù)據(jù)庫(kù)理應(yīng)是優(yōu)先選擇的對(duì)象。

例如在銀行等應(yīng)用領(lǐng)域,一致性是非常重要的,這要求必須隨時(shí)考慮每個(gè)數(shù)據(jù)塊。而CAP原則中的可用性也不容忽視,某些領(lǐng)域的數(shù)據(jù)可用性要比等待所有交易數(shù)據(jù)收集齊全更為重要。最后在水平縮放時(shí),分區(qū)容忍性對(duì)于文檔數(shù)據(jù)庫(kù)顯得尤為關(guān)鍵。但MongoDB并不支持復(fù)雜的事務(wù),只支持少量的原子操作,所以不適用于“轉(zhuǎn)帳”等對(duì)事務(wù)和一致性要求很高的場(chǎng)合。這就要求需要一個(gè)關(guān)系數(shù)據(jù)庫(kù)來(lái)對(duì)交易進(jìn)行過(guò)高級(jí)別的控制。

文檔數(shù)據(jù)庫(kù)的關(guān)鍵特性

RESTful HTTP API

RESTful API設(shè)計(jì)就是為了消除創(chuàng)建松散耦合服務(wù)時(shí)的依賴關(guān)系,這也正是過(guò)去分布式體系結(jié)構(gòu)的缺陷。雖然要映射到一些協(xié)議需要依賴于元數(shù)據(jù)的可用性以及方法等,但REST API的設(shè)計(jì)目標(biāo)就是不依賴于任何通信協(xié)議。

眾多NoSQL數(shù)據(jù)庫(kù)都可通過(guò)RESTful的方式訪問(wèn)。這樣可以通過(guò)URI的方式建立數(shù)據(jù)庫(kù)連接,而查詢和命令則通過(guò)HTTP實(shí)現(xiàn)。MongoDB和CouchDB都提供了特定語(yǔ)言的API接口,以便編寫和執(zhí)行查詢、更新。但MongoDB的默認(rèn)設(shè)置仍然是使用TCP與數(shù)據(jù)庫(kù)進(jìn)行連接。而RavenDB則具備基于.NET的客戶端API,可簡(jiǎn)化與數(shù)據(jù)庫(kù)的交互過(guò)程。

單個(gè)記錄中的相關(guān)數(shù)據(jù)

大多數(shù)人都錯(cuò)誤的認(rèn)為非關(guān)系數(shù)據(jù)庫(kù)是一種包含沒(méi)有相對(duì)關(guān)系結(jié)構(gòu)的記錄的文件。而文檔數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)包含形狀數(shù)據(jù)——具有節(jié)點(diǎn)的樹。數(shù)據(jù)庫(kù)中的每個(gè)記錄都是以文檔形式存在的。并具備自我描述的功能,而不依賴于任何其他文檔。

示例代碼1:文檔數(shù)據(jù)庫(kù)(MongoDB)中的典型事例

{
"name" : "Jim",
"scores" : [ 75, 99, 87.2 ]
}
示例代碼2 CouchDB示例

{
"Subject": "I like Plankton"
"Author": "Rusty"
"PostedDate": "5/23/2006"
"Tags": ["plankton", "baseball", "decisions"]
"Body": "I decided today that I don't like baseball. I like plankton."
}

示例代碼3 包含字符串?dāng)?shù)據(jù)、數(shù)字和數(shù)組的簡(jiǎn)單結(jié)構(gòu)。還可在對(duì)象內(nèi)嵌入對(duì)象,以獲得更復(fù)雜的文檔結(jié)構(gòu)。

{
"BlogPostTitle”: “LINQ Queries and RavenDB”,
"Date":"\/Date(1266953391687+0200)\/",
"Content":”Querying RavenDB is very familiar for .NET developers who are already
using LINQ for other purposes”,
"Comments":[
{
"CommentorName":"Julie",
"Date":"\/Date(1266952919510+0200)\/",
"Text":"Thanks for using something I already know how to
work with!",
"UserId":"users/203907"
},
]
}
唯一鍵

所有數(shù)據(jù)庫(kù)都需要鍵。如果不提供鍵系統(tǒng)則會(huì)自動(dòng)在內(nèi)部創(chuàng)建一個(gè)鍵。鍵對(duì)于數(shù)據(jù)庫(kù)的索引功能至關(guān)重要。自身域中要求有已知鍵,在上面的示例代碼中存在對(duì)“users/203907”的引用。這正式RavenDB利用鍵值并允許用戶定義文檔間關(guān)系的方式。

以JSON格式存儲(chǔ)數(shù)據(jù)

共同點(diǎn)都是使用JSON存儲(chǔ)器數(shù)據(jù)。事實(shí)上,CouchDB和RavenDB(以及其他許多數(shù)據(jù)庫(kù))均采用JSON格式存儲(chǔ)數(shù)據(jù)。MongoDB對(duì)JSON使用稱之為“二進(jìn)制JSON”(BSON)的轉(zhuǎn)換,以便能夠執(zhí)行二進(jìn)制序列化。BSON是數(shù)據(jù)的內(nèi)部表現(xiàn)形式,從編程的角度看開發(fā)者不會(huì)發(fā)現(xiàn)有任何區(qū)別。 托福答案

JSON的簡(jiǎn)潔性使其很容易將幾乎所有語(yǔ)言的對(duì)象結(jié)構(gòu)轉(zhuǎn)換為JSON。 因此,開發(fā)者可在應(yīng)用程序中定義對(duì)象,然后將其直接存儲(chǔ)在數(shù)據(jù)庫(kù)中。這使得開發(fā)人員不需要使用對(duì)象關(guān)系映射程序 (ORM) 不斷在數(shù)據(jù)庫(kù)架構(gòu)和類/對(duì)象架構(gòu)之間進(jìn)行轉(zhuǎn)換。 托福答案

MongoDB BSON API的數(shù)據(jù)類型和約定列表添加了一種數(shù)據(jù)類型及其他一些數(shù)據(jù)類型,以便充實(shí)JSON中的可用內(nèi)容。而在一個(gè)單元中存儲(chǔ)和檢索相關(guān)數(shù)據(jù)可提供顯著的性能和可伸縮性的優(yōu)勢(shì)。數(shù)據(jù)庫(kù)不必四處查找常用的相關(guān)的數(shù)據(jù),因?yàn)閿?shù)據(jù)都存儲(chǔ)在相同的位置。

類型的集合

與數(shù)據(jù)庫(kù)交互時(shí),應(yīng)用程序如何知道哪一項(xiàng)代表學(xué)生,哪一項(xiàng)代表書,以及哪一項(xiàng)代表博客文章? 數(shù)據(jù)庫(kù)使用集合這一概念解決了這一問(wèn)題。 對(duì)于與特定集合(如學(xué)生集合)關(guān)聯(lián)的任何文檔(無(wú)論其架構(gòu)如何)都可在從該集合請(qǐng)求數(shù)據(jù)時(shí)對(duì)其進(jìn)行檢索。使用字段來(lái)指示類型也十分常見。這只是使搜索過(guò)程更加輕松,但哪些內(nèi)容應(yīng)進(jìn)入集合,哪些不應(yīng)進(jìn)入集合,由開發(fā)者的應(yīng)用程序決定。

架構(gòu)靈活的數(shù)據(jù)庫(kù)

前面介紹的“示例代碼1”包含自己的架構(gòu)。 每個(gè)記錄負(fù)責(zé)自己的架構(gòu),甚至負(fù)責(zé)單個(gè)數(shù)據(jù)庫(kù)或集合中包含的架構(gòu)。并且一個(gè)學(xué)生記錄并不需要與另一學(xué)生記錄相匹配。開發(fā)者只需利用此靈活性來(lái)提高效率。例如,為什么存儲(chǔ) null 值? 您可以在屬性(如“most_repeated class”)不具有值時(shí)執(zhí)行以下操作:

"name" : "Jim",
"scores" : [ 75, 99, 87.2 ]
"name" : "Julie",
"scores" : [ 50, 40, 65 ],
"most_repeated_class" : "Time Management 101"
文檔數(shù)據(jù)庫(kù)和領(lǐng)域驅(qū)動(dòng)開發(fā)



規(guī)劃域類(可能成為數(shù)據(jù)庫(kù)中的文檔)時(shí),開發(fā)者可查找通常最為獨(dú)立的數(shù)據(jù)(例如具有其明細(xì)項(xiàng)的訂單),并將其作為單個(gè)數(shù)據(jù)結(jié)構(gòu)加以關(guān)注。在訂購(gòu)系統(tǒng)中,可能還有客戶和產(chǎn)品。但或許會(huì)在不需要訂單的客戶信息的情況下訪問(wèn)該訂單,并且可能會(huì)在不需要訪問(wèn)使用產(chǎn)品的訂單的情況下使用該產(chǎn)品。這意味著,盡管會(huì)發(fā)現(xiàn)許多機(jī)會(huì)來(lái)包含獨(dú)立數(shù)據(jù)結(jié)構(gòu)(如具有其明細(xì)項(xiàng)的訂單),但這并不表示在某些情形下可以不必或者不通過(guò)外鍵聯(lián)接數(shù)據(jù)。

每個(gè)數(shù)據(jù)庫(kù)都提供各種可用模式的指南,并為用戶指明使用哪些模式可以獲得最大成功。 例如MongoDB文檔討論稱為“上級(jí)數(shù)組”的模式,它可加快在聯(lián)接文檔時(shí)對(duì)相關(guān)數(shù)據(jù)的訪問(wèn)速度。

在關(guān)系數(shù)據(jù)庫(kù)中,重復(fù)數(shù)據(jù)是個(gè)錯(cuò)誤。 對(duì)數(shù)據(jù)庫(kù)進(jìn)行標(biāo)準(zhǔn)化可確保不出現(xiàn)此情況。 使用NoSQL數(shù)據(jù)庫(kù)(尤其是分發(fā)數(shù)據(jù)庫(kù))時(shí),對(duì)數(shù)據(jù)進(jìn)行逆規(guī)范化是必要且可接受的。

查詢和更新

每個(gè)數(shù)據(jù)庫(kù)都附帶用于查詢和更新的API。盡管它們可能不是核心API的一部分,但多語(yǔ)言API是通過(guò)加載項(xiàng)提供的。其他查詢依賴預(yù)定義的視圖和稱為Map/Reduce的模式。此過(guò)程的映射階段使用這些視圖,并且各個(gè)數(shù)據(jù)庫(kù)的映射職責(zé)是不同的。映射還使數(shù)據(jù)庫(kù)能夠跨多個(gè)處理器分發(fā)查詢處理。化簡(jiǎn)階段可獲取映射查詢(如果已分發(fā),則為多個(gè)查詢)的結(jié)果,并將數(shù)據(jù)聚合到要返回到客戶端的結(jié)果中。

盡管CouchDB要求開發(fā)者通過(guò)預(yù)定義的Map/Reduce視圖進(jìn)行查詢,但MongoDB(也使用視圖和Map/Reduce)另外提供執(zhí)行臨時(shí)查詢的功能。RavenDB允許使用預(yù)定義索引進(jìn)行查詢,但也支持臨時(shí)查詢,并將根據(jù)開發(fā)者的實(shí)際運(yùn)行時(shí)查詢自動(dòng)為其創(chuàng)建索引。但在大多數(shù)時(shí)候,當(dāng)不采用SQL數(shù)據(jù)庫(kù)的已知架構(gòu)和關(guān)系本質(zhì)時(shí),開發(fā)者會(huì)丟失的一個(gè)功能是執(zhí)行臨時(shí)查詢的功能。通過(guò)嚴(yán)格控制查詢,文檔數(shù)據(jù)庫(kù)能夠?qū)崿F(xiàn)其快速性能。

數(shù)據(jù)庫(kù)變革

有許多非關(guān)系數(shù)據(jù)庫(kù)都不屬于NoSQL范疇。但既然這扇門已經(jīng)敞開,就會(huì)鼓舞更多人去探索其可用的功能,并考慮如何改進(jìn)它。
?

NoSQL數(shù)據(jù)庫(kù)技術(shù)特性解析之文檔數(shù)據(jù)庫(kù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美一级在线免费 | 久色激情 | 国产欧美日韩综合精品一区二区 | 黄色国产视频 | 国产美女自拍视频 | 日韩欧美一区二区三区视频 | 欧美精品久久久久久久久久 | 久久AV亚洲精品一区无码 | 日朝欧美亚洲精品 | 久久婷婷在线 | 2017无毒的黄网网址 | 午夜久久久久久网站 | 香蕉一区 | 久久久久久久一区二区三区 | 欧美精品欧美精品系列 | 精品久久久久久久久久久久久久 | 欧洲成人午夜免费大片 | 久久爱伊人 | 激情五月婷婷 | 国产91一区二区三区 | 耽美男男肉文 | 91精品久久久久久综合五月天 | 色综合精品久久久久久久 | 91久久精品一区二区三区 | 国产成人亚洲综合a∨婷婷 91亚洲精品一区二区福利 | 成人两性高清图片视频 | 亚洲h | 国产一二三四区中 | 午夜影皖| 日韩欧美日本 | 色人阁亚洲 | 亚洲第一激情 | 日韩不卡免费视频 | 波多野结衣亚洲一区 | 久久亚 | 91视频专区| 麻豆hd| 日本在线视频www鲁啊鲁 | 亚洲美女亚洲精品久久久久 | 91精品久久久久久久久久入口 | 色淫影院 |