我正計劃實施一個基本的CMS,我將在內部用於自己的開發。我想爲自己的需要開發一個自定義的CMS--這個東西比Dreamweaver更輕便,更便於攜帶,並且冗餘度更低,但是面向已經知道如何編碼並只需要整合信息的人。本質上,計劃是將所有內容都存儲在MySQL數據庫中,將其全部緩存在文件系統中,然後,每當通過提取PHP文件查詢數據時,都會將簡單的查詢發送到數據庫,以檢查資源上次更新的時間,並且如果系統上的緩存文件足夠近,它將從緩存目錄中提取;否則,緩存文件被覆蓋。將所有文件上傳存儲在一個MySQL表中? (TEXT and BLOB)
CMS將存儲數據庫中的所有上傳數據,以便在系統需要移動到另一個主機等時將所有內容都放在一個位置。它還使備份非常簡單,並且可以輕鬆擴展以實現差異/修訂存儲庫等。
我想創建一個包含上傳的所有文件和通過CMS界面創建的資源(頁面,模板等)的單個表格(例如「資產」)。理想情況下,這將處理兩種類型:ASCII(文本)和二進制(BLOB)。
表 「資產」
ID INT,蛞蝓VARCHAR,ASCII LONGTEXT,二進制LONGBLOB,INT類型,元TEXT,修改日期...
我的問題是,是否有意義放這個信息在一個表中? 「資產」表中的任何給定行只有ascii列或二進制列中的值,但從來都不會。這是否浪費了空間?完全放慢流程?
不會不必要地選擇列。 「type」字段將對應於「types」表中的id,它將列出文本類型(html,模板,明文等)和二進制類型(png,jpg,pdf,mp3,mp4等)。所以,我可以查詢,像這樣:
(顯然僞代碼)
$lastModified = SELECT modified FROM assets WHERE slug = $asset_slug;
if last_modified_date_of_file("cache/$asset_slug") != $lastModified :
$type_id = SELECT type FROM assets WHERE id = $asset_id;
$type_col = SELECT col FROM types WHERE id = $type_id;
if $col == 'ascii'
cache_file("cache/$asset_slug", SELECT ascii FROM assets WHERE slug = $asset_slug);
else
cache_file("cache/$asset_slug", SELECT binary FROM assets WHERE slug = $asset_slug);
即使未選擇/訪問/編制二進制數據,它是否會減慢數據庫速度?就像我說的那樣,我希望將數據存儲在中心位置,但默認情況下它將從文件系統上的緩存文件夾加載。無論如何,你是對的聯繫人的例子。我還沒有決定是否爲資產創建另一個「表格」 - 許多數據會有少量的任意數據,我正在考慮簡單地序列化數據(可能是JSON),並一次從在需要時排。 – 2013-04-21 16:46:57
它只會減慢數據庫的速度,因爲它消除了高效的機會;除非你處於高流量的情況下,這對你來說不太可能是個問題,這只是一團糟! – 2013-04-26 13:04:13