轉載:查看原文
瞭解MongoDB 的
Replica Set的童鞋都知道它有failover故障智能轉移的特性,那麼當在程式設計語言(C/PHP/Python/Java等)中如何?這一特性,用驅動串連資料庫時如何知道哪個伺服器是可用的呢?答案就在下面的內容中。
以下列出的uri樣式並非被所有的資料庫驅動所支援,請參考各驅動自己的文檔,查看各驅動支援的連接字串uri形式。如果下面的樣式不支援,那麼驅動會有自己的指定串連的替代方式。 |
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
o direct: 直接建立一個到伺服器的串連。如果指定了多個host,將按先後順序挨個嘗試建立串連,直到串連建立成功為止。如果只指定了一個host,則 direct 為預設值。 |
o replicaset: 使用creplica set semantics建立串連(即使只提供了一個host)。指定的host作為種子列表來尋找完整的replica set 。當指定多個host時 replicaset 為預設值。 |
|
• replicaset=name
o 驅動驗證建立串連的replica set 的名字。隱含 connect=replicaset。 |
|
• slaveok= true | false o true : 對於 connect=direct 模式,驅動對列表中的第一個伺服器建立串連,即使它不是主伺服器。對 connect=replicaset 模式,驅動將所有寫操作發送到主節點,將所有讀操作按round robin順序分發到從節點。
o false : 對 connect=direct 模式,驅動按順序嘗試所有host直到找到主節點。對 connect=replicaset 模式,驅動將只串連到主節點,並將所有讀操作和寫操作都發送到主節點。 |
|
• safe= true | false
o true : 驅動在每次更新操作後都發送 getlasterror 命令以確保更新成功(參考 w 和 wtimeout)。 |
o false : 驅動每次更新操作後不發送 getlasterror 命令。 |
|
• w=n o 驅動給 getlasterror 發送 { w : n } 命令。隱含 safe= true 。 |
• wtimeout=ms
o 驅動給 getlasterror 添加 { wtimeout : ms } 參數。隱含 safe= true 。 |
|
• fsync= true | false
o true : 驅動給 getlasterror 添加 { fsync : true } 參數。隱含 safe= true 。 |
|
串連到一個運行在本機預設連接埠(27017)的MongoDBmongodb://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.commongodb://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,對應每個新的請求可能啟動一個新的應用進程,這種情況下需要特別注意串連的處理,在github上最新提交的PHP驅動說是已經在串連池方面做了最佳化,可以下載自己編譯