數(shù)據(jù)庫簡介
數(shù)據(jù)庫簡單而言就是一個存放數(shù)據(jù)的倉庫蝇裤。這個倉庫是按照一定的數(shù)據(jù)結(jié)構來組織践付、存儲的秦士,我們可以通過數(shù)據(jù)庫提供的多種方式來管理數(shù)據(jù)庫里的數(shù)據(jù)。
數(shù)據(jù)庫歷史悠久永高,分類繁多隧土,功能各異。目前來看命爬,大體可以分為兩類:關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫曹傀。
關系型數(shù)據(jù)庫
關系型數(shù)據(jù)庫模型是把復雜的數(shù)據(jù)結(jié)構歸結(jié)為簡單的二元關系,即二維表格形式:有行和列的概念饲宛。在關系數(shù)據(jù)庫中皆愉,對數(shù)據(jù)的操作幾乎全部建立在一個或多個關系表格上,通過對這些關聯(lián)表的表格分類艇抠、合并幕庐、連接或選取等運算來實現(xiàn)數(shù)據(jù)的管理。
其中的典型代表就是 MySQL 和 Oracle 练链,后者所屬的美國甲骨文軟件系統(tǒng)公司每年憑借該產(chǎn)品可創(chuàng)造數(shù)百億美元的市場價值翔脱。
非關系型數(shù)據(jù)庫
非關系型數(shù)據(jù)庫也被稱為 NoSQL 數(shù)據(jù)庫。NoSQL 的本意是 Not Only SQL 媒鼓,意為 “不僅僅是 SQL” 届吁,并非 “不是 SQL” 错妖。因此,NoSQL 的產(chǎn)生并不是要與關系型數(shù)據(jù)庫對立疚沐,而是作為傳統(tǒng)關系型數(shù)據(jù)庫的一個補充暂氯。NoSQL 數(shù)據(jù)庫在特定的場景下可以發(fā)揮出難以想象的高效率和高性能。
相比關系型數(shù)據(jù)庫亮蛔,NoSQL 存儲數(shù)據(jù)時不支持太多約束痴施,且各個文檔集合之間沒有緊密聯(lián)系,尤其擅長超大規(guī)模數(shù)據(jù)的存儲究流。
隨著互聯(lián)網(wǎng) Web2.0 動態(tài)網(wǎng)站的興起辣吃,傳統(tǒng)的關系型數(shù)據(jù)庫在應付規(guī)模日益擴大的海量數(shù)據(jù)時會顯得力不從心,暴露了很多難以克服的問題芬探,傳統(tǒng)的關系型數(shù)據(jù)庫 IO 瓶頸神得、性能瓶頸都難以有效突破。于是開始出現(xiàn)了大批針對特定場景偷仿、以高性能和使用便利為目的的功能特異化的數(shù)據(jù)庫產(chǎn)品哩簿。NoSQL 數(shù)據(jù)庫就是在這樣的情景中誕生并得到了非常迅速的發(fā)展。NoSQL 不將數(shù)據(jù)的一致性作為重點酝静,或者是作為次重點节榜。
我們的課程要講解的就是非關系型數(shù)據(jù)庫的典型代表 MongoDB 數(shù)據(jù)庫。
MongoDB 簡介
MongoDB 是由 C++ 語言編寫的别智,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)宗苍。在高負載的情況下,添加更多的節(jié)點可以保證服務器性能亿遂。MongoDB 旨在為 Web 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案浓若。
MongoDB 將數(shù)據(jù)存儲為一個文檔,數(shù)據(jù)結(jié)構由 Key-Value 鍵值對組成蛇数。MongoDB 文檔類似于 JSON 對象,字段值可以包含其它文檔是越、數(shù)組耳舅,如下圖所示:
其中的 Value 支持多種數(shù)據(jù)類型,包括 Double 倚评、String 浦徊、Object 、Array 天梧、Date 等等盔性。
MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的數(shù)據(jù)存儲工具,是非關系數(shù)據(jù)庫當中功能最豐富呢岗、最像關系型數(shù)據(jù)庫的冕香。它支持的數(shù)據(jù)結(jié)構非常松散蛹尝,是類似 json 的 bson 格式,因此可以存儲比較復雜的數(shù)據(jù)類型悉尾。MongoDB 最大的特點是支持的查詢語言非常強大突那,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關系數(shù)據(jù)庫單表查詢的絕大部分功能构眯,而且還支持對數(shù)據(jù)建立索引愕难。MongoDB 是一個面向文檔集合的、模式自由的非關系型數(shù)據(jù)庫惫霸。
特點和適用場景
MongoDB 的主要特點如下:
是一個面向文檔存儲的數(shù)據(jù)庫猫缭,操作起來比較簡單和容易。
支持設置任何屬性的索引以實現(xiàn)更快的排序和查詢操作壹店。
可以通過本地或者網(wǎng)絡創(chuàng)建數(shù)據(jù)鏡像猜丹,這使得 MongoDB 有更強的擴展性。
分布式設計茫打,支持增加節(jié)點以提升存儲空間居触。
支持豐富的查詢表達式,查詢指令使用 JSON 形式的標記老赤,可輕易查詢文檔中內(nèi)嵌的對象及數(shù)組轮洋。
Map/Reduce 用來對數(shù)據(jù)進行批量處理和聚合操作。
GridFS 用于存放大量小文件抬旺。
允許在服務端執(zhí)行腳本弊予,可以用 Javascript 編寫某個函數(shù),直接在服務端執(zhí)行开财,也可以把函數(shù)的定義存儲在服務端汉柒,下次直接調(diào)用即可。
支持 Ruby 责鳍、Python 碾褂、Java 、C++ 历葛、PHP 正塌、C# 等多種編程語言。
MongoDB 的使用場景:
網(wǎng)站數(shù)據(jù):MongoDB 非常適合實時的插入恤溶、更新與查詢數(shù)據(jù)乓诽,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復制及高度伸縮性。
緩存:由于性能很高咒程,MongoDB 也適合作為信息基礎設施的緩存層鸠天。在系統(tǒng)重啟之前,由 MongoDB 搭建的持久化緩存層可以避免下層的數(shù)據(jù)源過載帐姻。
大尺寸稠集,低價值的數(shù)據(jù):使用傳統(tǒng)的關系型數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較昂貴奶段,在此之前,很多時候程序員往往會選擇傳統(tǒng)的文件進行存儲巍杈。
高伸縮性的場景:MongoDB 非常適合由數(shù)十或數(shù)百臺服務器組成的數(shù)據(jù)庫忧饭。MongoDB 的路線圖中已經(jīng)包含對 MapReduce 引擎的內(nèi)置支持。
用于對象及 JSON 數(shù)據(jù)的存儲:MongoDB 的 BSON 數(shù)據(jù)格式非常適合文檔化格式的存儲及查詢筷畦。
安裝 MongoDB
MongoDB 數(shù)據(jù)庫在 2007 年 10 月由 10gen 團隊所創(chuàng)建词裤,在 2009 年 2 月首度推出。其中 10gen 是專門創(chuàng)建和維護 MongoDB 數(shù)據(jù)庫的著名團隊鳖宾。
截止 2020 年 2 月吼砂,最新的版本是 MongoDB4.2 ,可以根據(jù)自己所使用的操作系統(tǒng)在官網(wǎng)上安裝最新版本鼎文。官方下載地址:https://docs.mongodb.com/manual/administration/install-community/ 渔肩。
在我們的實驗環(huán)境中已經(jīng)安裝了比較領先的 MongoDB4.0 版本,無需升級即可學習本課程拇惋。
打開實驗環(huán)境周偎,在終端命令行執(zhí)行 which mongo 命令可以找到它的可執(zhí)行文件的絕對路徑,這也證明了實驗環(huán)境中已經(jīng)安裝 MongoDB :
shiyanlou:project/ $ cd
shiyanlou:~/ $ which mongo
/usr/bin/mongo
shiyanlou:~/ $
執(zhí)行 mongo --version 命令查看版本:
shiyanlou:~/ $ mongo --version
MongoDB shell version v4.0.12
git version: 5776e3cbf9e7afe86e6b29e22520ffb6766e95d4
OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
allocator: tcmalloc
modules: none
build environment:
distmod: ubuntu1604
distarch: x86_64
target_arch: x86_64
shiyanlou:~/ $
啟動 MongoDB 服務
執(zhí)行如下命令查看服務狀態(tài)和啟動服務:
$ sudo service mongodb status # 查看服務狀態(tài)
$ sudo service mongodb start # 啟動服務
操作截圖如下:
啟動服務成功撑帖,終端執(zhí)行 mongo 命令即可進入交互式客戶端:
查看數(shù)據(jù)庫
在交互客戶端中可以查看已有的數(shù)據(jù)庫蓉坎,執(zhí)行 show databases 命令:
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB
>
如上所示,這是 MongoDB 自帶的三個關于配置信息和權限管理的數(shù)據(jù)庫胡嘿,不要輕易修改或刪除它們蛉艾。打印信息有兩列,第一列為數(shù)據(jù)庫名字衷敌,第二列為數(shù)據(jù)庫占用的存儲空間勿侯。
查看數(shù)據(jù)庫的命令可以簡寫為 show dbs :
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>