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方法森缠。