2017-06-20 1 views
1

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番目のデータです。しかし、ユーザーが両方のモデルでデータを検索したい場合、ビルドクエリの複雑さが生じます。

だから、パフォーマンスの向上と効果的なデータハンドリングと歴史的なタイムラインを構築するための提案を必要としています。

ありがとうございます。

答えて

0

あなたが履歴照会し、データセットのサイズ対ライブクエリを実行したい頻度に応じて、他の場所で過去のデータを配置することを検討することをお勧めします。あなたは、ライブデータの迅速なクエリを必要とし、それらの多くを行うが、より高いレイテンシーのクエリを処理することができますし、唯一、時にはそれを実行した場合

たとえば、あなたが定期的にGoogleのBigQueryのにデータをエクスポートすることを検討してください。 BigQueryはデータの大規模なコーパスを検索するのに便利ですが、待ち時間がはるかに長く、MySQLと互換性のあるワイヤプロトコルはありません(クエリ言語はSQLの知識を持つ人にはよく知られていますが)。さらに、クラウドSQLの場合、データストレージとデータベースの実行時間に費やす時間がありますが、BigQueryではクエリの実行中にデータストレージとスキャンされたデータの量がほとんどです。したがって、これらの履歴クエリの多くを実行する予定がある場合、少しコストがかかる可能性があります。

また、非常に大きなデータセットがない場合、BigQueryは多少の過度の可能性があります。あなたの "ライブ"データセットはどれくらいの大きさで、あなたの "歴史的"データセットがどれだけ長く成長すると思いますか?ヒストリカルデータが大きくなるにつれて、Big Queryへのエクスポートを開始するのが理にかなっている時点までCloud SQLインスタンスのサイズを増やすことは可能ですか?

0

@Kevin Malachowski:あなたの情報と質問を私に案内してくれてありがとう、それは私に新しい考え方を与えました。

履歴データレコードは、0.3~0.5百万(最大)以上になります。今度は、BigQueryを歴史的な前向き検索に使用します。

ライブデータの場合 - cloudSQLは、取得されたデータのパフォーマンスに焦点を当てる必要があるため、使用されます。

ユーザーは、ライブデータと履歴データの両方の結果が必要な場合に、履歴検索にいくつかの問題があります。 (最悪の場合、BigQueryは約5〜6秒(またはそれ以上)の時間がかかります)しかし、モデルのデータと構造ごとに最適化されます。