Azure非リレーショナル応用
あるリアルタイムチャットアプリケーションがCosmos DB(Core SQL API)を使用して、メッセージを管理しています。ユーザーが新しいメッセージを送信する際、「送信者ID」「受信者ID」「タイムスタンプ」をパーティションキーとして設定しました。このパーティション戦略のために、「特定の2人のユーザー間の過去30日間のメッセージを時系列で取得」というクエリ性能が低下しました。最も根本的な原因と改善案はどれか?
A.パーティションキーが複合キーで複雑すぎる。単一のパーティションキー「タイムスタンプ」に変更すればホットパーティション問題が解決する
✗ タイムスタンプをパーティションキーにすると、時間軸で均等に分散しない(ホットパーティション化)。また受信者IDを含めない設計では、特定の2人の会話を効率的に取得できない。
B.パーティションキーが「送信者ID」「受信者ID」「タイムスタンプ」と粒度が細かすぎ、物理パーティション間のクロスパーティションクエリが発生している。パーティションキーを「受信者ID」(または「会話ID」)に統一すべき← 正解
✓ 正解です。複合パーティションキーが細かすぎると、同じ論理グループ(2人の会話)が複数の物理パーティションに散らばり、クロスパーティションクエリのコストが増加します。パーティションキーを「会話ID」に統一することで、同一会話のメッセージが同一パーティション内に集約されます。
C.Cosmos DBの一貫性レベルが「強い一貫性」に設定されており、クエリのレイテンシが増加している。整合性レベルを「最終的一貫性」に変更すれば改善する
✗ 一貫性レベルは総スループットに影響しますが、同一パーティション内クエリの効率改善には直結しません。根本原因はパーティション設計です。
D.RU(要求ユニット)の割り当てが不足している。メッセージコンテナーのスループット容量を10,000RU/sに増やせば、すべてのクエリが高速化する
✗ RU増加は別のスケーリング手段ですが、物理パーティション間のクロスパーティションクエリの高コストを根本解決できません。パーティション設計が不適切では、RUの浪費が続きます。
この問題のポイント
複合パーティションキーが細かすぎると、同じ論理グループ(2人の会話)が複数の物理パーティションに散らばり、クロスパーティションクエリのコストが増加します。パーティションキーを「会話ID」に統一することで、同一会話のメッセージが同一パーティション内に集約されます。
「Azure非リレーショナル」の他の問題
あるSNS企業がユーザー同士の「フォロー」「フレンド」関係を管理するDBを設計しています。主な操作は「友達の友達を3ホッ…あるIoT企業が10,000台のスマートホームデバイスから温度・湿度・電力消費量を毎秒収集・保存しています。「デバイスI…あるECサイトがAzure Table Storageで商品カタログ(5億件)を管理しています。「クエリレイテンシが増加…あるスタートアップがオンプレミスのMongoDBアプリケーションをAzureに移行します。「既存のMongoDBドライバ…あるゲーム会社が1億人のプレイヤープロファイルを管理するDBを設計しています。「プレイヤーごとに所持アイテムが異なる(ス…Cosmos DB(Core SQL API)でコンテナを設計する際、「パーティションキーの選択」として最も適切なのはど…
IT・クラウド の関連資格
AWS Certified Cloud Practitioner(CLF-C02)
AWSクラウドの入門資格。クラウドの概念・AWSのコアサービス・セキュリティ・料金モデルを問う。
AWS Certified Solutions Architect - Associate(SAA-C03)
AWSでのシステム設計能力を問うアソシエイト資格。高可用性・セキュリティ・コスト最適化の設計が中心。
AZ-900:Microsoft Azure Fundamentals
クラウドとAzureの基礎を問うMicrosoft認定資格。クラウドの概念、Azureの主要サービス、セキュリティ・コンプライアンス・料金を扱う。