サーバー上で大きくて遅いレポートを実装するにはどうしたらいいですか? SQLの最適化が不可能で、生成に最大60秒以上かかるレポートがあると思っています。 私は、受信したクエリをブロックしないためのデータベースの読み取りコピーや、バックグラウンドプロセスが仕事をしてレポートが完了したときにユーザーに通知する方法について考えました。 このようなことを行う最善の方法はありますか?サーバー上で大きくて遅いレポートを生成する
答えて
SQLデータベースは、同時要求をTransactionsとLockingで処理します。着信クエリの処理については心配する必要はありません。クエリーがキューに入れられていることをユーザに知らせるには、Ajaxリクエストだけでなくユーザインタフェースも実装し、proccessのステータスを表示する必要があります。
私はあなたに従わないかもしれませんが、なぜロックしているのですか?ユーザーは実際のものを更新しています。 質問に戻ると、Ajaxリクエストがサーバーの待機時間で停止した場合はどうなりますか? – ibesora
SQLサーバーとMysqlと他のデータベースの開発者は、これまでデータベースに最適化された数学的および論理的なソリューションをすべて実装しています。われわれのシンプルなソリューションは、データベースがより速くより信頼できるものになるのを助けません。最適化されたSQL問合せは、サーバー側の問合せ処理のロジックではなく、心配しています。 –
Ajaxリクエストでは、成功したものと失敗したものをすべてトレースし、サーバー上でリクエストを待機し、ユーザーに適切な通知を表示できます。 –
レポートがリアルタイムに近い必要があることは非常にまれです。したがって、ビジネス・エキスパートと話し合って、一定期間データが失効する可能性があるかどうかを調べることができます。その期間が十分に長い場合は、事前にレポートを生成してキャッシュすることができます。
さらに柔軟でスケーラビリティが高いもう1つのアプローチは、メッセージングインフラストラクチャに関心のあるイベントを発生時に公開することです。非正規化されたバージョンのレポートを最新の状態に保つために、これらのイベントを利用する非同期サブスクライバを使用できます。
たとえば、1製品あたりの年間売上合計のレポートを作成する必要があるとします。アプリケーションが{ type: 'ProductSold', productId: 1, soldOn: someDate, price: 45.55 }
のようなメッセージを発行する場合、YearlyProductSales (year int, product_id uuid, total money)
のようなテーブルに書き込む非同期サブスクライバを使用すると、新しい販売が発生したときにレポートを最新の状態に保つことができます。
すでにイベントが発生して記録されているため、データの読み取り中に何もロックしなくても、レポートを作成するのはSELECT * FROM YearlyProductSales
と同じくらい簡単です。
多くのレポートエンジンは、非同期レポートをサポートしています。正確な実装は技術スタックによって異なりますが、たとえば、Jasper Reports, here is how to run a report asynchronouslyを使用している場合などです。 SQLサーバーを使用している場合、HereはSSRSを使用して行う方法です。ほとんどのレポートエンジンには、ある種の非同期実行メソッドがあります。
読み取り専用レプリカを設定することは、データベースの負荷を軽減するための実証済みの方法です。もう一度、実装は技術スタックに依存します。 data-warehousing techniquesに向かう上記の答えは価値があります。データウェアハウス/データマートについてよくお読みになると、ここに投資するためにどれくらいの労力が必要かを判断するのに役立ちます。
- 1. サーバー上でasp.netを使用してレポートを作成する
- 2. 自動生成レポート、サーバー側
- 3. JasperExportManager exportReportToPdfサーバー上に大きなファイル(サイズ)を作成する
- 4. img srcがcodeignitorでPDF生成を遅くしています
- 5. 印刷用のレポートを生成する上でHTML + CSSの成熟度はどのくらいですか?
- 6. SQLサーバーの正常性レポートを生成する
- 7. 信頼できないドメインからGPOレポートを生成する
- 8. レポートを生成するR
- 9. jenkins上でnosetestsを使用してhtmlレポートを生成するコマンド
- 10. 遅いSQLレポート
- 11. アクセスはレポートを上書きしないでください
- 12. 差分レポートを生成できるドキュメント比較ツールを探しています
- 13. Raveレポート。データページ番号の上限を生成する
- 14. msアクセスでレポートを生成
- 15. activiti-5.19でレポートを生成
- 16. JenkinsでfindBugsレポートを生成する
- 17. OpenOfficeでMySQLレポートを生成する
- 18. C#でレポートを生成する
- 19. プロジェクトで生成できるLPM_DIVの最大量はいくらですか?
- 20. 大きなイメージを遅くするギャラリーでポラロイド効果をクロム
- 21. Rails:しばらくお待ちください..レポート生成ページ
- 22. rdlcレポートで予期しない大きな空白が発生する
- 23. Java TCPソケットプログラミング - クライアント上で印刷するためにサーバー上に大きな文字列を作成する
- 24. レポートはいくつのページで作成できますか?
- 25. プログラムを遅くしてサーバーにリクエストすることはできますか?
- 26. SQL Azureで上位テーブルによるディスク使用率レポートを生成するクエリ?
- 27. ダッシュボードで生成されたレポートを生成してjmeterで表示することはできませんか?
- 28. 特定の遅延の後にサーバー上でイベントを発生させる
- 29. アクティブなレコードに基づいてodooレポートを生成する
- 30. R Shiny - 生成レポート
あなたはSQLクエリの最適化やユーザーに待ちの通知を表示する方法をお探しですか? –
これは私が考えていた仮想シナリオです。 レポートを生成するときにsqlクエリを最適化してサーバーの実行時間を超過することはできません。 – ibesora