NoSQL 簡介
- NoSQL,全名為 Not Only SQL,指的是非關(guān)系型的數(shù)據(jù)庫。
- 隨著訪問量的上升,網(wǎng)站的數(shù)據(jù)庫性能出現(xiàn)了問題,于是 nosql 被設(shè)計出來。
優(yōu)缺點
- 優(yōu)點:
(1) 高可擴展性
(2) 分布式計算
(3) 低成本
(4) 架構(gòu)的靈活性,半結(jié)構(gòu)化數(shù)據(jù)
(5) 沒有復雜的關(guān)系
- 缺點:
(1) 沒有標準化
(2) 有限的查詢功能(到目前為止)
(3) 程序不直觀
分類
| 類型 | 部分代表 | 特點 |
|---|---|---|
| 列存儲 | Hbase, Cassandra, Hypertable | 顧名思義,是按列存儲數(shù)據(jù)的。最大的特點是方便存儲結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),方便做數(shù)據(jù)壓縮,對針對某一列或者某幾列的查詢有非常大的的 IO 優(yōu)勢。 |
| 文檔存儲 | MongoDB,CouchDB | 文檔存儲一般用類似 json 的格式存儲,存儲的內(nèi)容是文檔型的。這樣也就有機會對某些字段建立索引,實現(xiàn)關(guān)系數(shù)據(jù)庫的某些功能 |
| key-value 存儲 | Tokyo Cabinet / Tyrant , Berkeley DB, MemcacheDB, Redis | 可以通過 key 快速查詢到其 value。一般來說,存儲不管 value 的格式,照單全收。(Redis 包含了其他功能) |
| 圖存儲 | Neo4J | 圖形關(guān)系的最佳存儲。使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫來解決的話性能低下,而且設(shè)計使用不方便 |
| 對象存儲 | db4o, Versant | 通過類似面向?qū)ο笳Z言的語法操作數(shù)據(jù)庫,通過對象的方式存儲數(shù)據(jù) |
| xml數(shù)據(jù)庫 | Berkeley DB XML, BaseX | 高效的存儲XML數(shù)據(jù)庫,并支持 XML 的內(nèi)部查詢語法,比如 XQuery, XPath |
MongoDB 簡介
- MongoDB 是一個基于分布式文件存儲的 NoSQL 數(shù)據(jù)庫
- 由 C++ 語言編寫,運行穩(wěn)定,性能高
- 旨在為 Web 應(yīng)用提供可擴展性的高性能數(shù)據(jù)存儲解決方案
MongoDB 特點
- 模式自由,可以把不同結(jié)構(gòu)的文檔存儲在同一個數(shù)據(jù)庫里
- 面向集合的存儲:適合存儲 JSON 風格文件的形式
- 完整的索引支持:對任何屬性可索引
- 復制和高可用性:支持服務(wù)器之間的數(shù)據(jù)復制,支持 主-從 模式及服務(wù)器之間的相互復制。復制的主要目的是提供冗余及自動故障轉(zhuǎn)移
- 自動分片:支持云級別的伸縮性:自動分片功能支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機器
- 豐富的查詢:支持豐富的查詢表達方式。查詢指令使用 JSON 形式的標記,可輕易查詢文檔中的內(nèi)嵌的對象及數(shù)組
- 快速就地更新:查詢優(yōu)化器會分析查詢表達式,并生成一個高效的查詢計劃
- 高效的傳統(tǒng)存儲方式:支持二進制數(shù)據(jù)及大型對象(如照片或圖片)
基本操作
- MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值 (key=>value) 對組成。
- MongoDB 文檔類似于 JSON 對象,字段值可以包含其他文檔、數(shù)組、文檔數(shù)組
- 安裝管理 mongodb 環(huán)境
- 完成數(shù)據(jù)庫、集合的管理
- 數(shù)據(jù)的增加、修改、刪除、查詢
名詞
| 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 字段設(shè)置為主鍵 |
- 三元素:數(shù)據(jù)庫、集合、文檔
集合就是關(guān)系型數(shù)據(jù)庫中的表
文檔對應(yīng)著關(guān)系數(shù)據(jù)庫中的行
- 文檔,就是一個對象,由鍵值對構(gòu)成,是 json 的擴展 Bson 形式。
{'name':'JayChou', 'gender':'男'}
- 集合:類似于關(guān)系型數(shù)據(jù)庫中的表,存儲多個文檔,結(jié)構(gòu)不固定,如可以存儲如下文檔在一個集合中
{'name':'guojing', 'gender':'男'}
{'name':'huangrong', 'age':18}
{'book':'shuihuzhuan', 'heros':108}
- 數(shù)據(jù)庫:是一個集合的物理容器,一個數(shù)據(jù)庫中可以包含多個文檔
- 一個服務(wù)器通常有多個數(shù)據(jù)庫
服務(wù)端 - mongod
- 配置文件在 /etc/mongod.conf
- 默認端口是 27017
- 啟動:
sudo service mongod start - 停止:
sudo service mongod stop - 重啟:
sudo service mongod restart
客戶端 - mongo
- mongo 這個 shell 就是 mongodb 的客戶端,同時也是一個 js 編譯器
mongo
- 命令
db - 查看當前數(shù)據(jù)庫名稱
db.stats() - 查看當前數(shù)據(jù)庫信息
- 終端退出連接
exit 或 Ctrl+C
- GUI 客戶端:robomongo

image.png