web-dev-qa-db-ja.com

リアルタイム分析システムを構築するためのデータベース

Google Analyticsに似たシステムを構築し(内部使用、トラフィックと機能の削減にのみ使用)、主に焦点を当てたい

  1. ユーザーの人口統計情報のさまざまなディメンションによる一意のURI訪問/ PVのリアルタイムカウント。ユーザーエージェント、OS、国など

  2. ユーザーセッションの平均の長さのリアルタイム計算(同じIPからの2つの要求の差が1分未満の場合)

この種のクエリをリアルタイムで有効にする優れたデータベースストアはありますか?

pS現在InfiDBをテストしています。

7
Howard

プラットフォームに関係なく、高速なリアルタイム分析を構築するコツがあります。これはMicrosoft Analysis Servicesで行いましたが、他のプラットフォームでも同様の手法を使用できます。

トリックは、ほぼリアルタイムのデータを入力できる主要なパーティションと、高速クエリ用に最適化された履歴パーティション(1つまたは複数)を用意することです。先頭のパーティションを十分に小さく保つと、クエリも迅速になります。

これを管理するために、 [〜#〜] etl [〜#〜] 処理によって主要なパーティションが作成され、定期的にパーティションを高速クエリ最適化形式に変換する補足プロセスを構築します。このプロセスの正確な性質は、プラットフォームによって異なります。

MS Analysis Servicesでは、先頭のパーティションは [〜#〜] rolap [〜#〜] パーティションとして行われ、テーブルから直接読み取られます。末尾のパーティションは、集計で [〜#〜] molap [〜#〜] に変換されます。他の [〜#〜] olap [〜#〜] システムも同様に機能します。 Oracleでは、後続のパーティションにビットマップインデックスとマテリアライズドビューパーティションを作成して、クエリを高速化できます。他のいくつかのシステムにもこのタイプの機能がありますが、MySQLがサポートしていることは知りません。

おそらく、これを行うのに最も安価な主流のプラットフォームはMS Analysis Servicesだと思います。MSAnalysis Servicesは、SQL Serverにバンドルされており、個別に購入することはできません。 2008 R2でのパーティション分割には、SQL ServerのEnterprise Editionが必要です。これは、英国のCPUソケットあたり約22,000ポンドで動作し、池の反対側では少し少なくなります。 Microsoftは2012年にSQL Serverの新しい「ビジネスインテリジェンス」エディションを出荷します。これが当てはまるRTMこの製品のBIエディションはパーティションキューブをサポートし、Enterprise Editionより大幅に安価です。代わりに予算と時間の制約を使用できる場合があります。

取り組む必要がある問題の別の側面は、変更されたデータキャプチャです。新しいまたは変更されたデータ行を効率的に識別して [〜#〜] etl [〜#〜] プロセスにプッシュします。ほとんどのDBMSベンダーのCDC機能は独自のデータベースでのみ機能するため、CDCソリューションが必要な場合は、サードパーティのアプリまたはソースのトリガーにアクセスする必要がある場合があります。

  • データベースプラットフォーム間で移行するさまざまなサードパーティのパント [〜#〜] cdc [〜#〜] アプリケーション。 CDC製品のリストは、件名の wikipediaエントリで確認できます。 まだ統合に問題がある可能性があることに注意してください。たとえば、IBM Infosphere CDCは、バッチごとではなく、行ごとにのみ外部プロセスをトリガーできます。これにより、大量のデータボリュームで効率の問題が発生する可能性があります。

  • 変更をステージング領域にプッシュする一連のトリガーをソーステーブルに作成できます。これを行うには、ソースデータベースへの十分なアクセス権が必要になるため、ベンダーがサポートするデータベースのオプションではない場合があります。

  • データがファイル(Webサーバーログなど)からのものである場合、新しいレコードについてファイルの末尾を監視するクライアント側プロセスを作成する必要があります。

データソースをポーリングするプルプロセスを実装しなければならない可能性が非常に高くなります。この場合、許容できるレイテンシを算出してプロセスを記述し、変更を検出するのに十分な効率で十分に迅速に実行できるようにする必要があります。組み込みシステムのサークルで時々見られる古いことわざがあります: '彼らはポーリングを開始するときに信頼性について真剣になっていることを知っています

PostgreSQLの基本的な要件に一致するものを構築することが可能です。トリガーで最新の状態に維持される マテリアライズドビュー を構築し、パーティションを使用して古いデータを維持するオーバーヘッドを削減できます。しかし、それでもそのデータベースでは非常に手動のプロセスなので、いくつかのコンポーネントのカスタムコーディングが必要になります。そして、この特定の目的のために最適化された商用ソリューションと比較して、結果のパフォーマンスはあまり良くありません。

GreenplumTruviso のような、この市場を狙うPostgreSQLの商用フォークによって提供されるこの分野には、分析の革新があります。完全に無料のPostgreSQLは、この種の問題を大規模に解決する優れたソリューションではありません。

3
Greg Smith