今天寫寫 MongoDB的事情。這貨是一個document-orientied, 基本上使用的json進行互動的。他把那個形式很像json的東西叫做 BJSON. 裡面有一些mongoDB自己定義的資料類型。這種資料形式在傳輸儲存很方便。
首先介紹一下MongoDB的資料結構
database : 這個和mysql中的database一致。 預設使用的local, 可以自己建立新的。例如 在shell中寫 db.xxx 然後就自動建立了xxx 這個collection
collection: 這個概念和mysql中的table保持一致。
document: 這個和mysql裡的row或者 record保持一致。
這個是MongoDB的三個最主要的結構。
下面是如何使用。
下載安裝
首先去 www.mongoDB.org 上下載一個mongoDB的最新版。然後解壓到某個目錄。然後使用命令列進入到該目錄下。
建立 資料存放區檔案夾,這裡可以直接建立一個 /data/db的檔案夾(mkdir -p /data/db)。然後在命令列裡執行如下命令啟動mongodb server.
mongod --dbpath ./data/db
這樣mongoDB就啟動了,一般連接埠為 27017. 你可以使用help來修改Port等。這裡就不過多介紹。
然後重新開一個命令視窗,使用命令進入到該目錄下,執行下面語句啟動mongoDB client.
mongo
如果使用的都是預設連接埠,這裡就可以正常啟動了。如果你修改了mongoDB server的連接埠,這裡需要改成一致的。
資料庫CRUD(Create, Retrieve, Update, Delete)操作
下面就是命令列選擇database, 建立collection, 儲存document。首先:
db查看需要現有的database.show dbs使用ooo作為databaseuse ooo;如果這裡不寫use ooo,那預設就是local.
然後是資料庫的操作了:
1. 插入
var a = {"value":1,"value2":['a','b']}var b = {"value":2}var c = {"str":‘aaa’}插入資料,xxxx是collectiondb.xxxx.save(a);下面也是插入資料db.xxxx.insert(b);db.xxxx.insert(c);
2. 查看資料
擷取全部資料db.xxxx.find()擷取一個資料db.xxxx.findOne()查詢特定的記錄db.xxxx.find({"value":1})
3.更新操作
db.xxxx.update( { value: { $lt: 18 } }, { $set: { status: "A" } }, { multi: true })這裡 { value: { $lt: 18 } },是說 value < 18, { $set: { status: "A" } },是說要set status 為A, 如果沒有那個域,則建立出來。{ multi: true } 則是處理多個。
4. 刪除操作
db.xxxx.remove({"value":1})刪除value 為1 的document.
這裡看起來非常簡單。
結束語
MongoDB的強大之處在於 JSON串裡想寫什麼就可以寫什麼。 相同的collection中document可以完全不相同。(但是為了後期的維護,還是盡量相同。)這是稀疏資料庫的一大優勢。
建索引MongoDB有很多種,可以建立unique 索引, TTL 索引(資料會到期失效,預設為此索引), 多列複合式索引,空間索引,全文索引和hash索引。這裡的多列索引和mysql的一致。對於全文索引,mongoDB建議不要在生產環境(線上環境)中使用,因為這個建索引很慢,性價比不高。
對於mongoDB來說,他的索引可以使用{"backgroup":true}來進行後台非同步建立,也可以使用前台索引。但是前台索引會對效能造成極大的影響,所以mongoDB官方文檔建議新起一個mongoDB server的執行個體進行建立。然後使用副本啟動的方法將建立好的索引作為副本啟動。
對於mongoDB,安全性做的比較粗略。也是對於操作,對於database等特殊資料需要分配許可權。因為沒有視圖等概念,這些安全性做的比mysql來說粒度大了一些。但是mongoDB支援SSL 方式訪問,也支援kerberos認證。不過Kerberos認證現在只有微軟那邊在用,之前K3,K4被破,人心惶惶。現在不知道情況如何。
今天就先介紹這麼多吧。