標籤:mongodb 入門 雜談 mongodb叢集 讀寫分離
Mongodb雜談(一)
開始學習mongodb時,找一些中文部落格看。後來發現很多知識都搜不到,最後還是看官方網站和權威指南,還是這兩者靠譜,閑的時候可以多瀏覽一下。此文總結一下我入門學習mongodb的經驗。
Mongo shell操作mongodb
安裝完mongodb用戶端後,通過shelll來操作mongodb。我是在Ubuntu使用用戶端的,直接用apt-get來安裝,比較簡單。
方法1互動式(類似mysql)
串連格式mongo host:port/dbName –u userName –p password
[email protected]:~/data/test4$ mongo localhost:9019/admin–u linger –p 123123
show dbs;
show tables;
方法2指令碼式
mongo –nodb 進入mongo解譯器
> Master=new Mongo("localhost:9019")
connection to localhost:9019
> Mdb=Master.getDB("admin")
admin
> Mdb.auth("linger ","123123")
1
> Mdb.getCollectionNames()
[ "admin","system.indexes", "system.users", "test" ]
下面的串連方法也是可以的
Mdb =connect("localhost:9019/admin","linger ","123123")
方法3檔案指令碼式
mongo < test.js
test.js檔案內容
Master=new Mongo("localhost:9019")
Mdb=Master.getDB("admin")
Mdb.auth("linger","123123")
Mdb.getCollectionNames()
這裡用了輸入重新導向的方法。
官網還介紹了一個執行js的方法,
mongo localhost:27017/test myjsfile.js
但是我感覺這樣不夠靈活,因為串連的主機ip和連接埠還有dbName寫在命令裡面。
互動方法,更像操作mysql那樣。
指令碼式的方法,更像程式設計語言那樣。
互動式和指令碼式一些命令的對照
http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/#mongo-shell-new-connections
簡單談談增刪改讀
mongodb以json格式處理資料的,
比如插入資料
db.testTable.insert({user:”linger”,”age”,”24”})
查詢資料
db.testData.find({user:"linger"})
關於增刪改讀的詳細資料可以參考一下資料
增刪改讀教程
http://docs.mongodb.org/manual/applications/crud/
增刪改讀API參考手冊
http://docs.mongodb.org/manual/reference/method/
應用開發中mongodb的使用
Shell的方式操作mongodb,我覺得主要是管理mongodb的,這種方式做不了應用開發。
做應用開發時,我們得需要某種程式設計語言,然後通過mongodb的驅動來調用mongodb相關介面。
官網對驅動的描述是這樣子的
An application communicates with MongoDB by wayof a client library, called a driver, that handles all interaction with the database in alanguage appropriate to the application.
http://docs.mongodb.org/manual/applications/drivers/
簡單來說就是,應用通過驅動跟mongodb互動。
驅動有官方提供的,也有第三方自己開發的。
下面這張圖是各語言對應的驅動
網上意外發現雲風大哥竟然自己開發了一套lua驅動。開始他想在C Drive做一層封裝,給lua調用,後來又從協議層實現了一份。我簡單瀏覽了一下代碼,協議層是用C寫的,直接調用windows socket與server通訊,封裝好最基本的api,然後lua再調用C封裝成各種功能。
下面這段話來自他部落格
我曾經想在 C Driver 的基礎上做封裝。做的過程中發現 c driver 代碼品質不高,且特性支援不完整,最終我考慮自己從協議層開始重新做一份。
mongo 的文檔不算完整,我感覺協議定義也不是很嚴謹。所以在實現過程中遇到許多麻煩。原本認為一天能寫完的,結果做了三天。今天終於發行就緒一個初步的版本了。
MongoDB 的 Lua Driver
http://blog.codingnow.com/2013/06/mongodb_lua_driver.html
http://blog.codingnow.com/2013/06/lua_mongo.html
https://github.com/cloudwu/lua-mongo
可以將mongodb當做hadoop的輸入輸出
MongoDB Connector for Hadoop
The MongoDB Connector for Hadoop is aplugin for Hadoop
that provides the ability to use MongoDB asan input source and/or an output destination.
http://docs.mongodb.org/ecosystem/tools/hadoop/
關於主從分離
Mongodb可以做主從的叢集,主叫primary或者master,從叫secondary或者slave。
值得注意的是secondary預設是不可讀寫的。
當時我串連了一台secondary,想查但是出錯了。
Wed Dec 24 18:50:04.670 error: {"$err" : "not master and slaveOk=false", "code" :13435 } at src/mongo/shell/query.js:128
有兩種方法實現從機的查詢:
第一種方法:db.getMongo().setSlaveOk();
第二種方法:rs.slaveOk();
對於replica set 中的secondary 節點預設是不可讀的。
在寫多讀少的應用中,使用Replica Sets來實現讀寫分離。
通過在串連時指定或者在主庫指定slaveOk,
由Secondary來分擔讀的壓力,
Primary只承擔寫操作。
http://wengzhijuan12.blog.163.com/blog/static/3622414520137104257376/
讓mongodb的secondary支援讀操作
Replication is the process of synchronizingdata across multiple servers.http://docs.mongodb.org/manual/core/replication-introduction/
Replication用來同步各server資料,可以用來做主從分離。
關於Sharding
Sharding is a method for storing data acrossmultiple machines. MongoDB uses sharding to support deployments with very largedata sets and high throughput operations.
http://docs.mongodb.org/manual/core/sharding-introduction/
簡單來說,就是Sharding是在多台機器儲存資料,起擴容的作用。
關於使用者權限
管理員身份新添加的db,
管理員身份也是直接登入不了的,
得先登入到其他db,
再用use命令來切換到剛才的添加db。
如果想直接登入,要額外添加使用者並授權。
因此,我覺得使用者和密碼是對具體的一個db來說的,而不是對mongodb來說的。
給資料庫recsys添加一個使用者linger,並添加讀寫權限。
db.addUser({user:"linger",pwd:"09388296",roles:["readWrite"]})
此處參考
http://docs.mongodb.org/manual/reference/method/db.addUser/#db.addUser
額外參考資料:
MongoDB Scripting
http://docs.mongodb.org/manual/administration/scripting/
本文連結:http://blog.csdn.net/lingerlanlan/article/details/42150611
本文linger
Mongodb雜談(一)