Spring學習筆記 - 第014天

MongoDB

MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫哥纫。由 C++ 語言編寫诲锹。旨在為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案。
MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品竹揍,是非關(guān)系數(shù)據(jù)庫當中功能最豐富太惠,最像關(guān)系數(shù)據(jù)庫的。

1.關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則

事務在英文中是transaction级遭,和現(xiàn)實世界中的交易很類似望拖,它有如下四個特性:
1、A (Atomicity) 原子性
原子性很容易理解挫鸽,也就是說事務里的所有操作要么全部做完说敏,要么都不做,事務成功的條件是事務里的所有操作都成功丢郊,只要有一個操作失敗盔沫,整個事務就失敗医咨,需要回滾。
比如銀行轉(zhuǎn)賬架诞,從A賬戶轉(zhuǎn)100元至B賬戶拟淮,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶谴忧。這兩步要么一起完成很泊,要么一起不完成,如果只完成第一步俏蛮,第二步失敗撑蚌,錢會莫名其妙少了100元。
2搏屑、C (Consistency) 一致性
一致性也比較容易理解争涌,也就是說數(shù)據(jù)庫要一直處于一致的狀態(tài),事務的運行不會改變數(shù)據(jù)庫原本的一致性約束辣恋。
例如現(xiàn)有完整性約束a+b=10亮垫,如果一個事務改變了a,那么必須得改變b伟骨,使得事務結(jié)束后依然滿足a+b=10饮潦,否則事務失敗。
3携狭、I (Isolation) 獨立性
所謂的獨立性是指并發(fā)的事務之間不會互相影響继蜡,如果一個事務要訪問的數(shù)據(jù)正在被另外一個事務修改,只要另外一個事務未提交逛腿,它所訪問的數(shù)據(jù)就不受未提交事務的影響稀并。
比如現(xiàn)有有個交易是從A賬戶轉(zhuǎn)100元至B賬戶,在這個交易還未完成的情況下单默,如果此時B查詢自己的賬戶碘举,是看不到新增加的100元的。
4搁廓、D (Durability) 持久性
持久性是指一旦事務提交后引颈,它所做的修改將會永久的保存在數(shù)據(jù)庫上,即使出現(xiàn)宕機也不會丟失境蜕。

2.NoSQL 簡介

NoSQL(NoSQL = Not Only SQL )蝙场,意即"不僅僅是SQL"。

2.1什么是NoSQL?

NoSQL粱年,指的是非關(guān)系型的數(shù)據(jù)庫售滤。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱逼泣。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲趴泌。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定的模式拉庶,無需多余操作就可以橫向擴展嗜憔。

2.2為什么使用NoSQL ?

今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數(shù)據(jù)。用戶的個人信息氏仗,社交網(wǎng)絡吉捶,地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加皆尔。我們?nèi)绻獙@些用戶數(shù)據(jù)進行挖掘呐舔,那SQL數(shù)據(jù)庫已經(jīng)不適合這些應用了, NoSQL數(shù)據(jù)庫的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。

2.3NoSQL的優(yōu)點/缺點

優(yōu)點:

  • 高可擴展性
  • 分布式計算
  • 低成本
  • 架構(gòu)的靈活性慷蠕,半結(jié)構(gòu)化數(shù)據(jù)
  • 沒有復雜的關(guān)系

缺點:

  • 沒有標準化
  • 有限的查詢功能(到目前為止)
  • 最終一致是不直觀的程序

3.什么是MongoDB

MongoDB 是由C++語言編寫的珊拼,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
在高負載的情況下流炕,添加更多的節(jié)點澎现,可以保證服務器性能。
MongoDB 旨在為WEB應用提供可擴展的高性能數(shù)據(jù)存儲解決方案每辟。
MongoDB 將數(shù)據(jù)存儲為一個文檔剑辫,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象渠欺。字段值可以包含其他文檔妹蔽,數(shù)組及文檔數(shù)組。


4.MongoDB 概念解析

不管我們學習什么數(shù)據(jù)庫都應該學習其中的基礎概念挠将,在mongodb中基本的概念是文檔胳岂、集合、數(shù)據(jù)庫捐名,下面我們挨個介紹旦万。
下表將幫助您更容易理解Mongo中的一些概念:

SQL術(shù)語/概念|MongoDB術(shù)語/概念|解釋/說明
:--:|:--:
database|database|數(shù)據(jù)庫
table|collection|數(shù)據(jù)庫表/集合
row|document|數(shù)據(jù)記錄行/文檔
column|field|數(shù)據(jù)字段/域
index|index|索引
table joins||表連接,MongoDB不支持
primary key|primary key|主鍵,MongoDB自動將_id字段設置為主鍵

通過下圖實例,我們也可以更直觀的的了解Mongo中的一些概念:


5.常用命令

mongod -version
mongod --dbpath c:/data
mongo
show dbs
use ssm
db
db.dropDatabase()
db.student.insert({name:"kygo", age:22, tel:18908421424})
db.student.find()

Spring整合MongoDB

1.添加jar包(maven管理)

spring-data-mongodb

2.配置applicationContext.xml

    <mongo:repositories base-package="com.kygo.ssm.dao" />

這個命名空間元素將導致基礎軟件包镶蹋,以延長接口進行掃描MongoRepository成艘,并為他們每個人找到創(chuàng)建的Spring beans。
默認情況下贺归,存儲庫將獲得MongoTemplate的Spring bean有線那個叫mongoTemplate淆两,所以你只需要配置mongo-template-ref,如果你從這個約定偏離明確拂酣。

    <mongo:mongo host="127.0.0.1" port="27017" />

Mongo是入口點的MongoDB驅(qū)動程序API秋冰,連接到特定的MongoDB數(shù)據(jù)庫實例需要額外的信息,如數(shù)據(jù)庫名和一個可選的用戶名和密碼婶熬。使用該信息剑勾,您可以獲取一個com.mongodb.DB對象并訪問特定MongoDB數(shù)據(jù)庫實例的所有功能埃撵。

    <mongo:db-factory dbname="ssm" mongo-ref="mongo" />
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
      <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>

該類MongoTemplate位于包org.springframework.data.mongodb.core,是中央級的Spring的MongoDB的支持虽另,提供了豐富的功能設置為與數(shù)據(jù)庫進行交互暂刘。該模板提供了方便的操作來創(chuàng)建,更新捂刺,刪除和查詢MongoDB文檔谣拣,并提供域?qū)ο蠛蚆ongoDB文檔之間的映射。

3.例子:學生實體

@Document
public class Student {
    private String name;
    private int age;
    private String tel;
}

4.dao層

public interface StudentDao extends MongoRepository<Student, String> {
}

繼承 MongoRepository接口族展,有許多默認的crud方法森缠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仪缸,隨后出現(xiàn)的幾起案子贵涵,更是在濱河造成了極大的恐慌,老刑警劉巖恰画,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件独悴,死亡現(xiàn)場離奇詭異,居然都是意外死亡锣尉,警方通過查閱死者的電腦和手機刻炒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自沧,“玉大人坟奥,你說我怎么就攤上這事∧聪幔” “怎么了爱谁?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孝偎。 經(jīng)常有香客問我访敌,道長,這世上最難降的妖魔是什么衣盾? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任寺旺,我火速辦了婚禮,結(jié)果婚禮上势决,老公的妹妹穿的比我還像新娘阻塑。我一直安慰自己,他們只是感情好果复,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布陈莽。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪走搁。 梳的紋絲不亂的頭發(fā)上独柑,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音私植,去河邊找鬼群嗤。 笑死,一個胖子當著我的面吹牛兵琳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骇径,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼躯肌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了破衔?” 一聲冷哼從身側(cè)響起清女,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晰筛,沒想到半個月后嫡丙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡读第,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年曙博,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜瞒。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡父泳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吴汪,到底是詐尸還是另有隱情惠窄,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布漾橙,位于F島的核電站杆融,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霜运。R本人自食惡果不足惜脾歇,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淘捡。 院中可真熱鬧介劫,春花似錦、人聲如沸案淋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至誉碴,卻和暖如春宦棺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黔帕。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工代咸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人成黄。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓呐芥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奋岁。 傳聞我的和親對象是個殘疾皇子思瘟,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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