LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問18
性能・拡張性の設計/性能の拡張1台のデータベースに、会員・商品・注文の業務テーブルと、アクセス解析用の閲覧ログのテーブルが同居している。閲覧ログへの大量の書き込みが業務処理の応答を悪化させており、閲覧ログの量は今後も増え続ける見込みである。閲覧ログと業務テーブルを結合する処理はなく、業務テーブルの間では複数のテーブルをまたぐトランザクションが多い。閲覧ログが業務処理に与える影響をなくしたい。対策として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- A閲覧ログのテーブルを専用のデータベースへ切り出す垂直シャーディングを行い、業務テーブルは同じデータベースに残す
- B全テーブルを会員IDで複数のデータベースに振り分ける水平シャーディングを行い、業務と閲覧ログの負荷をまとめて分散する
- Cリードレプリカを追加して業務処理の参照をレプリカで行わせ、プライマリの処理能力を閲覧ログの書き込みに回させる
- Dデータベースサーバーをより多くのCPUと高速なディスクを持つ機種へ更新し、同居させたまま全体の処理能力を引き上げる
正解:A
解説
垂直シャーディングは、テーブルを機能や業務の単位で別々のデータベースに分ける方式です。互いに結合しないテーブル群を切り出せば、アプリケーションの変更は接続先の切り替え程度で済み、負荷の性質が異なる処理同士の干渉をなくせます。この例では閲覧ログは業務テーブルと結合せず、業務テーブルの間ではまたがるトランザクションが多いため、閲覧ログだけを切り出し、業務テーブルは同じデータベースに残すのが適切です。切り出した閲覧ログがさらに増えて1台で足りなくなれば、その部分だけ水平シャーディングなどを検討できます。
選択肢ごとの解説
- A正しい。結合のない閲覧ログを切り出すことで業務処理への影響をなくし、業務テーブル間のトランザクションもそのまま保てます。
- B誤り。業務テーブルまで分散すると、会員をまたぐ処理や会員IDを持たない商品テーブルとの結合が複数のデータベースにまたがり、トランザクションの扱いが難しくなります。単一のテーブルへの書き込みが限界に達した場合に選ぶ方式です。
- C誤り。リードレプリカは参照の負荷を分散する方式で、閲覧ログの書き込みは引き続き業務処理と同じプライマリで行われるため、干渉は残ります。参照が大半を占める場合に向きます。
- D誤り。スケールアップは一時的な改善にはなりますが、同じサーバーを共有する限り閲覧ログの増加に伴って再び業務処理へ影響が及びます。