自己寫的原創文章很想知道都有多少網友瀏覽過,單純的顯示次數並不能準確地反應真實瀏覽量,還需要解決一些意想不到的問題,本節我把剛剛完成的瀏覽量統計方案分享出來
/**
*@var int
* *@orm\column(name="pv", type="integer", options=)
*/private
$pv;
/** *@return mixed
*/public
function
getpv
()/**
*@param mixed $pv
*/public
function
setpv
($pv)
並執行:
生效資料庫,我們可以看到資料庫多了一列pv,預設值為0:
瀏覽量統計的關鍵點在於「排除干擾因素」,所謂的干擾因素主要是非真實使用者瀏覽:爬蟲、惡意刷網頁等
因此我們不採取實時瀏覽寫資料的方案,我們採取基於瀏覽日誌做清洗和統計
"-"這種一定不是正常的瀏覽器,因此我們也要過濾掉
按照上述方案,我們的日誌清洗指令碼新鮮出爐:
生成的clean.log就是清洗後的日誌
下面就是基於清洗後的日誌做pv統計了,建立gen_pv.py如下:
#!/usr/bin/python
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
import mysqldb
from conn import conn
import re
pattern1 = re.compile('/blogshow/\?blogid=([0-9][0-9]*)$')
pattern2 = re.compile('/blogshow/([0-9][0-9]*)$')
pv={}
f = open('./clean.log')
try:
while
true:
line = f.readline()
if line:
fields = line.split(' ')
url_path = fields[6] # /blogshow/3 or /blogshow/?blogid=3
match1 = pattern1.match(url_path)
match2 = pattern2.match(url_path)
blog_id = -1
if match1:
blog_id = int(match1.group(1))
if match2:
blog_id = int(match2.group(1))
if blog_id != -1:
if pv.has_key(blog_id):
pv[blog_id] = pv[blog_id] + 1
else:
pv[blog_id] = 1
else:
break
finally:
f.close( )
conn = conn().getconnection()
cursor = conn.cursor()
for id in pv:
sql = "update blogpost set pv=%d where id=%d" % (pv[id], id)
cursor.execute(sql)
conn.commit()
conn.close()
講解一下:
因為**做過改版,blogshow網頁的url存在過兩種形式,因此要把這兩部分都考慮進來,所以做了兩部分正則匹配
獲取到全部blog的pv資料最後刷入資料庫
為了能比較及時又不損失伺服器效能,我們配置5分鐘執行一次統計,配置crontab如下:
*/5 *
* * * cd /data/gen_pv && sh run.sh &>> run.sh.log
史上最簡單的 MySQL 教程(四十一) 觸發器
案例 網上購物,根據生產訂單的型別,商品的庫存量對應的進行增和減。此案例涉及兩張表,分別為訂單表和商品表,下單時,商品表庫存減少 退單時,商品表庫存增加。如何實現?觸發器 trigger,是指事先為某張表繫結一段 當表中的某些內容發生改變 增 刪 改 的時候,系統會自動觸發 並執行。觸發器包含三個要...
史上最簡單的 MySQL 教程(四十一) 觸發器
觸發物件 表中的每一條記錄 行 即整張表。建立觸發器基本語法 delimiter 自定義符號 臨時修改語句結束符,在後續語句中只有遇到自定義符號才會結束語句 create trigger 觸發器名稱 觸發器時間 事件型別 on 表名 for each rowbegin 代表觸發器內容開始 觸發器內容...
技術人生 故事之四十一 軟體工程的必要
故事之四十一 軟體工程的必要 規範規範,影響了我的創造,可終於發現,我孤獨的決鬥,總是失敗。很多技術人員不喜歡坐下來寫東西,或者按照規則辦事,認為那是束縛。告訴你,如果不遵守規則,只有兩個結果 一 工作全部你幹了 二 背公司炒掉!其實,沒有原則的技術學習和開發,實際上等同於白幹,雖然這裡說的嚴重了,...