我正在編寫將具有每日/每週/每月報告數據的視圖。我認爲只有定期運行查詢才能更新數據,而不是在有人加載頁面時觸擊數據庫。這可以完全在PHP和MySQL中完成嗎?有什麼強大的方法來處理這個問題?定期使用查詢填充查看數據
0
A
回答
1
使用支持緩存的模板引擎Smarty,可以爲這些頁面設置較長的緩存時間。然後,您需要對PHP進行編碼以測試日期約束是否已更改,以及數據是否已緩存,並且如果其中任何一個條件爲真,請執行查詢。否則,Smarty將只加載緩存頁面,代碼將不會查詢數據庫。
$smarty = new Smarty();
if (!$smarty->isCached('yourtemplate.tpl')) {
// Run your query and populate template variables
}
$smarty->display('yourtemplate.tpl');
1
是的,但不是很好。你想看看Cron作業,大多數Web主機提供一個服務來設置Crons。他們只是一種運行腳本,任何腳本,PHP,Javascript,整個頁面等的方法。
搜索谷歌的cron作業,你應該找到你要找的。
如果您的Web主機不提供cron作業,並且您不知道Unix命令如何工作,那麼有些網站會爲您提供cron作業。
退房
+0
是否有任何理由給用戶Cron作業,而不是由Michael建議的頁面緩存?你的意思不是很好嗎? –
1
我想是有道理的只是定期運行查詢更新數據,而不是每當有人加載頁面訪問數據庫
就我個人而言,我會一起去。例如
SELECT customer, COUNT(orders.id), SUM(order_lines.value)
FROM orders, order_lines
WHERE orders.id=order_lines.order_id
AND orders.placed>@last_time_data_snapshotted
AND [email protected]_user
GROUP BY customer
UNION
SELECT user, SUM(rollup.orders), SUM(rollup.order_value)
FROM rollup
WHERE rollup.last_order_date<@last_time_data_snapshotted
AND [email protected]_user
GROUP BY customer
每當有人加載頁面
事實上,而不是訪問數據庫,根據使用的模式,這可能會讓很多的感覺。但是,這並不需要排除上述方法 - 只需設置何時將聚合數據推送到預先統一表中並在每個請求上測試閾值的閾值。
1
我會親自將緩存的數據存儲在一個文件中,然後只是讀取該文件,如果它已經在一定的時間範圍內更新,如果沒有,然後做你的更新(例如從數據庫獲取信息,寫入文件)。
一些示例代碼:
$cacheTime = 900; // 15 minutes
$useCache = false;
$cacheFile = './cache/twitter.cachefile';
// check time
if(file_exists($cacheFile)){
$cacheContents = file_get_contents($cacheFile);
if((date('U')-filemtime($cacheFile))<$cacheTime || filesize($cacheFile)==0){
$useCache = true;
}
}
if(!$useCache){
// get all your update data setting $cacheContents to the file output. I'd imagine using a buffer here would be a good idea.
// update cache file contents
$fh = fopen($cacheFile, 'w+');
fwrite($fh, $cacheContents);
fclose($fh);
}
echo $cacheContents;
相關問題
- 1. 使用cfloop查詢填充數組
- 2. 使用查看數據加入查詢
- 3. 數據庫查詢填充了var/TEMP
- 4. 搜索查詢和填充的數據
- 5. 如何使用查詢填充計數功能的報表查看器字段?
- 6. 填充在查詢
- 7. 填充查看選定的記錄ViewModel
- 8. 如何填充上查看
- 9. 查看未填充父項
- 10. 使用從兩個查詢返回的數據填充tmp表
- 11. 使用數據庫查詢結果填充下拉列表
- 12. 使用MySQL數據填充HTML表格(多個查詢)
- 13. 使用CursorLoader查詢SQLite數據庫並填充AutoCompleteTextView
- 14. 使用MySQL查詢填充百分位數據(Pic)
- 15. 我可以使用SQL從XML查詢/填充數據嗎?
- 16. 使用MySQL查詢填充Outlook正文
- 17. 使用查詢自動填充php mysql
- 18. 使用SQL查詢填充pytable
- 19. 使用LINQ查詢填充組合框
- 20. 填充DataGridView使用SQL查詢
- 21. 使用LINQ查詢填充類
- 22. T-SQL查詢使用可用日期填充下拉列表
- 23. 如何查看填充Excel電子表格的Oracle查詢?
- 24. Mysql查詢,根據其他填充值
- 25. 根據子查詢填充列值
- 26. 查詢來填充根據另一列
- 27. 用多個mysql查詢中的數據填充對象數組
- 28. SQL查詢:填充只
- 29. 填充查詢 - 貓鼬
- 30. 預填充(查詢)SelectField - WTForms?
如何笨? –
@amiawizard我沒有使用Codeigniter的經驗,但這裏是文檔http://codeigniter.com/user_guide/general/caching.html –
爲什麼要在CRON作業上使用頁面緩存? –