データを SQL と Table Storage のどちらに格納するか、および効率的に格納するための最良の方法について、多くの質問があります。
使用事例:
現在、mysql データベースに格納されているオブジェクトの行は約 500 万行あります。現在、メタデータはデータベースにのみ保存されています。(緯度、経度、ID、タイムスタンプ)。あまり使用されていないオブジェクトに関する他の 150 列は、テーブル ストレージに移動されました。
- テーブル ストレージでは、これらすべてを 1 つの行に格納し、150 列すべてを複数の行ではなく 1 つの列であまり使用しないようにする必要がありますか?
データベース内のこれらの 500 万個のオブジェクトのそれぞれについて、それらに関する特定の情報 (温度測定値、軌跡など) があります。軌跡データは、以前は SQL に格納されていました (オブジェクトあたり約 300 行) が、費用対効果を高めるためにテーブル ストレージに移動されました。現在、それらは各行が次のように見えるリレーショナルな方法でテーブル ストレージに格納されます (PK: ID、RK: ID-Depth-Date、X、Y、Z)。
- 現在、軌跡データの多くを取得するには時間がかかります。私たちの場合、Table Storage はかなり遅いようです。取得のパフォーマンスを向上させたい。各オブジェクトの軌跡が 1 行で、すべての XYZ が JSON 形式の 1 列に格納されるデータを格納する必要がありますか? 300 行を取得する代わりに、1 行を取得するだけで済みます。
- テーブル ストレージは、このすべてのデータを格納するのに最適な場所ですか? 特定の測定深度で X、Y、Z を取得したい場合は、行全体を取得して JSON を解析する必要があります。これはおそらくトレードオフです。
- 軌道データ用の (5,000,000 x 300 行) がある SQL データベースに軌道データ、測定値などを含めることは可能ですか。また、それが存在する可能性のあるオブジェクトに関する情報もあります (5,000,000 x 20,000 行)。これはおそらく SQL データベースには多すぎるため、Azure クラウド ストレージに配置する必要があります。もしそうなら、JSON オプションが最適でしょうか? トレードオフは、1000 行の部分が必要な場合、テーブル全体を取得する必要があることですが、20,000 行をクエリするよりも高速ではありません。おそらく、データを 1000 行のセットに分割し、SQL をメタデータとして使用して、Cloud Storage から必要なデータ セットを見つけることができます。
アプリケーションのデータを取得するときに、データをグループ化して Azure Cloud Tables にフォーマットし、効率的かつ高速にする方法を理解するのにかなり苦労しています。
これが私のデータの例とその取得方法です: http://pastebin.com/CAyH4kHu