sql >> データベース >  >> RDS >> Mysql

非常に大きなmysqlテーブルとレポート

    partitionを調べることから始めます まだ行っていない場合は、テーブルを作成します:

    http://dev.mysql.com/doc/refman/5.1 /en/partitioning.html

    http://www.slideshare.net/datacharmer/mysql-partitions-tutorial

    http ://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html

    データをどのように「統合」していますか?使用している方法が最適ではない可能性があります。 1つの良いアプローチ(これが実際に行っていることであるかどうかを知らせてください)は、集約されたデータを含むテーブルを作成することです。次に、次のように設定します:

    まず、データがメインテーブルにどのようにダンプされるかを脇に置きます...

    • データがメインテーブルにロードされる方法(MAINと呼びましょう)に関連して、指定された間隔で実行されるジョブ(cronまたは便利なものまたは既に構成されているもの)を作成します 、前進)。 MAINテーブルが1時間ごとに読み込まれる場合は、同期します。 30分ごと?関係ない。とにかく速度を確認するか、レポートが実行されるオフピーク時間に近い場合は、その近くにスケジュールを設定できます

    • 統合データのテーブルに適切にインデックスを付けます。それをAGGと呼びましょう 前進します。

    • MAINからAGGにデータをロードするストアドプロシージャを作成します。これは基本的にAGG LOAD FOR INTERVAL-? 。もちろん、データがMAINに挿入される方法とタイミングを知っているのはあなただけなので、集約の意図が何であるかを知っているのもあなたです。集約の意図が完了していない場合でも、集約ストアドプロシージャを実行し続けることもできます(たとえば、1日中です。したがって、それが設定されるまでは累積実行です)

    • STAGINGを使用する テーブル。 私にとって、彼らは最高です

    • データを再チェックするストアドプロシージャを作成して、このプロシージャを実行することにより、レコードの更新または追加の挿入をAGGテーブルに反映できるようにします。更新する範囲のパラメーターを含めます。毎日の場合は、DAILY AGG LOADがあります。 およびDAILY AGG RELOAD 手順。 AGG CHECK INTERVALを含める およびAGG CHECK DAILY あなたが夜よく眠るのを助ける手順。ああ、言うまでもなく、AGG DATA HOLE CHECK またはMISSING AGG DATA CHECK 集約テーブルまたはメインテーブルまたはステージングテーブル(できれば)から取得できる必要最小限のデータ量のチェックを実装するビジネスルールを適用します

    • もちろん、AGGは絶対に変更しないでください テーブル。常にリロードするだけです。

    • これはどのように役立ちますか?その場合は、レポートにAGGをクエリさせるだけでよいのではないでしょうか。 テーブル、これはより小さく、より高速です(集計がすでに行われているため)?パフォーマンスの問題は間隔の読み込みに関係している可能性がありますが、テーブル、そのインデックス、およびそのメンテナンスを適切に構造化すれば、それだけの価値があるはずです。

    • パーティショニングはどこから来るのですか?アーカイブ。一定の時間が経過すると(チーム/ボス/トップマンに何が受け入れられるかについて話し合います)、MAINから古いデータをアーカイブできます。 。 1年分のデータを本番データベースに保存する必要があることを経験しました。それはちょっとドラッグのように感じましたが、それはクライアントの要求だったので、会社は私に必要なディスクスペースを与えるしかありませんでした(手をこすります)そして男の子は私がきちんと動くものを得るまでそれで遊んでいました。私の経験はMicrosoftSQLServer 2005であり、ストアドプロシージャとSSISによって楽しくなりました。

    あなたがまだそれを知らないなら、そしてオプションを検討したいと思うかもしれない他の人のために、これはすべてです。私はあなたが上記のどれもまだ知らなかったと言っているのではありません。あなたが試した統合プロセスがあることを除いて、あなたの投稿から作業するためのより多くの情報がなかったことを考慮して、私は以前に何ができたかを述べています。




    1. クエリ結果をテーブルに出力する

    2. PDOException ::(PDO ::__ Construct():MySQL 8 / PHP 7.2 /Laravelでcaching_sha2auth:109を実行中に予期しないサーバーが応答します)

    3. FROM(UNIX_TIME)の場合のSQLの場合

    4. mysqlのST_Distance_Sphereが2つの場所間の正確な距離を提供していません