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