1つのコードベースから複数のWebサイトを実行するWebアプリケーションがあります。私はそれがアプリケーション上で実行されるサイトとドメインを含むテーブルでセットアップしています。アプリケーションは訪問者を追跡するので、サイトごとに、そしてアプリケーションのグローバルベースでどれだけのトラフィックが得られているかを知ることができます。PHP Mysqlは訪問者のスケーラビリティを追跡します
私が遭遇している問題は、そこに250万のレコードがあるので、訪問者の追跡が非常に遅いということです。今月の訪問者数を取得するためにクエリを実行すると、データにアクセスできなくなるため、複数の時間がかかります。
システムは、他のすべてのファイルを含む基本PHPファイルから直接トラッキングを記録しています。これは、既存の識別Cookieが見つからない場合に、訪問者テーブルにレコードを作成します。レコードを作成するときに、ユーザーにクッキーが割り当てられます。その結果、訪問者レコードが1つだけ作成されます。訪問者の記録には、閲覧したページ数とそのページに入ったページ(入力ページ)と、最後に見たページ(終了ページ)が格納されます。
私たちはかなりのトラフィックを得ており、結果をスピードアップすることで、毎月の訪問者のこのレポートをアクセス可能にしたいと考えています。
我々が分析に自分自身を追跡する代わりに、Google Analyticsのようなツールを使用してすることを決めた...
を私は前にSITE_IDと日付にインデックスを追加しようとしているが、非常に物事をスピードアップしていないようでした私たちは後でもっと意味のあるデータを作成することができます。たとえば、サイトを閲覧しているユーザーが連絡フォームを送信してCRMの連絡先になったときなど、その連絡先の履歴を確認してサポートを求める前に閲覧したページを確認したい場合など。
提案がありますか?テーブルスキーマは以下のとおりです。事前におかげさまで、私は解決策を考案しようと壁に頭を叩いています。
CREATE TABLE `analytics_track_visits` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT
,`site_id` int(4) unsigned default NULL
,`inc` bigint unsigned default NULL
,`referer` text NOT NULL
,`refer_host` text NOT NULL
,`user_agent` text NOT NULL
,`browser` text NOT NULL
,`os` text NOT NULL
,`search_term` text NOT NULL
,`entry_page` int(4) unsigned default NULL
,`entry_page_url` text default NULL
,`exit_page` int(4) unsigned default NULL
,`exit_page_url` text default NULL
,`created` datetime NOT NULL
,`created_ip` varchar(200) NOT NULL default ''
,`created_user_id` int(4) unsigned default NULL
,`modified` datetime NOT NULL default '0000-00-00'
,`modified_user_id` int(4) unsigned default NULL
,PRIMARY KEY(`id`)
,CONSTRAINT `analytics_track_visits__site` FOREIGN KEY (`site_id`)
REFERENCES `site` (`id`) ON DELETE CASCADE
,CONSTRAINT `analytics_track_visits__entry_page` FOREIGN KEY (`entry_page`)
REFERENCES `page` (`id`) ON DELETE CASCADE
,CONSTRAINT `analytics_track_visits__exit_page` FOREIGN KEY (`exit_page`)
REFERENCES `page` (`id`) ON DELETE CASCADE
) ENGINE=INNODB;
inc
は、特定の訪問者が閲覧したページ数を格納します。 entry_page
は、cmsページテーブルの外部キーです(exit_pageと同じです)。 browser
とos
ホールド値はuser_agent
から解釈されます。 search_term
には、エントリページの検索に使用されたキーワードがすべて格納されます。 site_id
は、doman名のサイト設定のリストを含むテーブルに関連しています。
私は、問題の一部はテーブルが実際には壊れないという疑いがあるので、レポートを実行するときに同時にこのテーブルを挿入して更新するアクティブなクエリがあります。
このデータはすべて、Webサーバーのログファイルの分析から取得できます...なぜこのオーバーヘッドをすべて追加しますか? – eggyal
ログファイルよりも優れています.Google Analyticsを使用してください。 APIがあるので、必要なカスタムレポートを作成できます。 – Conor
データは、これを記録することから得ようとしている限り、より深く進んでいます。 Webアプリケーション自体にはさまざまな機能領域があり、最終的にはユーザーがライブチャットをヒットし、ユーザーの最後の20ページと操作を即座に表示できます。または特定のCRM連絡先がサイトで閲覧した場所を確認するためのトラッキング製品、ページID、チャットセッションなどの関係のデータをサーバーログの分析から掘り起こすのは難しいです。私は一般的なサイトの統計情報については考慮しました。 – Mike