質問

2 つのテーブルがあり、外部ソースからこれらのテーブルにレコードが継続的に挿入されています。これらのテーブルがユーザー インタラクションの統計を保持しているとします。ユーザーがボタンをクリックすると、そのクリックの詳細 (ユーザー、クリック時間など) がテーブルの 1 つに書き込まれます。ユーザーがそのボタンにマウスオーバーすると、レコードが詳細とともに他のテーブルに追加されます。

多数のユーザーが常にシステムと対話している場合、大量のデータが生成され、それらのテーブルは非常に大きくなります。

データを確認したいときは、時間単位または日単位の解像度で確認したいと考えています。

要求された解像度で (データが収集されるにつれて) 段階的にデータを継続的に要約する方法またはベスト プラクティスはありますか?

それとも、この種の問題に対するより良いアプローチはありますか?

PS.これまでに私が発見したのは、Talend のような ETL ツールが作業を楽にしてくれるということです。

アップデート:現在MySQLを使用しているのですが、DBや環境などに関わらずベストプラクティスを考えています。

役に立ちましたか?

解決

通常の方法この低遅延データウェアハウスのアプリケーションはいテーブルは、以下のアーティストに仕切りを含むもの更新が可能であることを迅速に(な音楽はグラミー賞にノミネー集合体のフライ)が最後の仕切りbackfilledの集合体.つまり、仕切り利用できるので、ストレージのスキームの末尾を隔壁

ほとんどの商業とオープンソースのRDBMSプラットフォーム(例えばPostgreSQL)で仕切られたテーブルを利用できないこのタイプのものがあることが明らかになりなどの移植、データベースからのログを残して行かざすだけで

基本的には、構造このシステムという言葉は一つもない:

  • いテーブル仕切られた一部の のような日付または日付時刻値 によるパーティショニング時間、昼も 穀物である。のログ 応募の取得追加されるこの表に示す。

  • としてのムウィンドウスライド車 パーティション、定期的に職務指標又は 顕著な遅れに換算しています。 その冷凍'ます。例えば、 仕事にOracleをビットマップ 指標とのパーティションの更新 実現しめなどの概要 データがありました。

  • その後、立ち寄ることのできる旧データ まとめでは合併の間仕切り ます。

  • 時間とともに、定期的に仕事 バ充填後の最先端 パーティションその歴史的データ に変換された形式の貸 もperformant統計 クエリーの先端 パーティションが保持や更新 ます。としてこのパーティションな そのためにも、データ照会全体 全体のデータセットが比較的 早いです。

正確にこのプロセスにより異なるDBMSます。

例えば、テーブル割にSQLサーバがすべてではないこともこの機能解析サービス(OLAPサーバーのファイルをバンドルのSQLサーバ).この設定の仕切りとして純ROLAPのOLAPサーバーだけが問合せに対する配下のデータベース)、再生の最後のパーティションMOLAPのOLAPサーバーを構築し、独自の専門的なデータ構造を含む持続の概要として集計').分析サービスできないことを完全に透過的にはユーザーが行います。で再パーティションを背景にはウィークリーマンシROLAP一つが可視に使用しています。一度の構築が終わったスワップの仕切り;キューブは、全体の時間のない中断サービスへのユーザーです。

Oracleできる仕切りの構造に更新され、単独での指標を構築することができ、パーティション構築を実現します。とのクエリを書き、クエリoptimiser Oracleではその数値目標等の将来の見通し計算をベースとテーブルから取得するに実現します。クエリの読み込みまれの数値目標等の将来の見通しの実現の見所パーティションが利用可能から最先端のパーティションです。

PostgreSQLできるうえでもそんなんかこの種のシステムです。

場合で定期的に一時停止のようなものができる明示的に行うことによりsummarisation設のビューの先頭と最後のデータです。これにより、この種の分析できるシステムをサポートしていない分から懸念を持っている。しかし、システムにおいて一過性障害としての再建できない営業時間内に最も多い。

編集: によってどのような形式のログファイルはログインオプションまで、様々な方法がありますが、データのシステム。一部のオプションがあります。

  • スクリプト内で使用お気に入りのプログラミング言語を読み込み、データを解析し、関連するビットを挿入しますので、データベースです。これには行かなり多くないもの身体の安全を確保するための場所のファイルです。注意ロック、Windows上でしか利用できません。デフォルトのファイルのロックの意味にUnix/Linuxを使いことをどのよう tail -f 作品がデフォルトの行動Windowsの場合は、両方のシステムが書き込まれる遊びも。

  • は、unixシステムのoidきをお書きパイプにログをやっていプロセスと類似のものの上からの読み込みをパイプです。このことは、低遅延のすべてが失敗のリーダーがブロックします。

  • 書きロギングインタフェースのご応募を直接populatesのデータベースより書き込みログファイルです。

  • 軒のバルク負荷によるAPIのデータベース(大分のない場合には全てのAPIにより、負荷のロギングデータバッチ.書類似のプログラムの最初のオプションが、使用のバルク負荷APIに含まれています。ここで資源使用量を少なくよpopulatingでラインが、よりオーバーヘッドのバルク。できれほど頻繁に負荷がもとの時間や日)について歪みの少ないシステム。

それぞれのシナリオ、身体の安全を確保するための場をしてきたのは問題となります。ポーリングファイルをスポットの変化が生じる可能性があるinfeasiblyに高価であり、すでに決定する必要があるロガー上でも動作するようにしているもログインしてます。

  • 一つのオプションが変更されるloggerので書き始めの異なるファイル毎に期間(数分)。してログインリーダー開始を定期的に負荷の新しいファイルをこなすでに処理されます。にファイルです。このネーミングスキームのファイルに基づくべきであるので、読者がどのファイルを検討することとする。対応ファイルがまだ使用されているのはヒ(そのイラストも読み続けられている必要はありません。ば読みたいファイルのみ、最後ます。

  • 別のオプションのファイルを読みます。この作品にストレスファイルシステムではこのように振る舞いはUnixのものが必要であNTFS.移動するファイルを読んでレジャー.しかし、このloggerのファイルを作成-追加モード、書き込みを閉じないでオープンでロックされています。これはUnixの行動-移動する原子.Windowsで使ってスタンド、ロガーです。

他のヒント

を見てみましょう RRDツール. 。ラウンドロビンデータベースです。キャプチャするメトリクスを定義しますが、それを保存する解像度も定義できます。

たとえば、最後の 1 時間については、毎秒の情報を保持するように指定できます。過去 24 時間 - 毎分。過去 1 週間、1 時間ごとなど

次のようなシステムで統計を収集するために広く使用されています。 ガングリア そして サボテン.

でスライス、集計データ(時間によりこのタスキーマ(Kimballスター)はかなりシンプルでありながら強力な解決策です。これをクリックし時間(秒分解能)、ユーザーの情報は、ボタンID、ユーザーの立地です。を容易にするためのスライスやダイシングは、開始前の駆け込みのルックアップテーブルのある物件のオブジェクトな変化--いわゆる次元のテーブルのDWです。

pagevisit2_model_02

dimDate テーブルには一列のそれぞれの日数で、属性(分野)を記述する特定の日です。のテーブルを事前にロードされた年には、事前にアップデートされるべきものだしが含まれている場合などの分野で DaysAgo, WeeksAgo, MonthsAgo, YearsAgo;そうでない場合はできる"負荷を忘れて".の dimDate 環境に優しい高機能なスライスは毎日のような属性

WHERE [YEAR] = 2009 AND DayOfWeek = 'Sunday'

十年間のデータをテーブルのみ~3650さい。

dimGeography テーブルは予圧と地理学-地域の金利--数に依存"地理的分解能の"必要な報告をすることによってデータスライスのように

WHERE Continent = 'South America'

ロードされたことは、ほとんどありません。

各ボタンのサイトが一列にdimButtonテーブル、クエリに対して

WHERE PageURL = 'http://…/somepage.php'

dimUser テーブルには一行当たり登録ユーザーは、この一された新しいユーザ情報のユーザーの登録、または少なくとも、新しいユーザー情報は表の前に他のユーザトランザクションに記録されています。

録音ボタンをクリック、追加の factClick 表に示す。

pagevisit2_model_01

factClick テーブルには一列の各ボタンをクリックから特定のユーザーです。利用してい TimeStamp (分解能)、 ButtonKeyUserKey 複合主キーをフィルター出しをクリックより一秒のものから特定のユーザーです。注意 Hour 分野での時間の一部 TimeStamp, では、整数の範囲0-23りしやすいスライス時のように、

WHERE [HOUR] BETWEEN 7 AND 9

そこで、我々は考えて:

  • どのように負荷のテーブルは?定期的に--も時間ごとに数分からブログを報ETLツール、または遅延の少ないソリューションなどのイベント-ストリーミング。
  • 長いテーブルの情報?

かどうかにかかわらずテーブル保のための情報、日のみの数年間で仕切られた; ConcernedOfTunbridgeW ついて説明して分割彼の答えは、私をスキップです。

現在、数例のスライスやダイシング毎に異なる属性を含む日時)

に簡単に質問をいだにカーブを平坦化したモデルです。:

/* To simplify queries flatten the model */ 
CREATE VIEW vClicks 
AS 
SELECT * 
FROM factClick AS f 
JOIN dimDate AS d ON d.DateKey = f.DateKey 
JOIN dimButton AS b ON b.ButtonKey = f.ButtonKey 
JOIN dimUser AS u ON u.UserKey = f.UserKey 
JOIN dimGeography AS g ON g.GeographyKey = f.GeographyKey

クエリ例

/* 
Count number of times specific users clicked any button  
today between 7 and 9 AM (7:00 - 9:59)
*/ 
SELECT  [Email] 
       ,COUNT(*) AS [Counter] 
FROM    vClicks 
WHERE   [DaysAgo] = 0 
        AND [Hour] BETWEEN 7 AND 9 
        AND [Email] IN ('dude45@somemail.com', 'bob46@bobmail.com') 
GROUP BY [Email] 
ORDER BY [Email]

こんなデータ User = ALL.の dimUser 大きなテーブルで、まだ見ないスピードアップするためのクエリ.

/* 
Because dimUser can be large table it is good 
to have a view without it, to speed-up queries 
when user info is not required 
*/ 
CREATE VIEW vClicksNoUsr 
AS 
SELECT * 
FROM factClick AS f 
JOIN dimDate AS d ON d.DateKey = f.DateKey 
JOIN dimButton AS b ON b.ButtonKey = f.ButtonKey 
JOIN dimGeography AS g ON g.GeographyKey = f.GeographyKey

クエリ例

/* 
Count number of times a button was clicked on a specific page 
today and yesterday, for each hour. 
*/ 
SELECT  [FullDate] 
       ,[Hour] 
       ,COUNT(*) AS [Counter] 
FROM    vClicksNoUsr 
WHERE   [DaysAgo] IN ( 0, 1 ) 
        AND PageURL = 'http://...MyPage' 
GROUP BY [FullDate], [Hour] 
ORDER BY [FullDate] DESC, [Hour] DESC



そのために 集計 そんなことはみんなわかってい特定のユーザ情報がに最も人気のあるものを示日付、時間、ボタンや地形に恵まれています。各行の factClickAgg テーブル内のカウンターのそれぞれの時間に特定のボタンをクリックから特定の地理学です。

pagevisit2_model_03

factClickAgg ブロードすると時間も多く、一日の終わりに--に応じて報告-解析.例えば、ということか、テーブルが読み込まれ、毎日深夜以降)を使えばいいじゃないかのようなもの:

/* At the end of each day (after midnight) aggregate data. */ 
INSERT  INTO factClickAgg 
        SELECT  DateKey 
               ,[Hour] 
               ,ButtonKey 
               ,GeographyKey 
               ,COUNT(*) AS [ClickCount] 
        FROM    vClicksNoUsr 
        WHERE   [DaysAgo] = 1 
        GROUP BY DateKey 
               ,[Hour] 
               ,ButtonKey 
               ,GeographyKey

簡素化とクエリー、ビューを作成し切りでのモデル

/* To simplify queries for aggregated data */ 
CREATE VIEW vClicksAggregate 
AS 
SELECT * 
FROM factClickAgg AS f 
JOIN dimDate AS d ON d.DateKey = f.DateKey 
JOIN dimButton AS b ON b.ButtonKey = f.ButtonKey 
JOIN dimGeography AS g ON g.GeographyKey = f.GeographyKey

できるようになったクエリ集計データは、例えば日:

/* 
Number of times a specific buttons was clicked 
in year 2009, by day 
*/ 
SELECT  FullDate 
       ,SUM(ClickCount) AS [Counter] 
FROM    vClicksAggregate 
WHERE   ButtonName = 'MyBtn_1' 
        AND [Year] = 2009 
GROUP BY FullDate 
ORDER BY FullDate

たり、数々のオプション

/* 
Number of times specific buttons were clicked 
in year 2008, on Saturdays, between 9:00 and 11:59 AM 
by users from Africa 
*/ 

SELECT  SUM(ClickCount) AS [Counter] 
FROM    vClicksAggregate 
WHERE   [Year] = 2008 
        AND [DayOfWeek] = 'Saturday' 
        AND [Hour] BETWEEN 9 AND 11 
        AND Continent = 'Africa' 
        AND ButtonName IN ( 'MyBtn_1', 'MyBtn_2', 'MyBtn_3' )

あなたはPIや歴史などの歴史的なDBを使用することができます。あなたはフリーウェアの選択肢の一つを検索したい場合がありますので、それらは<のhref =「http://www.cstsoft.com/english/rtdb.htm」のように、あなたがこのプロジェクトのために過ごすために必要以上のお金であるかもしれませんrel = "nofollowをnoreferrer">リアルタイムおよび履歴データベースパッケージでます。

Quick'n汚れご提案します。

[仮に変更できなくな基礎となるテーブル、そのテーブルでの時間/日付の行を追加することとなって許可をオブジェクトDB].

  1. VIEWを作成します(またはカップルでの意見を論理的な分野に関することにより、独自のスロット数によるチョッピングの日を参照。のようなもの:

CREATE VIEWビューとして 選択a、b、c、SUBSTR(date_field、x,y)slot_number から テーブル

上記の例では、簡素化し、追加したいと思うかもしれます。要素から日。

[例えば、日付は"2010-01-01 10:20:23,111',きものキーとして2010-01-01 10:00':なお解決には時間].

  1. オプショ:軒のビューを生成するリアルテーブルのように:

    このように作成されたテーブルをfrozen_data として SELECT*FROMビュー 場所 slot_number='xxx;

なぜわざわざとステップ1?だが実際に:だけを見れるのは、そう少しやすくからSQLポイントすることができました。

なぜわざわざとステップ2?ただの可能性あり)負荷低減ので忙しいテーブル:できれば動作するDDLますしを作り出すことのできる個別テーブルのコピーのスロットのデータセスできます。

またグループのテーブル:一時間あたりの日です。作成のトリガを生成するため、二次側のテーブル:の論理をトリガーがsegregrateるテーブルを書きます。

毎日のようにリセットこれらのテーブル:な形を生成することができますテーブルにトリガーおDBです。[はい].

提案されていない(これまで)が使用 apache couchdbが持つ または類似のデータベースの概念を扱う非構造化データです。

おっと!ジャンプにちなんだと怖いしょうが、仕上がりです。

Apache couchdbが持つ集構造化データのJSON&c);引用の技術の概要から、webサイト

この問題の追加 構造に戻る非構造および 半構造データ、apache couchdbが持つ を統合したビューモデルです。の意見を、 方法集計報告 の書類をデータベース、 構築-需要の集約、および 報告書のデータベース。眺望 建設的な影響 基本となるドキュメントできるのは、 多くの異なるビューの表現 同じデータを与えます。

ビュー定義の厳格に仮想 のみを表示書類 現在のデータベースのインスタンスは、 しとは別のデータについて、 表示対応 れます。Apache couchdbが持つ意義 内側に特別デザイン書類 で再現の全データベース インスタンスのように、文書、 だけでなくデータを再現で Apache couchdbが持つが、全体の応用 デザインを再現。

から、私は必要なもの

  • 収集のデータを確実
  • の優先度の高い信頼性ではなく、構造化データなどを得られるので、あなたのシステムにも維持-確認の構造特性がどのように収集していても見逃1msのユーザーデータがない場合があったので、それがどのような大きな問題)
  • 必要な構造化データで のDB

個人的には思うようなもの:

  • キャッシュデータを採取し、クライアント(s)保存してくださいバーストをapache couchdbが持つ
  • によって、作業負荷は、クラスターのdb、再度apache couchdbが持つ設計されている)を同期間のその他の
  • 毎間隔のサーバを生成するビューのものを必要なもの(毎時間など)、その他データを集めてい
  • 保存などの(構造)を適切なデータベース操作り遊んだりすることで、SQLツールなど、

最後の点はほんの一例になります。わたしにはわかりませんかプランが大きく関係している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top