MySQL views / istatistikleri depolamak için en iyi yolu

0 Cevap php

Ben bir 'bakıldı' tablosunda tek sayfa görüşlerini saklayan hiçbir site çalışıyorum:

CREATE TABLE `views` (
  `view_id` bigint(16) NOT NULL auto_increment,
  `user_id` int(10) NOT NULL,
  `user_ip` varchar(15) NOT NULL,
  `view_url` varchar(255) NOT NULL,
  `view_referrer` varchar(255) NOT NULL,
  `view_date` date NOT NULL,
  `view_created` int(10) NOT NULL,
  PRIMARY KEY  (`view_id`),
  KEY `view_url` (`view_url`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Oldukça basit, depolar User_id (sitede kullanıcının id), IP adresi, url (etki alanı olmayan bir küçük tablonun boyutunu azaltmak için), sevk url (gerçekten şu anda ve kurtulmak olabilir kullanarak değil o), tarih (tabii YYYY-AA-GG biçiminde) ve görünüm meydana ne zaman unix zaman damgası.

Tablo, elbette, (şu anda 4 milyon satır ve oldukça genç bir site) oldukça büyük oluyor ve bunun üzerinde çalışan sorguları yavaştır.

Bazı temel optimizasyon için ben artık bir 'views_archive' tablo oluşturduk:

CREATE TABLE `views_archive` (
  `archive_id` bigint(16) NOT NULL auto_increment,
  `view_url` varchar(255) NOT NULL,
  `view_count` smallint(5) NOT NULL,
  `view_date` date NOT NULL,
  PRIMARY KEY  (`archive_id`),
  KEY `view_url` (`view_url`),
  KEY `view_date` (`view_date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Bu url günde görülüyordu kaç kez kullanıcı bilgisi (ve sevk url) ve depolar sayar. Bu, genellikle verileri kullanmak için (bir sayfa bir günde bazda izlendi kaç kez) bu yüzden oldukça hızlı sorgulama yapmak gerektiğini isteyeceksiniz nasıl muhtemelen, ama ağırlıklı olarak 'bakıldı' tablosunu değiştirmek için kullanmak bile (sağ şimdi ben geçen hafta / ay ya da öylesine için saat sayfa görünümleri göstermek ve daha sonra bunun ötesinde günlük görüşlerini gösterebilirim hayal ve bu yüzden sadece geçen hafta / ay verileri) içeren 'bakıldı' tablosu gerekir ama yine de büyük bir var tablo.

Bana iyi bir MySQL site istatistiklerini / sayfa görünümleri depolama işlemek için nasıl herhangi bir ipucu verebilir Neyse, uzun lafın kısası, ben merak ediyorum, hem olma hedefi (s) tablonun boyutunu korumak db küçük mümkün ve hala kolayca (ve en azından nispeten hızlı bir şekilde) bilgi sorgulamak mümkün. Ben bölümlenmiş tablolar biraz baktım, ancak site MySQL 5.1 yüklü değildir. Eğer teklif verebilecek başka herhangi bir ipucu ya da düşünceler çok duyacağız.

0 Cevap