web-dev-qa-db-ja.com

トラフィックの多いキャッシュサイトのページビュー数を数える

私たちのサイトは非常にトラフィックが多いので、負荷を処理するためにnginxとw3の両方の合計キャッシュを使用します。以前はwp-postviewsを使用してページビューをカウントしていましたが、現在はpostmetaテーブルをロックしているように見え、ビューをカウントしないことがよくあります。それは信頼できません。

誰かが私たちがページビューを数えてそれらをDBに入れる方法、あるいは何か具体的な解決策を提案することができますか?

私の最初の考えは、個別のデータベースを更新するためにjavascriptを使ってビューカウントを行い、次に結果をマージするために毎日の終わりにcronジョブを実行することですが、どこから始めればよいかわかりません。

前もって感謝します

2
James Bruce

それは本当にあなたが何を見る必要があるかに依存します - それが交通統計を見ることだけのためであるならば、そしてGoogle Analyticsまたはjavascriptトラッカーベースの分析ツールのいくつかを使用してください。

ページビュー数の統合と、ビューによる注文投稿などを実行する機能が必要な場合は、次のいずれかを実行できます。

  • データベースを最適化するために時間をかけてください - 考慮すべきいくつかのオプションとこと
    • mySQLのためのより多くのメモリ
    • postmetaテーブルをInnoDBに変更します
    • 別のデータベースサーバーを入手する
    • mySQL設定を調整したことを確認してください(出発点としてmysqltunerを使用してください)。

OR

  • Piwikのようなものを使用し、それをWordPressと統合する(それはまともなAPIを持っている)のに時間をかけてください。
1
anu

メモリキャッシュ拡張が有効になっていると仮定して、これを行う方法は次のとおりです。

(PHP 6にバンドルされるので、ここでは例として APC を使用します)

// set this to the current post id
$post_id = get_the_ID();

// this will attempt to get the post view count from cache (the memory)
$page_views = apc_fetch("post_{$post_id}_views");

// if it exists, increase the counter (again, only in memory)
if($page_views !== false){
  $page_views = apc_inc("post_{$post_id}_views");

  // write the data to the database every ...let's say 100 views
  if(($page_views % 10) == 100)
    update_your_database_here();
}

// doesn't exist; most likely this is the first view, so create the cache entry
else{
  apc_store("post_{$post_id}_views", 1);
  $page_views = 1;
}

// show it
printf('This post has %d views', $page_views);

APCを選択した状態でWPの関数 - wp_cache_incr()またはwp_cache_decr()+ W3TCを使用することを選択できます。しかし、個人的にはキャッシュプラグインを使わずにwp-contentディレクトリにドロップできる独自のオブジェクトキャッシュハンドラを作成します。

これにもxcacheを使用できますが、問題ありません - ディスクへの書き込みを避けるために、カウントを特定の時点までメモリに保存する必要があるという考えです。あなたのサイトはトラフィックが多いので、私はあなたがあなた自身のPHP拡張などをインストールすることができる専用サーバーを所有していると思います。

2
onetrickpony

Google Analyticsまたはwp.comの統計情報を使用するだけです。

すでに解決されたことに時間を無駄にする価値はありません。

0
scribu