簡體   English   中英

在MySQL中存儲視圖/統計信息的最佳方法

[英]Best way to store views / stats in MySQL

我沒有在將“視圖”表中存儲單個頁面視圖的網站工作:

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 ;

這很基本,它存儲user_id(站點上的用戶ID),其IP地址,URL(沒有用於減小表大小的域),引薦網址(目前尚未真正使用該URL,可能會被刪除) ),日期(當然是YYYY-MM-DD格式)以及視圖發生時的Unix時間戳。

該表當然會變得很大(目前有400萬行,這是一個相當年輕的站點),並且在該表上運行查詢的速度很慢。

對於一些基本的優化,我現在創建了一個“ views_archive”表:

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 ;

這將忽略用戶信息(和引薦網址),並存儲每天查看該網址的次數。 這可能就是我們通常要使用的數據(每天查看頁面的次數)的方式,因此應該使查詢變得非常快,但是即使我使用它來主要替換“視圖”表(正確)現在我想我可以按小時顯示過去一周/一個月左右的頁面瀏覽量,然后顯示每日瀏覽量,因此只需要“視圖”表即可包含上周/一個月的數據),但它仍然很大表。

總之,長話短說,我想知道您是否可以給我一些有關如何最好地處理MySQL網站中的統計信息/頁面視圖的存儲的提示,目的是將表的大小都保持在db盡可能小,並且仍然能夠輕松(至少相對快速)查詢信息。 我已經看了一些分區表,但是該站點未安裝MySQL 5.1。 您可以提供的其他任何提示或想法將不勝感激。

MySQL的檔案存儲引擎

http://dev.mysql.com/tech-resources/articles/storage-engine.html

它非常適合日志,可以快速寫入,缺點是讀取速度稍慢。 但它對於日志表非常有用。

您可能希望有一個僅用於頁面的表,並讓用戶視圖引用該表。 另一種可能的優化是將用戶IP存儲在不同的表中,其中可能包含一些會話表信息。 那應該減少您的查詢時間。 您在存檔表上的位置正確; 相同的優化也應對此有所幫助。

假設您的應用程序是博客,並且您想跟蹤博客文章的視圖,則可能會有一個名為blog_posts的表。 在此表中,建議您創建一個名為“ views”的列,並在此列中存儲該帖子具有多少個視圖的靜態值。 您仍將使用views表,但這僅用於跟蹤所有視圖(並檢查它們是否“唯一”)。

基本上,當用戶訪問博客帖子時,它將檢查views表以查看是否應添加。 如果是這樣,它還將在blog_posts的博客文章的相應行中增加“ views”字段。 這樣,您只需參考每個帖子的“視圖”字段即可快速查看它擁有多少視圖。 您可以通過設置CRON作業來重新計算和驗證所有視圖,並在一天結束時相應地更新每個blog_posts行,從而更進一步並增加冗余。 或者,如果你願意,你也可以在每次更新進行重新計數,如果精度海第二是關鍵

如果您的站點是閱讀密集型站點,並且您不斷地需要統計每個博客帖子的瀏覽量(再次假設是您的應用程序:-),則此解決方案效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM