"一言蔽之系列"--簡(jiǎn)說(shuō)SQL與NoSQL那些事

一言蔽之尸诽,NoSQL ==Not Only SQL ,字面意思是“不僅僅是SQL”盯另,是一類非關(guān)系型存儲(chǔ)的數(shù)據(jù)庫(kù)的統(tǒng)稱


文章結(jié)構(gòu)
1逊谋、關(guān)系型數(shù)據(jù)庫(kù):ACID理論
2、非關(guān)型系數(shù)據(jù)庫(kù):分布式存儲(chǔ)理論土铺、CAP理論胶滋、BASE理論、優(yōu)缺點(diǎn)悲敷、常用NoSQL數(shù)據(jù)庫(kù)
3究恤、Python鏈接Mongodb的演示


1、關(guān)系型數(shù)據(jù)庫(kù)

伴隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展后德,計(jì)算機(jī)每天都在產(chǎn)生大量的非結(jié)構(gòu)化部宿、半結(jié)構(gòu)化、結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)大部分都被關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)(RDBMs)來(lái)處理理张,其嚴(yán)謹(jǐn)?shù)臄?shù)據(jù)建模和應(yīng)用程序編程更加的簡(jiǎn)單那赫蛇。

1.1、關(guān)系型數(shù)據(jù)的理論-ACID

ACID

ACID是指數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)在寫入或更新數(shù)據(jù)的時(shí)候雾叭,為保證數(shù)據(jù)的事務(wù)(transaction)是正確可靠的悟耘,所必須具備的四個(gè)特性:

原子性(atomicity)、一致性(consistency)织狐、隔離性(isolation)暂幼、持久性(durability)

  • A – Atomicity – 原子性

一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成移迫,要么全部不完成肠阱,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)盲厌。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài)柜砾,就像這個(gè)事務(wù)從來(lái)沒(méi)有被執(zhí)行過(guò)一樣姨伟。

  • C – Consistency – 一致性

在事務(wù)開始之前和事務(wù)結(jié)束以后舷暮,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞屈呕。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則粟关,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作亲善。

  • I – Isolation – 隔離性

數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力设易,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致逗柴。事務(wù)隔離分為不同級(jí)別蛹头,包括讀未提交(Read uncommitted)、讀提交(read committed)戏溺、可重復(fù)讀(repeatable read)和串行化(Serializable)渣蜗。

  • D – Durability – 持久性

事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的旷祸,即便系統(tǒng)故障也不會(huì)丟失耕拷。

1.2、關(guān)系型數(shù)據(jù)庫(kù)的小缺點(diǎn)

但是為了滿足日益流行的大數(shù)據(jù)托享、物聯(lián)網(wǎng)骚烧、云計(jì)算等新興業(yè)務(wù)的需求,傳統(tǒng)的RDBMs在一些業(yè)務(wù)方面已經(jīng)無(wú)法滿足其要去闰围。首先赃绊,對(duì)數(shù)據(jù)庫(kù)的容量需求越來(lái)越高,單機(jī)無(wú)法滿足需求羡榴,很多時(shí)候需要使用集群的技術(shù)來(lái)解決問(wèn)題碧查,而傳統(tǒng)的關(guān)系型數(shù)據(jù)由于要支持join、union等操作,一般不支持分布式集群忠售。其次传惠,在大數(shù)據(jù)大行其道的今天,很多數(shù)據(jù)都“頻繁讀取/寫入稻扬,不頻繁修改”卦方,而RDBMs對(duì)所有操作一視同仁,這就為改進(jìn)與優(yōu)化帶來(lái)了空間腐螟。此外愿汰,互聯(lián)網(wǎng)時(shí)代業(yè)務(wù)的不確定性導(dǎo)致數(shù)據(jù)庫(kù)存儲(chǔ)的模式也需要頻繁的改變,不自由的存儲(chǔ)模式增大了運(yùn)維的復(fù)雜性與擴(kuò)展的難度乐纸。
關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格遵循ACID理論衬廷。但當(dāng)數(shù)據(jù)庫(kù)要開始滿足橫向擴(kuò)展、高可用汽绢、模式自由等需求時(shí)吗跋,需要對(duì)ACID理論進(jìn)行取舍,不能嚴(yán)格遵循ACID宁昭。以CAP理論和BASE理論為基礎(chǔ)的NoSQL數(shù)據(jù)庫(kù)開始出現(xiàn)跌宛。

2、非關(guān)系數(shù)據(jù)庫(kù)興起(NoSQL)

NoSQL是一項(xiàng)全新的數(shù)據(jù)庫(kù)革命积仗,早期就有人提出疆拘,發(fā)展至2009年趨勢(shì)愈發(fā)的高漲。這類數(shù)據(jù)庫(kù)的特點(diǎn):

非關(guān)系型的寂曹、分布式的哎迄、開源的、水平可擴(kuò)展的

最初的目的是為了大規(guī)模的web應(yīng)用隆圆。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系的數(shù)據(jù)存儲(chǔ)漱挚,通常的應(yīng)用有一下的特點(diǎn):模式自由、支持簡(jiǎn)易的復(fù)制渺氧、簡(jiǎn)單的API旨涝、最終的一致性(非ACID)、大數(shù)據(jù)容量等特點(diǎn)侣背。

2.1白华、分布式系統(tǒng)理論

2.1.1 分布式系統(tǒng)介紹
分布式系統(tǒng)的核心理念是讓多臺(tái)服務(wù)器協(xié)同工作,完成單臺(tái)服務(wù)器無(wú)法處理的任務(wù)贩耐,尤其是高并發(fā)或者大數(shù)據(jù)量的任務(wù)弧腥。分布式是NoSQL數(shù)據(jù)庫(kù)的必要條件。

分布式系統(tǒng)由獨(dú)立的服務(wù)器通過(guò)網(wǎng)絡(luò)松散耦合組成的憔杨。每個(gè)服務(wù)器都是一臺(tái)獨(dú)立的PC機(jī)鸟赫,服務(wù)器之間通過(guò)內(nèi)部網(wǎng)絡(luò)連接,內(nèi)部網(wǎng)絡(luò)速度一般比較快。因?yàn)榉植际郊豪锏姆?wù)器是通過(guò)內(nèi)部網(wǎng)絡(luò)松散耦合抛蚤,各節(jié)點(diǎn)之間的通訊有一定的網(wǎng)絡(luò)開銷台谢,因此分布式系統(tǒng)在設(shè)計(jì)上盡可能減少節(jié)點(diǎn)間通訊。此外岁经,因?yàn)榫W(wǎng)絡(luò)傳輸瓶頸朋沮,單個(gè)節(jié)點(diǎn)的性能高低對(duì)分布式系統(tǒng)整體性能影響不大。比如缀壤,對(duì)分布式應(yīng)用來(lái)說(shuō)樊拓,采用不同編程語(yǔ)言開發(fā)帶來(lái)的單個(gè)應(yīng)用服務(wù)的性能差異,跟網(wǎng)絡(luò)開銷比起來(lái)都可以忽略不計(jì)塘慕。

因此筋夏,分布式系統(tǒng)每個(gè)節(jié)點(diǎn)一般不采用高性能的服務(wù)器,而是使用性能相對(duì)一般的普通PC服務(wù)器图呢。提升分布式系統(tǒng)的整體性能是通過(guò)橫向擴(kuò)展(增加更多的服務(wù)器)条篷,而不是縱向擴(kuò)展(提升每個(gè)節(jié)點(diǎn)的服務(wù)器性能)實(shí)現(xiàn)。

分布式系統(tǒng)最大的特點(diǎn)是可擴(kuò)展性蛤织,它能夠適應(yīng)需求變化而擴(kuò)展赴叹。企業(yè)級(jí)應(yīng)用需求經(jīng)常隨時(shí)間而不斷變化,這也對(duì)企業(yè)級(jí)應(yīng)用平臺(tái)提出了很高的要求指蚜。企業(yè)級(jí)應(yīng)用平臺(tái)必須要能適應(yīng)需求的變化乞巧,即具有可擴(kuò)展性。比如移動(dòng)互聯(lián)網(wǎng)2C應(yīng)用摊鸡,隨著互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)規(guī)模不斷增大绽媒,業(yè)務(wù)變得越來(lái)越復(fù)雜,并發(fā)用戶請(qǐng)求越來(lái)越多柱宦,要處理的數(shù)據(jù)也越來(lái)越多些椒,這個(gè)時(shí)候企業(yè)級(jí)應(yīng)用平臺(tái)必須能夠適應(yīng)這些變化播瞳,支持高并發(fā)訪問(wèn)和海量數(shù)據(jù)處理掸刊。分布式系統(tǒng)有良好的可擴(kuò)展性,可以通過(guò)增加服務(wù)器數(shù)量來(lái)增強(qiáng)分布式系統(tǒng)整體的處理能力赢乓,以應(yīng)對(duì)企業(yè)的業(yè)務(wù)增長(zhǎng)帶來(lái)的計(jì)算需求增加忧侧。

2.2、分布式存儲(chǔ)的問(wèn)題 – CAP理論

如果我們期待實(shí)現(xiàn)一套嚴(yán)格滿足ACID的分布式事務(wù)牌芋,很可能出現(xiàn)的情況就是系統(tǒng)的可用性和嚴(yán)格一致性發(fā)生沖突蚓炬。在可用性和一致性之間永遠(yuǎn)無(wú)法存在一個(gè)兩全其美的方案。由于NoSQL的基本需求就是支持分布式存儲(chǔ)躺屁,嚴(yán)格一致性與可用性需要互相取舍肯夏,由此延伸出了CAP理論來(lái)定義分布式存儲(chǔ)遇到的問(wèn)題。

CAP理論告訴我們:一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性(C:Consistency)、可用性(A:Availability)驯击、分區(qū)容錯(cuò)性(P:Partitiontolerance)這三個(gè)基本需求烁兰,并且最多只能滿足其中的兩項(xiàng)。

對(duì)于一個(gè)分布式系統(tǒng)來(lái)說(shuō)徊都,分區(qū)容錯(cuò)是基本需求沪斟,否則不能稱之為分布式系統(tǒng)。因此架構(gòu)師需要在C和A之間尋求平衡暇矫。

CAP
  • C – Consistency – 一致性(與ACID的C完全不同)

一致性是指“all nodes see the same data at the same time”主之,即更新操作成功并返回客戶端完成后,所有節(jié)點(diǎn)在同一時(shí)間的數(shù)據(jù)完全一致李根。

對(duì)于一致性槽奕,可以分為從客戶端和服務(wù)端兩個(gè)不同的視角。

從客戶端來(lái)看房轿,一致性主要指的是多并發(fā)訪問(wèn)時(shí)更新過(guò)的數(shù)據(jù)如何獲取的問(wèn)題史翘。

從服務(wù)端來(lái)看,則是更新如何復(fù)制分布到整個(gè)系統(tǒng)冀续,以保證數(shù)據(jù)最終一致琼讽。一致性是因?yàn)橛胁l(fā)讀寫才有的問(wèn)題,因此在理解一致性的問(wèn)題時(shí)洪唐,一定要注意結(jié)合考慮并發(fā)讀寫的場(chǎng)景钻蹬。

從客戶端角度,多進(jìn)程并發(fā)訪問(wèn)時(shí)凭需,更新過(guò)的數(shù)據(jù)在不同進(jìn)程如何獲取的不同策略问欠,決定了不同的一致性。對(duì)于關(guān)系型數(shù)據(jù)庫(kù)粒蜈,要求更新過(guò)的數(shù)據(jù)能被后續(xù)的訪問(wèn)都能看到顺献,這是強(qiáng)一致性。如果能容忍后續(xù)的部分或者全部訪問(wèn)不到枯怖,則是弱一致性注整。如果經(jīng)過(guò)一段時(shí)間后要求能訪問(wèn)到更新后的數(shù)據(jù),則是最終一致性度硝。

  • A – Availability – 可用性

可用性是指“Reads and writes always succeed”肿轨,即服務(wù)一直可用,而且是正常響應(yīng)時(shí)間蕊程。

對(duì)于一個(gè)可用性的分布式系統(tǒng)椒袍,每一個(gè)非故障的節(jié)點(diǎn)必須對(duì)每一個(gè)請(qǐng)求作出響應(yīng)。也就是說(shuō)藻茂,該系統(tǒng)使用的任何算法必須最終終止驹暑。當(dāng)同時(shí)要求分區(qū)容忍性時(shí)玫恳,這是一個(gè)很強(qiáng)的定義:即使是嚴(yán)重的網(wǎng)絡(luò)錯(cuò)誤,每個(gè)請(qǐng)求必須完成优俘。

好的可用性主要是指系統(tǒng)能夠很好的為用戶服務(wù)纽窟,不出現(xiàn)用戶操作失敗或者訪問(wèn)超時(shí)等用戶體驗(yàn)不好的情況。在通常情況下兼吓,可用性與分布式數(shù)據(jù)冗余臂港、負(fù)載均衡等有著很大的關(guān)聯(lián)。

  • P – Partition tolerance – 分區(qū)容錯(cuò)性

分區(qū)容錯(cuò)性是指“the system continues to operate despite arbitrary message loss or failureof part of the system”视搏,即分布式系統(tǒng)在遇到某節(jié)點(diǎn)或網(wǎng)絡(luò)分區(qū)故障的時(shí)候审孽,仍然能夠?qū)ν馓峁M足一致性和可用性的服務(wù)。

分區(qū)容錯(cuò)性和擴(kuò)展性緊密相關(guān)浑娜。在分布式應(yīng)用中佑力,可能因?yàn)橐恍┓植际降脑驅(qū)е孪到y(tǒng)無(wú)法正常運(yùn)轉(zhuǎn)。好的分區(qū)容錯(cuò)性要求能夠使應(yīng)用雖然是一個(gè)分布式系統(tǒng)筋遭,但看上去卻好像是一個(gè)可以運(yùn)轉(zhuǎn)正常的整體打颤。比如現(xiàn)在的分布式系統(tǒng)中有某一個(gè)或者幾個(gè)機(jī)器宕掉了,其它剩下的機(jī)器還能夠正常運(yùn)轉(zhuǎn)滿足系統(tǒng)需求漓滔,或者是機(jī)器之間有網(wǎng)絡(luò)異常编饺,將分布式系統(tǒng)分隔成未獨(dú)立的幾個(gè)部分,各個(gè)部分還能維持分布式系統(tǒng)的運(yùn)作响驴,這樣就具有好的分區(qū)容錯(cuò)性透且。

  • CA without P

如果不要求P(不允許分區(qū)),則C(強(qiáng)一致性)和A(可用性)是可以保證的豁鲤。但其實(shí)分區(qū)不是你想不想的問(wèn)題秽誊,而是始終會(huì)存在,因此CA的系統(tǒng)更多的是允許分區(qū)后各子系統(tǒng)依然保持CA琳骡。

  • CP without A

如果不要求A(可用)锅论,相當(dāng)于每個(gè)請(qǐng)求都需要在Server之間強(qiáng)一致,而P(分區(qū))會(huì)導(dǎo)致同步時(shí)間無(wú)限延長(zhǎng)楣号,如此CP也是可以保證的最易。很多傳統(tǒng)的數(shù)據(jù)庫(kù)分布式事務(wù)都屬于這種模式。

  • AP without C

要高可用并允許分區(qū)竖席,則需放棄一致性耘纱。一旦分區(qū)發(fā)生敬肚,節(jié)點(diǎn)之間可能會(huì)失去聯(lián)系毕荐,為了高可用,每個(gè)節(jié)點(diǎn)只能用本地?cái)?shù)據(jù)提供服務(wù)艳馒,而這樣會(huì)導(dǎo)致全局?jǐn)?shù)據(jù)的不一致性≡餮牵現(xiàn)在眾多的NoSQL都屬于此類员寇。

CAP理論定義了分布式存儲(chǔ)的根本問(wèn)題,但并沒(méi)有指出一致性和可用性之間到底應(yīng)該如何權(quán)衡第美。于是出現(xiàn)了BASE理論蝶锋,給出了權(quán)衡A與C的一種可行方案。


2.3什往、 權(quán)衡一致性與可用性 - BASE理論**

**Base = Basically Available + Soft state + Eventuallyconsistent **基本可用性+軟狀態(tài)+最終一致性扳缕,由eBay架構(gòu)師DanPritchett提出。Base是對(duì)CAP中一致性A和可用性C權(quán)衡的結(jié)果别威,源于提出者自己在大規(guī)模分布式系統(tǒng)上實(shí)踐的總結(jié)躯舔。核心思想是無(wú)法做到強(qiáng)一致性,但每個(gè)應(yīng)用都可以根據(jù)自身的特點(diǎn)省古,采用適當(dāng)方式達(dá)到最終一致性粥庄。

  • BA - Basically Available - 基本可用

基本可用。這里是指分布式系統(tǒng)在出現(xiàn)故障的時(shí)候豺妓,允許損失部分可用性惜互,即保證核心功能或者當(dāng)前最重要功能可用。對(duì)于用戶來(lái)說(shuō)琳拭,他們當(dāng)前最關(guān)注的功能或者最常用的功能的可用性將會(huì)獲得保證训堆,但是其他功能會(huì)被削弱。

  • S – Soft State - 軟狀態(tài)

允許系統(tǒng)數(shù)據(jù)存在中間狀態(tài)白嘁,但不會(huì)影響到系統(tǒng)的整體可用性蔫慧,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步時(shí)存在延時(shí)。

  • E - Eventually Consistent - 最終一致性

要求系統(tǒng)數(shù)據(jù)副本最終能夠一致权薯,而不需要實(shí)時(shí)保證數(shù)據(jù)副本一致姑躲。最終一致性是弱一致性的一種特殊情況。最終一致性有5個(gè)變種:

  • 因果一致性
  • 讀己之所寫(因果一致性特例)
  • 會(huì)話一致性
  • 單調(diào)讀一致性
  • 單調(diào)寫一致性
主流NoSQL數(shù)據(jù)庫(kù)介紹及其適用場(chǎng)景

2.4盟蚣、幾種常見的NoSQL數(shù)據(jù)庫(kù)

1. Redis

1.1 介紹

Redis是一個(gè)開源的使用ANSI C語(yǔ)言編寫黍析、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型屎开、Key-Value數(shù)據(jù)庫(kù)阐枣,并提供多種語(yǔ)言的API。從2010年3月15日起奄抽,Redis的開發(fā)工作由VMware主持蔼两。從2013年5月開始,Redis的開發(fā)由Pivotal贊助逞度。

1.2 適用場(chǎng)景

  • 數(shù)據(jù)變化較少额划,執(zhí)行預(yù)定義查詢,進(jìn)行數(shù)據(jù)統(tǒng)計(jì)的應(yīng)用程序

  • 需要提供數(shù)據(jù)版本支持的應(yīng)用程序

    例如:股票價(jià)格档泽、數(shù)據(jù)分析俊戳、實(shí)時(shí)數(shù)據(jù)搜集揖赴、實(shí)時(shí)通訊、分布式緩存

2. MongoDB

2.1 介紹

MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)抑胎。由 C++ 語(yǔ)言編寫燥滑。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

MongoDB 是一個(gè)介于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之間的產(chǎn)品阿逃,是非關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中功能最豐富铭拧,最像關(guān)系型數(shù)據(jù)庫(kù)的非關(guān)系型數(shù)據(jù)庫(kù)。

2.2 適用場(chǎng)景

  • 需要?jiǎng)討B(tài)查詢支持
  • 需要使用索引而不是 map/reduce功能
  • 需要對(duì)大數(shù)據(jù)庫(kù)有性能要求
  • 需要使用 CouchDB但因?yàn)閿?shù)據(jù)改變太頻繁而占滿內(nèi)存
3.Neo4j

3.1 介紹
Neo4j是一個(gè)高性能的NoSQL圖形數(shù)據(jù)庫(kù)恃锉,它將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)上而不是表中羽历。它是一個(gè)嵌入式的、基于磁盤的淡喜、具備完全的事務(wù)特性的Java持久化引擎秕磷,但是它將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)(從數(shù)學(xué)角度叫做圖)上而不是表中。Neo4j也可以被看作是一個(gè)高性能的圖引擎炼团,該引擎具有成熟數(shù)據(jù)庫(kù)的所有特性澎嚣。

3.2 適用場(chǎng)景

  • 適用于圖形一類數(shù)據(jù)
  • 這是 Neo4j與其他NoSQL數(shù)據(jù)庫(kù)的最顯著區(qū)別
  • 例如:社會(huì)關(guān)系,公共交通網(wǎng)絡(luò)瘟芝,地圖及網(wǎng)絡(luò)拓譜
4.Cassandra

4.1 介紹

Apache Cassandra 是一套開源分布式 Key-Value 存儲(chǔ)系統(tǒng)易桃。它最初由 Facebook 開發(fā),用于儲(chǔ)存特別大的數(shù)據(jù)锌俱。 Cassandra 不是一個(gè)數(shù)據(jù)庫(kù)晤郑,它是一個(gè)混合型的非關(guān)系的數(shù)據(jù)庫(kù),類似于Google 的 BigTable贸宏。Cassandra 的數(shù)據(jù)模型是基于列族(Column Family)的四維或五維模型造寝。

4.2適用場(chǎng)景

  • 銀行業(yè),金融業(yè)
  • 寫比讀更快
5. HBase

5.1 介紹

HBase是一個(gè)分布式的吭练、面向列的開源數(shù)據(jù)庫(kù)诫龙,該技術(shù)來(lái)源于Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲(chǔ)一樣鲫咽,HBase在Hadoop之上提供了類似于Bigtable的能力签赃。它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而不是基于行的模式分尸。

5.2適用場(chǎng)景

  • 對(duì)大數(shù)據(jù)進(jìn)行隨機(jī)锦聊、實(shí)時(shí)訪問(wèn)的場(chǎng)合

例如: Facebook消息數(shù)據(jù)庫(kù)

3、Python鏈接Mongodb數(shù)據(jù)庫(kù)示例

作為程序猿只玩理論那才是蛋疼箩绍,老老實(shí)實(shí)碼代碼才是我們的最愛(ài)孔庭,文末來(lái)上一段怎么使用python鏈接數(shù)據(jù)庫(kù)的代碼作為結(jié)尾吧。

怎么安裝mongodb就不用我說(shuō)了吧伶选。史飞。尖昏。

MongoDB 是由C++語(yǔ)言編寫的仰税,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫(kù)系統(tǒng)构资。
在高負(fù)載的情況下,添加更多的節(jié)點(diǎn)陨簇,可以保證服務(wù)器性能吐绵。
MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔河绽,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成己单。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔耙饰,數(shù)組及文檔數(shù)組纹笼。

記錄格式
# coding:utf-8
# 導(dǎo)入鏈接mongodb的第三方包,沒(méi)安裝的用:sudo pip install pymongo 安裝
import pymongo
# 保存到mongodb數(shù)據(jù)庫(kù)
def connMongodb(item):
    # 本機(jī)數(shù)據(jù)庫(kù)地址
    mongo_url = 'localhost:27017'
    # 你的數(shù)據(jù)庫(kù)名稱
    mongo_db='ceshi'
    # 存儲(chǔ)到哪一個(gè)表苟跪,非關(guān)系數(shù)據(jù)庫(kù)里叫集合
    collection='ZhiHuText'
    con=pymongo.MongoClient(mongo_url)
    db=con[mongo_db]
    # 插入記錄到數(shù)據(jù)庫(kù)
    db[collection].insert(dict(item))

if __name__ == '__main__':
    # 插入一條記錄
    item={'title':'簡(jiǎn)書','content':'哎吆廷痘,不錯(cuò)哦'}
    connMongodb(item)


總感覺(jué)有可執(zhí)行代碼的文章才是干貨,給出一小段Demo完美啦(????)件已!

您獲得新的升級(jí)包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笋额,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子篷扩,更是在濱河造成了極大的恐慌兄猩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鉴未,死亡現(xiàn)場(chǎng)離奇詭異枢冤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铜秆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門掏导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人羽峰,你說(shuō)我怎么就攤上這事趟咆。” “怎么了梅屉?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵值纱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坯汤,道長(zhǎng)虐唠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任惰聂,我火速辦了婚禮疆偿,結(jié)果婚禮上咱筛,老公的妹妹穿的比我還像新娘。我一直安慰自己杆故,他們只是感情好迅箩,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著处铛,像睡著了一般饲趋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撤蟆,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天奕塑,我揣著相機(jī)與錄音,去河邊找鬼家肯。 笑死龄砰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讨衣。 我是一名探鬼主播换棚,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼值依!你這毒婦竟也來(lái)了圃泡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愿险,失蹤者是張志新(化名)和其女友劉穎颇蜡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辆亏,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡风秤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扮叨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缤弦。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彻磁,靈堂內(nèi)的尸體忽然破棺而出碍沐,到底是詐尸還是另有隱情,我是刑警寧澤衷蜓,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布累提,位于F島的核電站,受9級(jí)特大地震影響磁浇,放射性物質(zhì)發(fā)生泄漏斋陪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望无虚。 院中可真熱鬧缔赠,春花似錦、人聲如沸友题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咆爽。三九已至梁棠,卻和暖如春置森,著一層夾襖步出監(jiān)牢的瞬間斗埂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工凫海, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呛凶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓行贪,卻偏偏與公主長(zhǎng)得像漾稀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子建瘫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容