LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問6
性能・拡張性の設計/性能の拡張注文履歴を記録する単一の巨大なテーブルに書き込みが集中し、1台のプライマリデータベースの書き込み性能が限界に達している。読み取りの割合は小さい。書き込みのスループットを台数に応じて伸ばす方式として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- Aリードレプリカを追加し、プライマリで受けた変更を複数のレプリカへ複製して処理を分散させる
- Bテーブルを機能ごとに別のデータベースへ分ける垂直シャーディングを行い、負荷を機能単位で分ける
- C顧客IDなどのキーで行を複数のデータベースに振り分ける水平シャーディングを行い、書き込みを分散する
- Dアプリケーションとデータベースの間にインメモリのキャッシュを置き、データベースへのアクセスを減らす
正解:C
解説
水平シャーディングは、同じ構造のテーブルの行をシャードキー(顧客IDなど)に基づいて複数のデータベースへ分散する方式で、書き込みも各シャードに分かれるため、台数に応じて書き込みのスループットを伸ばせます。代わりに、シャードをまたぐ結合やトランザクションが難しくなり、キーの選び方が偏るとアクセスが特定のシャードに集中する点に注意が必要です。リードレプリカは読み取りを分散する手段で、書き込みはすべてプライマリが受け、レプリカでも同じ変更を適用するため書き込みの限界は解消しません。垂直シャーディングは機能やテーブル単位で分けるため、1つのテーブルに書き込みが集中する状況には効果がありません。
選択肢ごとの解説
- A誤り。リードレプリカは読み取りの分散には有効ですが、書き込みはすべてプライマリが受けるため、書き込みの限界は解消しません。
- B誤り。機能単位での分割は複数のテーブルに負荷が分散している場合に有効ですが、1つのテーブルに書き込みが集中している状況には効きません。
- C正しい。行をキーで複数のデータベースに分けることで書き込みも分散され、台数に応じて書き込みのスループットを伸ばせます。
- D誤り。キャッシュは読み取りの負荷軽減と応答時間の短縮に効きますが、書き込みは最終的にデータベースへ行う必要があります。