mongo connections url string 的问题
摘要
driver 連接Mongo DB的url其實(shí)很簡(jiǎn)單,就是幾個(gè)變量拼接成一個(gè)url,和關(guān)系型數(shù)據(jù)庫(kù)沒什么不同。但是因?yàn)閙ongo有單個(gè)instance和replicaSet不同的部署策略,還有mongo 節(jié)點(diǎn)有主從之分。所以配置參數(shù)容易混淆。另外Mongo NodeJs Driver版本不同,居然也會(huì)有坑。這里作個(gè)簡(jiǎn)單介紹
正文
mongo client 連接到db字符串
格式:
mongodb://username:password@host1,host2:27017/?replicaSet=rs1&write=1&readPreference=secondaryPreferred&connectTimeoutMS=300000username
當(dāng)DB enable auth后,需要用戶名和密碼就加上username:password。
replicaSet
單個(gè) mongo db instance
不用填replicaSet
replica set
這邊考慮加上多個(gè)host,防止某個(gè)host down了。客戶端連接不上。replicaSet 參數(shù)看起來很奇怪,為什么DB 是單個(gè)instance還是個(gè)replicat set,要讓應(yīng)用程序知道呢。
但是目前mongo就是這么設(shè)計(jì)的,如果提供的是多個(gè)host 列表,那么沒有replicaSet參數(shù)也可以,但是如果本身環(huán)境是replica set,而你只填寫了一個(gè)host,并且沒有replicaSet 參數(shù),那么會(huì)將這個(gè)Mongo DB當(dāng)做是一個(gè)standalone的db instance,不清楚它是一個(gè)集群環(huán)境。
host
坑1
這邊的host,填ip,還是hostname。正確的做法就是填寫在rs.status()中看到的members.host的配置。
之前將這個(gè)值配置成hostname。client端連接使用ip.在mongo nodejs driver 2.1.21中可以正常工作。但是將版本升級(jí)到了2.2.24.居然讀不到了。后來將rs.status()中的host改成ip,才可以訪問
坑2
replica set 有primary 和secondary節(jié)點(diǎn)區(qū)分,但每個(gè)節(jié)點(diǎn)都就有其他節(jié)點(diǎn)的信息。所以host變量應(yīng)該填primary node,還是secondary都可以。但是只給定secondary節(jié)點(diǎn)時(shí)在NodeJs driver的有些版本里面無法正常連接。
write,read
write,read 一致性設(shè)置。
cassandra 的consistency level設(shè)置是可以在單個(gè)query,insert的操作中去設(shè)置的。mongo貌似還沒有看到在單個(gè)操作層面的一致性設(shè)置,只是在這邊的數(shù)據(jù)庫(kù)連接看到有設(shè)置
參考
https://docs.mongodb.com/manual/reference/connection-string/
轉(zhuǎn)載于:https://www.cnblogs.com/stoneFang/p/6715266.html
總結(jié)
以上是生活随笔為你收集整理的mongo connections url string 的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】 文件和操作文件方法
- 下一篇: hiho #1485 : hiho字符串