皆様
お世話になります。
とても初歩的なことかもしれませんが少々教えてください。
mongodbを3台のレプリカ構成で運用しています。
当初サイジングは行ったもののシステムの利用用途も拡大し、
今のペースでいくと、今後ディスク容量が枯渇することが想定されてきています。
そこで当然容量確保に動きたいと思っているのですが、思いのほか悩んでいます。
例えばOracleの時はディスク追加して表領域割り当て。テーブルにより表領域割り当てをコントロールすれば
スケールアップできたのですが、mongoではコレクション単位、データベース単位にディスク領域の割り当てコントロールができず
ぬぬぬぬ、と。
そこで以下の検討をしてみていますが、、
検討案1:大きいディスクに乗せ換える
⇒単純ですがスケールアップ可能です。が、この先また想定容量よりも増えた場合、
また乗せ換えするなどはかなりの手間がかかることが想定され、あまりスマートではなく感じます。
(どこまであらかじめ大きい玉を用意しておけばよいのか、となりますし)
検討案2:シャーディング構成への切り替え
⇒シャーディング構成にすれば、容量的にも水平スケールできると思っています。
が、言わずとしれた「キー設計」の難易度より、ましてや容量アップを目的にした
シャーディング構成への移行はリスクのみが高過ぎであり、最良の選択肢とは思えませんでそた。
またシャーディング構成はとるものの、コレクション自体をすべて「Non-Sharded」にしちゃえば行けるんじゃ!?
なんても期待しましたが、すべてプライマリシャードに偏るということですので、目的は満たせないと理解してます。
(プライマリシャードの切り替えもできるようですが、全部引っ越すだけなので意味はなしと判断)
検討案3:別のレプリカセットを構築し用途により用いるデータベース(インスタンス)を分ける
⇒単純に別のインスタンスを追加し、用途により利用を分ける方式。
とてもダサいですが、そもそもmongodbはリレーショナルではなく、別々に分けていても利用側の手間こそあれ
そこまで致命的ではないのかもと。。(3.4でviewが使えるようになったのであれですが、、、)
上記の通り、
思いのほかどれもしっくりこないなぁと。
どこでも考えそうな事象なのですが、皆様どう対処されているのでしょうか。
ご教示いただけましたら幸いです。
なにとぞよろしくお願いいたします
ノリ