實(shí)際上為了更好的描述實(shí)體之間的關(guān)系,我們要是再繼續(xù)使用Redis的話,是不是感覺實(shí)體之間的關(guān)系不夠那么的明顯,雖然也是屬于NoSQL的一種,但是相對(duì)來(lái)說(shuō),Redis,表現(xiàn)實(shí)體之間的關(guān)系就沒(méi)有那么清晰了,為了更好的描述實(shí)體之間的關(guān)系,就會(huì)使用圖形數(shù)據(jù)庫(kù)來(lái)進(jìn)行了,那么今天阿粉介紹的,就是一個(gè)圖形化的數(shù)據(jù)可,Neo4J。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),樂(lè)陵網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:樂(lè)陵等地區(qū)。樂(lè)陵做網(wǎng)站價(jià)格咨詢:028-86922220
Neo4j是一個(gè)世界領(lǐng)先的開源的基于圖的數(shù)據(jù)庫(kù)。 它是使用Java語(yǔ)言完全開發(fā)的。那么什么是圖數(shù)據(jù)庫(kù)呢?圖數(shù)據(jù)庫(kù)是以圖結(jié)構(gòu)的形式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)。 它以節(jié)點(diǎn),關(guān)系和屬性的形式存儲(chǔ)應(yīng)用程序的數(shù)據(jù)。正如RDBMS以表的“行,列”的形式存儲(chǔ)數(shù)據(jù),GDBMS以圖的形式存儲(chǔ)數(shù)據(jù)。
RDBMS與圖數(shù)據(jù)庫(kù)的區(qū)別
1.Tables 表Graphs 圖表
2.Rows 行Nodes 節(jié)點(diǎn)
3.Columns and Data 列和數(shù)據(jù) Properties and its values屬性及其值
4.Constraints 約束Relationships 關(guān)系
5.Joins 加入Traversal 遍歷
說(shuō)完了圖形數(shù)據(jù)庫(kù),我們就來(lái)看看這個(gè) Neo4J 數(shù)據(jù)庫(kù)吧
neo4j是用Java語(yǔ)言編寫的圖形數(shù)據(jù)庫(kù),運(yùn)行時(shí)需要啟動(dòng)JVM進(jìn)程,因此,需安裝JAVA SE的JDK。關(guān)于 Java 怎么安裝,我就不用再多廢話了吧,到時(shí)候別忘了檢測(cè)一下 Java 的版本就好了, java -version
接下來(lái)我們就是要進(jìn)行一個(gè)安裝了,我們先去官網(wǎng),下載社區(qū)版,企業(yè)版要收費(fèi)的,注意哈。
官網(wǎng)地址
下載完成,直接開始安裝,傻瓜式操作即可。
Neo4j應(yīng)用程序有如下主要的目錄結(jié)構(gòu):
注意,如果你使用的是Zip的壓縮包來(lái)進(jìn)行的使用的話,那么你就需要注意一些地方,比如你如果是用 Zip 的包解壓之后,并且想要通過(guò) bat 的命令啟動(dòng),直接在目錄下進(jìn)行 cmd ,然后 neo4j.bat ,這時(shí)候可能會(huì)出現(xiàn)一個(gè)問(wèn)題,就是版本可能會(huì)出現(xiàn)問(wèn)題,你如果下載使用的是最新版的 Neo4J ,那么就可能會(huì)讓你使用 JDK 11 ,而阿粉就是踩過(guò)了這個(gè)大坑之后,才發(fā)現(xiàn),bat 閃退的原因。
這樣就是說(shuō)明我們的 JDk 的版本對(duì)應(yīng)的和 Neo4J 需要的 JDK 是不匹配的,我們就需要換一下我們的 JDK 了。把他換成 JDK 11 就好了,再次啟動(dòng)。
這時(shí)候,我們就直接訪問(wèn) localhost:7474 的端口,直接就能看到如下的畫面, 1.jpg
剛進(jìn)入的時(shí)候可能需要大家輸入帳號(hào)密碼,默認(rèn)的帳號(hào)密碼就是,neo4j 修改成你想要的就行了。
這樣登錄進(jìn)去我們就能開始正式學(xué)習(xí) Neo4J 的所有內(nèi)容了。
Neo4j - CQL語(yǔ)法
我們?cè)谥v語(yǔ)法之前首先我們先得看看 Neo4J 的構(gòu)建模塊,不然之后的查詢都是無(wú)意義的。
Neo4j圖數(shù)據(jù)庫(kù)主要有以下構(gòu)建塊 -
節(jié)點(diǎn)是圖表的基本單位。 它包含具有鍵值對(duì)的屬性,如下所示
屬性是用于描述圖節(jié)點(diǎn)和關(guān)系的鍵值對(duì)
關(guān)系是圖形數(shù)據(jù)庫(kù)的另一個(gè)主要構(gòu)建塊。 它連接兩個(gè)節(jié)點(diǎn),如下所示。
Label將一個(gè)公共名稱與一組節(jié)點(diǎn)或關(guān)系相關(guān)聯(lián)。 節(jié)點(diǎn)或關(guān)系可以包含一個(gè)或多個(gè)標(biāo)簽。 我們可以為現(xiàn)有節(jié)點(diǎn)或關(guān)系創(chuàng)建新標(biāo)簽。 我們可以從現(xiàn)有節(jié)點(diǎn)或關(guān)系中刪除現(xiàn)有標(biāo)簽。
Neo4j數(shù)據(jù)瀏覽器 一旦我們安裝Neo4j,我們可以訪問(wèn)Neo4j數(shù)據(jù)瀏覽器使用以下URL
http:// localhost:7474 / browser /
CREATE 語(yǔ)法
CREATE ( : )
它是我們要?jiǎng)?chuàng)建的節(jié)點(diǎn)名稱。
它是一個(gè)節(jié)點(diǎn)標(biāo)簽名稱
我們可以創(chuàng)建一個(gè)節(jié)點(diǎn),然后給他安排上一個(gè)標(biāo)簽
CREATE (emp:Employee)
當(dāng)我們看到
Added 1 label, created 1 node, completed after 74 ms.
這就創(chuàng)建成功了,
那么怎么查看呢?
MATCH語(yǔ)法
MATCH ( : ) return xxx
是這個(gè)樣子的
但是看到里面竟然沒(méi)有東西,就相當(dāng)于是一個(gè)空的對(duì)象,那是不是就應(yīng)該給里面放入屬性的操作呢?沒(méi)錯(cuò),肯定有
CREATE (emp:Employee{ id : 1001 ,name :"lucy", age : 10})
Added 1 label, created 1 node, set 3 properties, completed after 163 ms. 創(chuàng)建成功。
我們?cè)俅尾榭淳湍芸吹?/p>
如果我們想只要其中的一些對(duì)象的屬性,而不是全部屬性,那應(yīng)該怎么操作呢?
RETURN語(yǔ)法
RETURN 可以返回的是一個(gè)對(duì)象,也可以是對(duì)象中的屬性,比如:
結(jié)果就是下面這個(gè)樣子的,大家看一下,是不是感覺還是挺好用的。
** WHERE語(yǔ)法**
WHERE
為什么在前面的位置阿粉說(shuō),CQL 是和 SQL 類型的,這完全是因?yàn)楹芏鄸|西和 SQL 是類似的。
結(jié)果如下:
相同的還有
布爾運(yùn)算符 描述 AND 和 OR 或者 NOT 非 XOR 異或
比較運(yùn)算符 描述 = “等于”運(yùn)算符 “不等于”運(yùn)算符 “小于”運(yùn)算符 “大于”運(yùn)算符 = “小于或等于”運(yùn)算符。 = “大于或等于”運(yùn)算符。
DELETE語(yǔ)法
刪除語(yǔ)法必然是有的,因?yàn)橛袆?chuàng)建,肯定有刪除。
DELETE
但是這個(gè)命令也不是單獨(dú)使用的哈,
MATCH (e: Employee) DELETE e
直接刪除成功。
基礎(chǔ)的東西講完了,阿粉就得說(shuō)說(shuō)這個(gè)比較重要的內(nèi)容了,關(guān)系,
我們之前創(chuàng)建節(jié)點(diǎn)的時(shí)候,那叫一個(gè)簡(jiǎn)單舒適加愉快,但是創(chuàng)建關(guān)系就比較復(fù)雜了,因?yàn)樾枰紤]如何匹配到有關(guān)系的兩個(gè)節(jié)點(diǎn),以及關(guān)系本身的屬性如何設(shè)置。這里我們就簡(jiǎn)單學(xué)一下如何建立節(jié)點(diǎn)之間的關(guān)系。
由于Neo4j CQL語(yǔ)法是以人類可讀的格式。 Neo4j CQL也使用類似的箭頭標(biāo)記來(lái)創(chuàng)建兩個(gè)節(jié)點(diǎn)之間的關(guān)系。
每個(gè)關(guān)系( )包含兩個(gè)節(jié)點(diǎn)
在Neo4j中,兩個(gè)節(jié)點(diǎn)之間的關(guān)系是有方向性的。 它們是單向或雙向的。
如果我們嘗試創(chuàng)建一個(gè)沒(méi)有任何方向的關(guān)系,那么就會(huì)報(bào)錯(cuò)。
關(guān)系創(chuàng)建語(yǔ)法
CREATE ( )-[ ]-( )
我們這里直接使用創(chuàng)建新的節(jié)點(diǎn)來(lái)創(chuàng)建關(guān)系。
提示創(chuàng)建成功
這里關(guān)系名稱是“CONTAINS”
關(guān)系標(biāo)簽是“contains”。
這么看是看不出有啥關(guān)系的,但是,我們可以從另外的一個(gè)位置
這樣看下來(lái),這個(gè) Neo4J 簡(jiǎn)單操作是不是就學(xué)會(huì)了,阿粉接下來(lái)的文章中講怎么使用 Java 來(lái)操作 Neo4J 數(shù)據(jù)庫(kù)。歡迎大家來(lái)觀看。
Apache Cassandra數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)有哪些?
TAG標(biāo)簽: 數(shù)據(jù)庫(kù) Apache 優(yōu)缺點(diǎn) Cassandra
本文將超越眾所周知的一些細(xì)節(jié),探討與 Cassandra 相關(guān)的不太明顯的細(xì)節(jié)。您將檢查 Cassandra 數(shù)據(jù)模型、存儲(chǔ)模式設(shè)計(jì)、架構(gòu),以及與 Cassandra 相關(guān)的潛在驚喜。
在數(shù)據(jù)庫(kù)歷史文章 “What Goes Around Comes Around”中,Michal Stonebraker 詳細(xì)描述了存儲(chǔ)技術(shù)是如何隨著時(shí)間的推移而發(fā)展的。實(shí)現(xiàn)關(guān)系模型之前,開發(fā)人員曾嘗試過(guò)其他模型,比如層次圖和有向圖。值得注意的是,基于 SQL 的關(guān)系模型(即使到現(xiàn)在也仍然是事實(shí)上的標(biāo)準(zhǔn))已經(jīng)盛行了大約 30 年。鑒于計(jì)算機(jī)科學(xué)的短暫歷史及其快速發(fā)展的步伐,這是一項(xiàng)非凡的成就。關(guān)系模型建立已久,以至于許多年來(lái),解決方案架構(gòu)師很容易為應(yīng)用程序選擇數(shù)據(jù)存儲(chǔ)。他們的選擇總是關(guān)系數(shù)據(jù)庫(kù)。
諸如增加系統(tǒng)、移動(dòng)設(shè)備、擴(kuò)展的用戶在線狀態(tài)、云計(jì)算和多核系統(tǒng)的用戶群之類的開發(fā)已經(jīng)導(dǎo)致產(chǎn)生越來(lái)越多的大型系統(tǒng)。Google 和 Amazon 之類的高科技公司都是首批觸及規(guī)模問(wèn)題的公司。他們很快就發(fā)現(xiàn)關(guān)系數(shù)據(jù)庫(kù)并不足以支持大型系統(tǒng)。
為了避免這些挑戰(zhàn),Google 和 Amazon 提出了兩個(gè)可供選擇的解決方案:Big Table 和 Dynamo,他們可以由此放松關(guān)系數(shù)據(jù)模型提供的保證,從而實(shí)現(xiàn)更高的可擴(kuò)展性。Eric Brewer 的 “CAP Theorem”后來(lái)官方化了這些觀察結(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”,后來(lái)被重新定義為 “不只是 SQL”,意思是說(shuō),除了基于 SQL 的解決方案外,還有其他的解決方案。
有許多 NoSQL 系統(tǒng),而且每一個(gè)系統(tǒng)都緩和或改變了關(guān)系模型的某些方面。值得注意的是,沒(méi)有一個(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)方面的特性來(lái)支持 Big Table 數(shù)據(jù)模型。Cassandra 的一些優(yōu)勢(shì)如下所示:
高度可擴(kuò)展性和高度可用性,沒(méi)有單點(diǎn)故障
NoSQL 列族實(shí)現(xiàn)
非常高的寫入吞吐量和良好的讀取吞吐量
類似 SQL 的查詢語(yǔ)言(從 0.8 起),并通過(guò)二級(jí)索引支持搜索
可調(diào)節(jié)的一致性和對(duì)復(fù)制的支持
靈活的模式
這些優(yōu)點(diǎn)很容易讓人們推薦使用 Cassandra,但是,對(duì)于開發(fā)人員來(lái)說(shuō),至關(guān)重要的一點(diǎn)是要深入探究 Cassandra 的細(xì)節(jié)和復(fù)雜之處,從而掌握該程序的復(fù)雜性。
NoSQL薄弱的安全性會(huì)給企業(yè)帶來(lái)負(fù)面影響 。Imperva公司創(chuàng)始人兼CTO Amichai Shulman如是說(shuō)。在新的一年中,無(wú)疑會(huì)有更多企業(yè)開始或籌劃部署NoSQL。方案落實(shí)后就會(huì)逐漸發(fā)現(xiàn)種種安全問(wèn)題,因此早做準(zhǔn)備才是正確的選擇。 作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的替代方案,NoSQL在查詢中并不使用SQL語(yǔ)言,而且允許用戶隨時(shí)變更數(shù)據(jù)屬性。此類數(shù)據(jù)庫(kù)以擴(kuò)展性良好著稱,并能夠在需要大量應(yīng)用程序與數(shù)據(jù)庫(kù)本身進(jìn)行實(shí)時(shí)交互的交易處理任務(wù)中發(fā)揮性能優(yōu)勢(shì),Couchbase創(chuàng)始人兼產(chǎn)品部門高級(jí)副總裁James Phillips解釋稱:NoSQL以交易業(yè)務(wù)為核心。它更注重實(shí)時(shí)處理能力并且擅長(zhǎng)直接對(duì)數(shù)據(jù)進(jìn)行操作,大幅度促進(jìn)了交互型軟件系統(tǒng)的發(fā)展。Phillips指出。其中最大的優(yōu)勢(shì)之一是能夠隨時(shí)改變(在屬性方面),由于結(jié)構(gòu)性的弱化,修改過(guò)程非常便捷。 NoSQL最大優(yōu)勢(shì)影響其安全性 NoSQL的關(guān)鍵性特色之一是其動(dòng)態(tài)的數(shù)據(jù)模型,Shulman解釋道。我可以在其運(yùn)作過(guò)程中加入新的屬性記錄。因此與這種結(jié)構(gòu)相匹配的安全模型必須具備一定的前瞻性規(guī)劃。也就是說(shuō),它必須能夠了解數(shù)據(jù)庫(kù)引入的新屬性將引發(fā)哪些改變,以及新加入的屬性擁有哪些權(quán)限。然而這個(gè)層面上的安全概念目前尚不存在,根本沒(méi)有這樣的解決方案。 根據(jù)Phillips的說(shuō)法,某些NoSQL開發(fā)商已經(jīng)開始著手研發(fā)安全機(jī)制,至少在嘗試保護(hù)數(shù)據(jù)的完整性。在關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域,如果我們的數(shù)據(jù)組成不正確,那么它將無(wú)法與結(jié)構(gòu)并行運(yùn)作,換言之?dāng)?shù)據(jù)插入操作整體將宣告失敗。目前各種驗(yàn)證規(guī)則與完整性檢查已經(jīng)比較完善,而事實(shí)證明這些驗(yàn)證機(jī)制都能在NoSQL中發(fā)揮作用。我們與其他人所推出的解決方案類似,都會(huì)在插入一條新記錄或是文檔型規(guī)則時(shí)觸發(fā),并在執(zhí)行過(guò)程中確保插入數(shù)據(jù)的正確性。 Shulman預(yù)計(jì)新用戶很快將在配置方面捅出大婁子,這并非因?yàn)镮T工作人員的玩忽職守,實(shí)際上主要原因是NoSQL作為一項(xiàng)新技術(shù)導(dǎo)致大多數(shù)人對(duì)其缺乏足夠的知識(shí)基礎(chǔ)。Application Security研發(fā)部門TeamSHATTER的經(jīng)理Alex Rothacker對(duì)上述觀點(diǎn)表示贊同。他指出,培訓(xùn)的一大問(wèn)題在于,大多數(shù)NoSQL的從業(yè)者往往屬于新生代IT人士,他們對(duì)于技術(shù)了解較多,但往往缺乏足夠的安全管理經(jīng)驗(yàn)。 如果他們從傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)入手,那么由于強(qiáng)制性安全機(jī)制的完備,他們可以在使用中學(xué)習(xí)。但NoSQL,只有行家才能通過(guò)觀察得出正確結(jié)論,并在大量研究工作后找到一套完備的安全解決方案。因此可能有90%的從業(yè)者由于知識(shí)儲(chǔ)備、安全經(jīng)驗(yàn)或是工作時(shí)間的局限而無(wú)法做到這一點(diǎn)。 NoSQL需在安全性方面進(jìn)行優(yōu)化 盡管Phillips認(rèn)同新技術(shù)與舊經(jīng)驗(yàn)之間存在差異,但企業(yè)在推廣NoSQL時(shí)加大對(duì)安全性的關(guān)注會(huì)起到很大程度的積極作用。他認(rèn)為此類數(shù)據(jù)存儲(chǔ)機(jī)制與傳統(tǒng)關(guān)系類數(shù)據(jù)庫(kù)相比,其中包含著的敏感類信息更少,而且與企業(yè)網(wǎng)絡(luò)內(nèi)部其它應(yīng)用程序的接觸機(jī)會(huì)也小得多。 他們并不把這項(xiàng)新技術(shù)完全當(dāng)成數(shù)據(jù)庫(kù)使用,正如我們?cè)谑占泶罅縼?lái)自其它應(yīng)用程序的業(yè)務(wù)類數(shù)據(jù)時(shí),往往也會(huì)考慮將其作為企業(yè)數(shù)據(jù)存儲(chǔ)機(jī)制一樣,他補(bǔ)充道。當(dāng)然,如果我打算研發(fā)一套具備某種特定功能的社交網(wǎng)絡(luò)、社交游戲或是某種特殊web應(yīng)用程序,也很可能會(huì)將其部署于防火墻之下。這樣一來(lái)它不僅與應(yīng)用程序緊密結(jié)合,也不會(huì)被企業(yè)中的其它部門所觸及。 但Rothacker同時(shí)表示,這種過(guò)度依賴周邊安全機(jī)制的數(shù)據(jù)庫(kù)系統(tǒng)也存在著極其危險(xiǎn)的漏洞。一旦系統(tǒng)完全依附于周邊安全模型,那么驗(yàn)證機(jī)制就必須相對(duì)薄弱,而且缺乏多用戶管理及數(shù)據(jù)訪問(wèn)方面的安全保護(hù)。只要擁有高權(quán)限賬戶,我們幾乎能訪問(wèn)存儲(chǔ)機(jī)制中的一切數(shù)據(jù)。舉例來(lái)說(shuō),Brian Sullivan就在去年的黑帽大會(huì)上演示了如何在完全不清楚數(shù)據(jù)具體內(nèi)容的情況下,將其信息羅列出來(lái)甚至導(dǎo)出。 而根據(jù)nCircle公司CTO Tim ‘TK’ Keanini的觀點(diǎn),即使是與有限的應(yīng)用程序相關(guān)聯(lián),NoSQL也很有可能被暴露在互聯(lián)網(wǎng)上。在缺少嚴(yán)密網(wǎng)絡(luò)劃分的情況下,它可能成為攻擊者窺探存儲(chǔ)數(shù)據(jù)的薄弱環(huán)節(jié)。因?yàn)镹oSQL在設(shè)計(jì)上主要用于互聯(lián)網(wǎng)規(guī)模的部署,所以它很可能被直接連接到互聯(lián)網(wǎng)中,進(jìn)而面臨大量攻擊行為。 其中發(fā)生機(jī)率最高的攻擊行為就是注入式攻擊,這也是一直以來(lái)肆虐于關(guān)系類數(shù)據(jù)庫(kù)領(lǐng)域的頭號(hào)公敵。盡管NoSQL沒(méi)有將SQL作為查詢語(yǔ)言,也并不代表它能夠免受注入式攻擊的威脅。雖然不少人宣稱SQL注入在NoSQL這邊不起作用,但其中的原理是完全一致的。攻擊者需要做的只是改變自己注入內(nèi)容的語(yǔ)法形式,Rothacker解釋稱。也就是說(shuō)雖然SQL注入不會(huì)出現(xiàn),但JavaScript注入或者JSON注入同樣能威脅安全。 此外,攻擊者在籌劃對(duì)這類數(shù)據(jù)庫(kù)展開侵襲時(shí),也很可能進(jìn)一步優(yōu)化自己的工具。不成熟的安全技術(shù)往往帶來(lái)這樣的窘境:需要花費(fèi)大量時(shí)間學(xué)習(xí)如何保障其安全,但幾乎每個(gè)IT人士都能迅速掌握攻擊活動(dòng)的組織方法。因此我認(rèn)為攻擊者將會(huì)始終走在安全部署的前面,Shulman說(shuō)道。遺憾的是搞破壞總比防范工作更容易,而我們已經(jīng)看到不少NoSQL技術(shù)方面的公開漏洞,尤其是目前引起熱議的、以JSON注入為載體的攻擊方式。 NoSQL安全性并非其阻礙 然而,這一切都不應(yīng)該成為企業(yè)使用NoSQL的阻礙,他總結(jié)道。我認(rèn)為歸根結(jié)底,這應(yīng)該算是企業(yè)的一種商業(yè)決策。只要這種選擇能夠帶來(lái)吸引力巨大的商業(yè)機(jī)遇,就要承擔(dān)一定風(fēng)險(xiǎn),Shulman解釋道。但應(yīng)該采取一定措施以盡量弱化這種風(fēng)險(xiǎn)。 舉例來(lái)說(shuō),鑒于數(shù)據(jù)庫(kù)對(duì)外部安全機(jī)制的依賴性,Rothacker建議企業(yè)積極考慮引入加密方案。他警告稱,企業(yè)必須對(duì)與NoSQL相對(duì)接的應(yīng)用程序代碼仔細(xì)檢查。換言之,企業(yè)必須嚴(yán)格挑選負(fù)責(zé)此類項(xiàng)目部署的人選,確保將最好的人才用于這方面事務(wù),Shulman表示。當(dāng)大家以NoSQL為基礎(chǔ)編寫應(yīng)用程序時(shí),必須啟用有經(jīng)驗(yàn)的編程人員,因?yàn)榭蛻舳塑浖堑謸醢踩珕?wèn)題的第一道屏障。切實(shí)為額外緩沖區(qū)的部署留出時(shí)間與預(yù)算,這能夠讓員工有閑暇反思自己的工作內(nèi)容并盡量多顧及安全考量多想一點(diǎn)就是進(jìn)步。綜上所述,這可能與部署傳統(tǒng)的關(guān)系類數(shù)據(jù)庫(kù)也沒(méi)什么不同。 具有諷刺意味的是,近年來(lái)數(shù)據(jù)庫(kù)應(yīng)用程序在安全性方面的提升基本都跟數(shù)據(jù)庫(kù)本身沒(méi)什么關(guān)系,nCircle公司安全研究及開發(fā)部門總監(jiān)Oliver Lavery如是說(shuō)。
No SQL DB是一種和關(guān)系型數(shù)據(jù)庫(kù)相對(duì)應(yīng)的對(duì)象數(shù)據(jù)庫(kù)。按照數(shù)據(jù)模型保存性質(zhì)將當(dāng)前NoSQL分為四種:
1.Key-value stores鍵值存儲(chǔ), 保存keys+BLOBs
2.Table-oriented 面向表, 主要有Google的BigTable和Cassandra.
3.Document-oriented面向文本, 文本是一種類似XML文檔,MongoDB 和 CouchDB
4.Graph-oriented 面向圖論. 如Neo4J.
關(guān)系型數(shù)據(jù)庫(kù)的弊端:
關(guān)系型數(shù)據(jù)庫(kù)的歷史已經(jīng)有30余年了,因此,在某些情況下,關(guān)系型數(shù)據(jù)庫(kù)的弱點(diǎn)就會(huì)暴露出來(lái):
1. “對(duì)象-關(guān)系 阻抗不匹配”。關(guān)系模型和面向?qū)ο竽P驮诟拍钌洗嬖谔烊坏牟黄ヅ涞牡胤?,比如?duì)象模型當(dāng)中特有的“繼承”,“組合”,“聚合”,“依賴”的概念在關(guān)系模型當(dāng)中是不存在的。
2. “模式演進(jìn)”。即隨著時(shí)間的推移,需要對(duì)數(shù)據(jù)庫(kù)模式進(jìn)行調(diào)整以便適應(yīng)新的需求,然而,對(duì)數(shù)據(jù)庫(kù)模式的調(diào)整是的成本很高的動(dòng)作,因此很多設(shè)計(jì)師在系統(tǒng)設(shè)計(jì)之初會(huì)設(shè)計(jì)一個(gè)兼容性很強(qiáng)的數(shù)據(jù)庫(kù)模式,以應(yīng)對(duì)將來(lái)可能出現(xiàn)的需求,然而在現(xiàn)在的web系統(tǒng)開發(fā)過(guò)程中,系統(tǒng)的變更更加頻繁,幾乎無(wú)法預(yù)先設(shè)計(jì)出一種“萬(wàn)能”的數(shù)據(jù)庫(kù)模式以滿足所有的需求,因此 模式演進(jìn)的弊端就愈發(fā)凸顯。
3. 關(guān)系型數(shù)據(jù)庫(kù)處理 稀疏表時(shí)的性能非常差。
4. network-oriented data 很適合處理 人工智能、社交網(wǎng)絡(luò)中的一些需求。
所以,各種各樣的No SQL DB 出現(xiàn)了,這里只簡(jiǎn)單介紹下Neo4J 的基本知識(shí)。
Neo 數(shù)據(jù)模型
Neo4J 是一個(gè)基于圖實(shí)現(xiàn)的No SQL DB, 其基本的數(shù)據(jù)類型有如下幾種:
Node, Relationship, Property.
Node 對(duì)應(yīng)于圖中的 節(jié)點(diǎn),Relationship 對(duì)應(yīng)圖中的邊,Node 和 Relationship 都可以擁有Property,
Property 的數(shù)據(jù)結(jié)構(gòu)為。
數(shù)據(jù)遍歷
Neo 提供了Traverser對(duì)數(shù)據(jù)中的數(shù)據(jù)進(jìn)行遍歷。
關(guān)系數(shù)據(jù)庫(kù)經(jīng)過(guò)幾十年的發(fā)展,已經(jīng)非常成熟,但同時(shí)也存在不足:
表結(jié)構(gòu)是強(qiáng)約束的,業(yè)務(wù)變更時(shí)擴(kuò)充很麻煩。
如果對(duì)大數(shù)據(jù)量的表進(jìn)行統(tǒng)計(jì)運(yùn)算,I/O會(huì)很高,因?yàn)榧词怪会槍?duì)某列進(jìn)行運(yùn)算,也需要將整行數(shù)據(jù)讀入內(nèi)存。
全文搜索只能使用 Like 進(jìn)行整表掃描,性能非常低。
針對(duì)這些不足,產(chǎn)生了不同的 NoSQL 解決方案,在某些場(chǎng)景下比關(guān)系數(shù)據(jù)庫(kù)更有優(yōu)勢(shì),但同時(shí)也犧牲了某些特性,所以不能片面的迷信某種方案,應(yīng)將其作為 SQL 的有利補(bǔ)充。
NoSQL != No SQL,而是:
NoSQL = Not Only SQL
典型的 NoSQL 方案分為4類:
Redis 是典型,其 value 是具體的數(shù)據(jù)結(jié)構(gòu),包括 string, hash, list, set, sorted set, bitmap, hyperloglog,常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。
以 list 為例:
LPOP key 是移除并返回隊(duì)列左邊的第一個(gè)元素。
如果用關(guān)系數(shù)據(jù)庫(kù)就比較麻煩了,需要操作:
Redis 的缺點(diǎn)主要體現(xiàn)在不支持完成的ACID事務(wù),只能保證隔離性和一致性,無(wú)法保證原子性和持久性。
最大的特點(diǎn)是 no-schema,無(wú)需在使用前定義字段,讀取一個(gè)不存在的字段也不會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。
特點(diǎn):
以電商為例,不同商品的屬性差異很大,如冰箱和電腦,這種差異性在關(guān)系數(shù)據(jù)庫(kù)中會(huì)有很大的麻煩,而使用文檔數(shù)據(jù)庫(kù)則非常方便。
文檔數(shù)據(jù)庫(kù)的主要缺點(diǎn):
關(guān)系數(shù)據(jù)庫(kù)是按行來(lái)存儲(chǔ)的,列式數(shù)據(jù)庫(kù)是按照列來(lái)存儲(chǔ)數(shù)據(jù)。
按行存儲(chǔ)的優(yōu)勢(shì):
在某些場(chǎng)景下,這些優(yōu)勢(shì)就成為劣勢(shì)了,例如,計(jì)算超重人員的數(shù)據(jù),只需要讀取體重這一列進(jìn)行統(tǒng)計(jì)即可,但行式存儲(chǔ)會(huì)將整行數(shù)據(jù)讀取到內(nèi)存中,很浪費(fèi)。
而列式存儲(chǔ)中,只需要讀取體重這列的數(shù)據(jù)即可,I/O 將大大減少。
除了節(jié)省I/O,列式存儲(chǔ)還有更高的壓縮比,可以節(jié)省存儲(chǔ)空間。普通行式數(shù)據(jù)庫(kù)的壓縮比在 3:1 到 5:1 左右,列式數(shù)據(jù)庫(kù)在 8:1 到 30:1,因?yàn)閱蝹€(gè)列的數(shù)據(jù)相似度更高。
列式存儲(chǔ)的隨機(jī)寫效率遠(yuǎn)低于行式存儲(chǔ),因?yàn)樾惺酱鎯?chǔ)時(shí)同一行多個(gè)列都存儲(chǔ)在連續(xù)空間中,而列式存儲(chǔ)將不同列存儲(chǔ)在不連續(xù)的空間。
一般將列式存儲(chǔ)應(yīng)用在離線大數(shù)據(jù)分析統(tǒng)計(jì)場(chǎng)景,因?yàn)檫@時(shí)主要針對(duì)部分列進(jìn)行操作,而且數(shù)據(jù)寫入后無(wú)須更新。
關(guān)系數(shù)據(jù)庫(kù)通過(guò)索引進(jìn)行快速查詢,但在全文搜索的情景下,索引就不夠了,因?yàn)椋?/p>
假設(shè)有一個(gè)交友網(wǎng)站,信息表如下:
需要匹配性別、地點(diǎn)、語(yǔ)言列。
需要匹配性別、地點(diǎn)、愛好列。
實(shí)際搜索中,各種排列組合非常多,關(guān)系數(shù)據(jù)庫(kù)很難支持。
全文搜索引擎是使用 倒排索引 技術(shù),建立單詞到文檔的索引,例如上面的表信息建立倒排索引:
所以特別適合根據(jù)關(guān)鍵詞來(lái)查詢文檔內(nèi)容。
上面介紹了幾種典型的NoSQL方案,及各自的適用場(chǎng)景和特點(diǎn),您可以根據(jù)實(shí)際需求進(jìn)行選擇。
當(dāng)前文章:nosql匹配,NoSQL是什么
新聞來(lái)源:http://chinadenli.net/article4/hohgoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站制作、企業(yè)建站、微信小程序、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)