2016-06-28 12 views
2

1日に約500.000件のリクエストを処理するAPIサーバーが実行されています。私たちは、これらのすべてのレギュュストをデータベースに保存して、データを分析できるようにしたいと考えています。私たちは、のようなものをログ: 大規模なログテーブルを格納するデータベース

  • どのくらいの時間、それは
  • 日付と時間がかかりました要求をしました

    • HTTP応答コード
    • (URL)
    • のために頼まれた何APIリソース
    • キャッシュレスポンス(ブール)
    • +++

    これらのログを3か月間保存したい場合は、そのデータベースに約45,000,000レコードが記録されます。レコードが3ヶ月以上経過すると、レコードは削除されます。

    これらの4,500万レコードをSQLデータベースに格納することは可能ですが、これらのデータを分析するのは実際には遅いです。先週の同じ日に比較して、特定のユーザーが今日どのくらい多くのリクエストをしたかといったような広範な分析をしたいと思いますか?他の日と比較して今日何パーセントのリクエストが失敗したか?リクエスト数が増減しているかどうかを示すトレンドダイアグラムを参照してください。特定の時間に求められている上位10のリソースを参照してください。あなたはそれを得る - 我々はこのようなすべての種類の分析を行うことができるようにしたい。

    これらのログをリアルタイムで(またはほぼリアルタイムで)分析できるようにするためのアドバイスはありますか?これには良いことがある任意のnosqlデータベースですか?アズール?私は紺碧のSQLデータウェアハウスと呼ばれるものがあることがわかります、これに使用することができますか?私はMicrosoft Power Biを見てきましたが、これはおそらくこれらのデータの分析には最適ですが、どこにデータを保存するのですか。

    誰かが私のためにいくつかの提案を持っているなら、本当に感謝します。

  • +1

    SQL Serverが遅い45Mレコードを管理していると書いたのはなぜですか?うまく構成されたSQLサーバーの場合、45M行は少量のデータです。 –

    +0

    これは4500万レコードを処理することができます。私はそれをテストしましたが、すべての種類の集約を行うのは遅いです(ユーザとリソースのグループ化、エラーコードを含む行のカウントは長い時間がかかります)。だから、もし私がそれをチューニングするのに十分な時間を費やすなら、通常のSQLサーバでこれを行うことは可能かもしれないが、私はそれがこの場合正しいツールではないと感じている。 – rgullhaug

    +0

    45m行のSQL Serverの場合、クエリをサポートするインデックスが必要です(例: (User、resourcerl、error-code)の列に含まれています。 Columnstoreインデックスは最高のパフォーマンスを提供します。また、テーブルの分割などを調べることもできます。オンデート。これにより、ETLの複雑さは増しますが、I/Oを減らすことでクエリの処理速度が向上します。 –

    答えて

    2

    パワーBIは、潜在的に良い解決策です。実際にはSQL Server Analysis Servicesのインスタンスがメモリに格納されています。これは実質的に「OLAPデータウェアハウス」です。無料のPBIデスクトップツールで設計し、PBI Webユーザー向けにMicrosoftのクラウドに公開すると、インフラストラクチャの要件は最小限に抑えられます。

    公開できるデータには制限があります。下のリンクを参照してください。 PBIは非常に効果的なVertipac圧縮を使用するので、データセットは通常、生データよりもはるかに小さいことに注意してください。MBごとに10k〜50k行が表示されることが多いので、1つのProライセンスで45mを達成する必要があります。これを最適化するためにPBI Desktopのカラムリストを無情にフィルタリングしてください。あなたは1日8回まで、毎時更新できPBIプロライセンスを持つ

    https://powerbi.microsoft.com/en-us/documentation/powerbi-admin-manage-your-data-storage-in-power-bi/

    https://powerbi.microsoft.com/en-us/documentation/powerbi-refresh-data/

    ビルSQLデータベースとOLAP/SSASソリューションの私のために良い仕事オーバーとなっています過去20年間時間とお金があれば、それはまだ "ロールスロイス"ソリューションです。しかし、20年後には、それは技術的に挑戦的な分野であるため、私はまだ学んでいます。これらのスキルをまだお持ちでない場合は、Power BIがより生産的な道具になることをお勧めします。

    +0

    パーフェクト。ありがとうございました。私はPower BIで一日を過ごしました.REST apiを使用してPower BIにリアルタイムでログを転送しました:)唯一の問題は、平均日に約500.000レコードを追加することです。何も削除しないと私は数ヶ月後に10GBの制限に達するでしょう。どのように私はこれを解決することができますか?データセットから行を削除することはできないようです(唯一のオプションはすべての行を削除することです)。 – rgullhaug

    +1

    REST APIは全く新しく、「バージョン1」の感触を持っています。この段階で、特にそれらのボリュームでの制作シナリオでは推奨しません。パワーBIデスクトップを使用してロードされたファイルの「従来のPower BI」ルートとPowerBI Webにレポートが公開され、ゲートウェイを使用してリフレッシュされることを想像していました。 Power BI Desktopをファイルのフォルダにポイントし、見つかったファイルのリストをフィルタリングして古いコンテンツを削除することができます。 –

    1

    ログはSQL OLTPデータベースに保存することをお勧めします。ログテーブルの本質はトランザクション性であり、常に更新され、コミットの速度から利益を得ます。

    あなたが言及するレポートの速度の問題は、ログデータベースの上にOLAPデータウェアハウスを作成することで解決できます。あなたのデータモデルは非常に単純なので、実装する開発作業はあまりありません。

    リアルタイムレポートを取得する方法は、レポートをOLTPデータベースの上に作成することです。小さな遅延で暮らすことができれば、ほとんどの場所では、キューブを一晩再構築して、24時間遅れて即座に報告することができます。

    概念的な回答はお詫びしますが、あなたのインフラストラクチャを設計するのには不十分ですが、これはQ &形式では可能です。

    +0

    OK、本当にありがとうございます:)私は現在使用しているSQLデータベースにログを残してこの作業を行うことができるかどうかを確認しますが、レポート用のazure SQLデータウェアハウスにログを転送します。私は少し遅れて生きていますが、24時間は生きられません。 1時間は私の最大です。うまくいけばそれは可能です。 – rgullhaug

    +0

    もちろん、1時間ごとのジョブを設定してディメンション表を更新するだけです。 –

    関連する問題