MongooseのSlaveからデータを取得して負荷分散する

MongoDBのSlaveからもReadすることで負荷分散しようとしてしらべてみた。

はじめに

MongoDBはDataSyncに時間がかかるので、Readの負荷分散としてSlave使うとデータが遅れる可能性がある。更新が即時反映しないとまずいデータはSlaveを使えない。

種類

Slaveからもデータを取得するようにするにはRead Preferenceを設定すると良い。取得する種別は以下のリンクを参照。

コード

mongooseだと以下のコードのようにかける。

	mongoose.connect(uri, {replset: {readPreference: 'nearest'}});

まとめ

色々なところで嘘が書いてあってなかなかうまく行かなかったけど、上の設定でSlaveに対してもfindのクエリを発行していることが確認できた。しかし、参考にも書いているようにSlaveから取得させるのはそもそものデータ設計が間違っている可能性が高い。indexが効いているクエリを発行出来ているのであればメモリ上にすべてのデータが乗っている場合、データ量がどれだけでかくなろうと速度は変わらないはず。Readで時間がかかっているのはindexが聞いていない可能性が高いのでexplain等を使用してデータ設計、クエリの妥当性を調べ直したほうがいいと思われる。

参考資料