難問・アンチパターン応用

ある企業がAzure Table Storageに大量のセンサーデータを保存し、PartitionKeyに「デバイスID+YYYYMMDD」(例:DEVICE001_20240315)、RowKeyに「タイムスタンプ」を使用しています。データ量の増加に伴い、特定日付のデバイスデータ取得が遅くなりました。問題と対策として正しいのはどれか?

A.原因はRowKeyがタイムスタンプであるため、クエリが遅い。対策:RowKeyを逆順タイムスタンプに変更
✗ RowKeyをタイムスタンプにすることは範囲検索に最適です。逆順に変更してもPartitionKey問題は解決しません。
B.原因は存在しない。Table Storageは自動的にパーティションをスケールするため、常に高速
✗ Table Storageは自動スケーリングしますが、単一パーティション内のIOPS上限(通常20,000RU/s程度)に達するとスロットルされます。
C.原因はPartitionKeyが日付ごとに分散し、ホットパーティションが発生していない。むしろデータベースを移行すべき
✗ 対策として「データベースを移行すべき」は、根本原因を特定せずに提案された不適切な対策です。
D.原因はPartitionKeyの粒度が粗く、特定日付に大量アクセスが集中し、ストレージアカウントのIOPS上限に達している。対策:PartitionKeyに時間単位(例:YYYYMMDDHH)を追加し、パーティション分散度を上げる← 正解
✓ 正解です。日付粒度だけではパーティションが足りず、アクセスが集中します。時間単位を追加することで複数パーティションに分散し、IOPS効率が向上します。

この問題のポイント

日付粒度だけではパーティションが足りず、アクセスが集中します。時間単位を追加することで複数パーティションに分散し、IOPS効率が向上します。

DP-900:Microsoft Azure Data Fundamentals の問題一覧