過去問ドリル

LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問8

性能・拡張性の設計/性能の拡張

ゲームのランキング機能で、スコア順に並んだ上位の利用者を高頻度で参照する。リレーショナルデータベースへの負荷を下げるためにインメモリのデータストアを導入するが、再起動してもデータを失いたくなく、スコア順の並びをデータストア側で維持させたい。選択として最も適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)

正解:B

解説

Redisはインメモリのデータストアで、文字列のほかにリスト、ハッシュ、ソート済みセットなどのデータ構造を持ち、ソート済みセットではスコア順の並びをデータストア側で維持できるため、ランキングの上位取得を効率よく行えます。また、スナップショット(RDB)や追記ログ(AOF)による永続化の機能があり、再起動後にデータを復元できます。memcachedは単純なキーと値のキャッシュで、ディスクへの永続化の仕組みを持たず、障害やOSの再起動でデータが失われます。CDNやリードレプリカも負荷軽減の手段ですが、スコア順の維持や頻繁な更新への追従という要件には合いません。

選択肢ごとの解説

  • A誤り。memcachedは単純なキャッシュ向けでディスクへの永続化の仕組みがなく、障害やOSの再起動でデータが失われます。並べ替えもアプリケーション側で行う必要があるため、要件を満たしません。
  • B正しい。ソート済みセットでスコア順を維持でき、RDBやAOFによる永続化で再起動後もデータを復元できます。
  • C誤り。CDNは静的なコンテンツや共通のページの配信に向き、頻繁に変わるスコア順の維持や永続化の要件には合いません。
  • D誤り。参照の負荷は分散できますが、集計クエリ自体の重さは変わらず、インメモリによる高速化にもなりません。
LinuCレベル4 システムアーキテクトの問題を演習モードで解く