天天看點

(轉載)六 MongoDB的連接配接

MongoDB是一個資料庫伺服器,在等待用戶端連接配接的時候,可以以前台或背景方式運作。當你啟動MongoDB後,可以看到如下輸出:

~/$ ./mongod 
# 
# some logging output 
# 
Tue Mar 9 11:15:43 waiting for connections on port 27017 
Tue Mar 9 11:15:43 web admin interface listening on port 28017 
      

輸出将停在這裡,并等待用戶端連接配接到27017端口。一旦你連接配接到資料庫并開始發送指令,它将繼續輸出正執行的操作。你可以使用任何一種MongoDB的 

驅動

 或是 

Mongo shell

 來連接配接到資料庫。

但你_不能_通過浏覽器通路27017端口 

http://localhost:27017

。資料庫不接受HTTP方式通路該端口。

标準連接配接字元串格式

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
      
  • mongodb:// 是一個必填的字首,它辨別目前字元串是标準連接配接格式。
  • {{username:password@}}可選。給出使用者名和密碼後,驅動将在連接配接到資料庫後嘗試登入。
  • host1 uri裡唯一的必填項,資料庫的連接配接位址。
  • :portX 可選。預設連接配接到27017端口。
  • /database 是希望連接配接到的資料庫名,隻有在提供 username:password@ 後該值才有效。如果不指定,預設将連接配接"admin"資料庫。

可以任意指定多個資料庫和端口,這用于實作連接配接到replica pairs/sets。

可選項有:

  • connect=direct|replicaset
    • direct: 直接建立一個到伺服器的連接配接。如果指定了多個host,将按先後順序挨個嘗試建立連接配接,直到連接配接建立成功為止。如果隻指定了一個host,則 direct 為預設值。
    • replicaset: 使用creplica set semantics建立連接配接(即使隻提供了一個host)。指定的host作為種子清單來查找完整的replica set。當指定多個host時 replicaset 為預設值。
  • replicaset=name
    • 驅動驗證建立連接配接的replica set的名字。隐含 connect=replicaset。
  • slaveok=true|false
    • true: 對于 connect=direct 模式,驅動對清單中的第一個伺服器建立連接配接,即使它不是主伺服器。對 connect=replicaset 模式,驅動将所有寫操作發送到主節點,将所有讀操作按round robin順序分發到從節點。
    • false: 對 connect=direct 模式,驅動按順序嘗試所有host直到找到主節點。對 connect=replicaset 模式,驅動将隻連接配接到主節點,并将所有讀操作和寫操作都發送到主節點。
  • safe=true|false
    • true: 驅動在每次更新操作後都發送 getlasterror 指令以確定更新成功(參考 w 和 wtimeout)。
    • false: 驅動每次更新操作後不發送 getlasterror 指令。
  • w=n
    • 驅動給 getlasterror 發送 { w : n } 指令。隐含 safe=true。
  • wtimeout=ms
    • 驅動給 getlasterror 添加 { wtimeout : ms } 參數。隐含 safe=true。
  • fsync=true|false
    • true: 驅動給 getlasterror 添加 { fsync : true } 參數。隐含 safe=true。
    • false: 驅動不添加 fsync 參數。

示例

連接配接到一個運作在本機預設端口(27017)的MongoDB

mongodb://localhost 
      

連接配接到一個運作在本機預設端口(27017)的MongoDB,并以使用者名"fred"和密碼"foobar"登入,登入後将預設使用admin資料庫

mongodb://fred:foobar@localhost 
      

連接配接到一個運作在本機預設端口(27017)的MongoDB,并以使用者名"fred"和密碼"foobar"登入,登入後将使用baz資料庫

mongodb://fred:foobar@localhost/baz 
      

連接配接到一個replica pair,一台伺服器在example1.com,另一台在example2.com

mongodb://example1.com:27017,example2.com:27017 
      

連接配接到本機的一個replica set(端口分别為27017,27018,27019)

mongodb://localhost,localhost:27018,localhost:27019 
      

連接配接到三台伺服器的replica set,将所有寫操作發送到主節點,所有讀操作分發到從節點

mongodb://host1,host2,host3/?slaveok=true 
      

連接配接到第一台伺服器并響應,無論它是replica set的一台,也無論它是主節點還是從節點

mongodb://host1,host2,host3/?connect=direct;slaveok=true 
      

注:這種類型的連接配接字元串可用于在你偏好使用某台伺服器但有可供替換的伺服器的時候。

使用safe模式連接配接到本機

mongodb://localhost/?safe=true 
      

使用safe模式連接配接到replica set,等待備份在至少兩台機器上完成,timeout時間為2秒

mongodb://host1,host2,host3/?safe=true;w=2;wtimeout=2000 
      

連接配接池

每個TCP連接配接将對應一個資料庫線程。是以強烈建議你使用某種形式的連接配接池技術。幸運的是,大部分官方資料庫驅動已經内置實作了這個功能。但如果你使用CGI或是PHP,對應每個新的請求可能啟動一個新的應用程序,這種情況下需要特别注意連接配接的處理。