2019年1月16日 星期三

MongoDB 學習筆記 (一) : 在 Win10 上安裝 MongoDB

MongoDB 是以 Javascript 當作腳本語言且以 JSON 儲存資料 (嚴格來說是 Binary JSON) 的 NoSQL 資料庫, 為 10gen 團隊於 2007 年開始發展, 與 Node.js 搭配使用非常方便 (資料不須轉換直接交換). 它支援 Map/Reduce 功能, 可用於大數據資料處理. 除了在操作時使用 Javascript 讀寫資料庫, 還支援伺服端 Javascript 腳本, 相當於傳統關聯式資料庫的預儲程式功能.

NoSQL 資料庫概念始於 1998 年, 原先是指一種不同於傳統關聯式, 不提供 SQL 功能的資料庫, 但目前已被重新定義為 Not Only SQL, 意指無綱要 (Schemaless), 分散式, 非關聯式, 不提供 ACID 特性的資料庫. 所謂 ACID 是指 :
  1. 最小性 (Atomicity)
  2. 一致性 (Consistency)
  3. 隔離性 (Isolation)
  4. 持久性 (Durability)
NoSQL 資料庫實作方式大致可分成如下四類, MongoDB 屬於其中的文件導向式資料庫 :

 NoSQL 資料庫種類 說明
 文件導向式 (Document) MongoDB (Sourceforge), CouchDB, RavenDB
 鍵值式 (Key-Value) Redis (Flickr), Memcached, Dynamo (Amazon)
 欄式 (Column) Cassandra (Facebook), BigTable (Google), HBase, Hadoop
 圖形式 (Graph) Neo4J, GraphDB FlockDB (Twitter)

文件導向式資料庫將資料以集合 (Collections) 的方式儲存 (相當於資料表), 每個集合包含多筆文件 (Document, 相當於列或紀錄), 而每筆文件為 Web 結構化資料 (XML 或 JSON), 例如 MongoDB 採用的是 JSON 格式, 適用於儲存 Web 資訊. 鍵值資料庫設計理念來自資料結構裡的雜湊表 (Hash table), 在 Key 與 Value 之見建立映射關係來儲存資料, 適用於大數據之高速存取. 其資料以桶 (Bucket) 儲存, 相當於資料表, 桶裡面存放著鍵值對. 欄式資料庫將同一欄的資料儲存在一起, 適用於分散式檔案系統. 而圖形式資料庫採用 Graph 結構來儲存資料, 適用於社交網路與推薦系統等與關係圖譜有關之系統.

我在市圖借到下面這本 mongoDB 的書, 以下按照其說明進行安裝.

# 7 天學會大數據資料處理 NoSQL-MongoDB 入門與活用


Source : 博客來

1. 下載 MongoDB :

https://www.mongodb.com/download-center?initial=true#enterprise




預設為下載 msi 安裝檔, 我改為免安裝的 zip 檔 (約  290 MB),

mongodb-win32-x86_64-enterprise-windows-64-4.0.5.zip

先在 C 碟下建立一個空的 MongoDB 資料夾, 然後將解壓縮後的目錄改為簡短的 mongodb 資料夾 (約 1 GB) 搬移到 C:\MongoDB 下面, 結構如下 :




2. 將 MongoDB 的 bin 資料夾加入環境變數 Path 中 :

然後在 "控制台/系統/進階系統設定/環境變數" 中新增 MongoDB 的 bin :

C:\MongoDB\mongodb\bin




3. 建立相關目錄與系統設定檔 :

在 C:\MongoDB 下建立如下目錄 :

C:\MongoDB\data\db
C:\MongoDB\data\backup
C:\MongoDB\log

然後建立一個 mongod.cfg 檔案, 這是啟動 MongoDB 服務時必須設定的參數組態文件, 用來指定 db 與 log 目錄, 檔案內容如下 :

dbpath=C:\MongoDB\data\db
logpath=C:\MongoDB\log\mongod.log




4. 啟動 MongoDB 服務 : 

以系統管理員身分開啟命令提示字元視窗, 並輸入如下指令 :

mongod --config "C:\MongoDB\mongod.cfg" -install

C:\WINDOWS\system32>mongod --config "C:\MongoDB\mongod.cfg" -install
2019-01-16T23:06:21.132+0800 I CONTROL  [main] log file "C:\MongoDB\log\mongod.log" exists; moved to "C:\MongoDB\log\mongod.log.2019-01-16T15-06-21".

C:\WINDOWS\system32>

這時若在檔案總管的 "本機" 按滑鼠右鍵, 選 "管理/服務" 就可看到 MongoDB 服務已啟動, 電腦重開機也會自動開啟此服務, 不須再手動啟動.




於命令提示字元視窗輸入如下指令 :

net start MongoDB

C:\WINDOWS\system32>net start MongoDB
MongoDB 服務正在啟動 ..
MongoDB 服務已經啟動成功。


C:\WINDOWS\system32>

這時服務視窗會顯示 MongoDB 目前狀態為執行中 :




執行 mongo 進入 MongoDB 指令介面 :

C:\WINDOWS\system32>mongo
MongoDB shell version v4.0.5
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("55c54591-173e-4213-9721-a1d0353da01e") }
MongoDB server version: 4.0.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten]
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten]
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten]
MongoDB Enterprise >         (已進入 MongoDB Shell)

可見不帶參數直接輸入 mongo 預設會連線 localhost 的 27017 埠.

MongoDB Enterprise > help 
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce

        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use         db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell

此 Shell 介面是全功能的 Javascript 直譯器, 可執行 Javascript 程式碼與標準函數. MongodDB 是無綱要 (Schemaless) 資料庫, 基本資料結構是 field:value 組成的 JSON 格式文件 (document), 相當於關聯式資料庫中的一列紀錄

MongoDB 與 SQL 的術語對應如下 :

 MongoDB 術語 SQL 術語
 database 資料庫 database 資料庫
 collection 集合 table 資料表
 document 文件 row 列/紀錄
 field 欄位 column 行/欄


選擇資料庫 :

MongoDB Enterprise > use test
switched to db test

參考 :

MongoDB 基礎入門教學:MongoDB Shell 篇

[Database][MongoDB] 新增、修改、查詢、刪除操作 1 ( CRUD operation 1 )
https://docs.mongodb.com/manual/reference/program/mongo/

沒有留言 :