Cover Photo: 國家戲劇院 戲台咖-戲台酒館

Technology

MongoDB

可以看該次查詢的使用到的 Index、總共翻找多少筆資料,對於分析效能瓶頸時很有幫助。

MongoDB Replica Sets 讀資料時預設從 primary 讀,寫當然也是從 primary 寫,所以在讀寫量大的時候,會看到 primary 非常忙碌,但是其他 secondary 卻很悠哉。

Application 可以修改 Connection String,加上 readPreference 參數,如果指定 readPreference=secondary,則是設定只會從 secondary 讀取資料,若所有 secondary 都掛掉了就會讀取失敗。

MongoDB Replica Sets 預設是寫完 primary 後就會發出 Acknowledgment,此時 Application 會收到寫入完成,但此時實際上在 Replca Sets 內只有 primary 有資料,其他的 secondary 是尚未同步完成,因此如果有設定 readPreference=secondary 讓 Application 馬上又去 secondary 讀資料,是會找不到該筆資料。

此時作法之一是在寫入語法加上 writeConcern 參數,例如:

  writeConcern: {
      w: 'majority',
      j: true,
      wtimeout: 5000
  }

則可以保證 Acknowledgment 時整個 replica sets 內已經有過半的數量已經寫入完成。

Other