Google CloudSQLを使用して、ユーザーのリストを取得するための人物データの事前検索を適用しています。データストアには、すでに2つのモデルが格納されているデータがあります。最初はユーザーの現在のデータを追跡するために使用され、他のモデルは履歴のタイムラインを追跡するために使用されます。現在のデータはGoogle CloudSQLに保存されており、すべてのユーザーのために何百万もの行があります。今では、すべての履歴データをクラウドに追加することで、日付間を含む履歴データの事前検索を実装したいと考えています。私は、リンクや記事の多くを経てきたように、誰もがこの歴史的なモデルのためのより良い構造を提案することができる場合Google CloudSQL:cloudSQLのヒストリーデータの構造
。しかし、私は検索のためのパフォーマンスの世話をしなければならない適切な解決策を見つけることができません(現在の検索では、結果が正常にフェッチするために取られるが、歴史がフェッチされるとき、必要に応じて複雑なジョイン)。 cloudSQLからデータを取得するために使用されるクエリは、ユーザーのニーズに基づいて動的に作成されます。例えば、ユーザは、そのマネージャが「[email protected]」である従業員のリストが欲しい、Pythonコードを使用することで、クエリはそれに応じて構築されます。ユーザーはマネージャーWAS "[email protected]"と有効なユーザー2016-05-02〜2017-01-01を探しています。
私は以下のように構造のためのユースケースのいくつかを見つけるてきたように:
1)それは歴史かであるかどうか、データのisCurrentData(ステータスのための新しいコラムフラグと現在の構造と同じモデルをアクティブ)
Disadv .: - クエリの減速、それはすべてのレコードをスキャンし、データをフェッチします。 データの複製が増加することがあります。
これらはすべて不利です。時間の増加による事前検索のパフォーマンスに影響します。 この問題を解決するには、テーブル全体をdiffテーブルに分割します。
2)パーティションは年を基準にしています。 時間が経過すると、テーブルが多すぎます。
3)2つのテーブルが維持されている可能性があります。 現在のデータは1番目、履歴は2番目のデータです。しかし、ユーザーが両方のモデルでデータを検索したい場合、ビルドクエリの複雑さが生じます。
だから、パフォーマンスの向上と効果的なデータハンドリングと歴史的なタイムラインを構築するための提案を必要としています。
ありがとうございます。