2011-11-03 28 views
1

我將圖像存儲在與我的PHP網站上的文章相關的文件夾中,並且想要根據作者輸入設置顯示圖像的順序。我開始時使用前面的數字命名文件,但是考慮在文本文件中記錄順序,以避免重命名每個文件並保留其原始文件名,或者可能將訂單存儲在MySQL表中。使用MySQL代替文本文件或文件名以便使用PHP的圖像順序更快更好嗎?

我的問題是關於最佳實踐和速度 - 每次文章加載時,它都必須找出要顯示圖像的順序。我希望得到一些關於哪種方法最好,最快的方法。

例如,與使用MySQL查詢和更新語句相比,使用PHP讀取文件夾中的文件名列表要慢得多,還是打開文本文件並讀取內容?

回答

3

我會說很多取決於您的基礎硬件/文件系統/ MySQL連接性能。一次訪問磁盤,只是讀取圖像很可能是您最快的選擇。但是你需要提前手動命名你的文件。

Mysql需要TCP或* NIX套接字連接,這可能會減慢速度(很多事情取決於您擁有的圖片數量和數據庫鏈接的「質量」)。如果你有很多文件,性能可能可以忽略不計。儘管如此,從文件中讀取數據可能會更快,而不需要設置數據庫連接;儘管如此,仍然必須記下ID /文件名對應關係。

我想在你的情況下嘗試一下,看看php stat命令,看看它是否可以幫助你排序圖片。根據您擁有的圖片數量(使用較低的數字,效果會更好),性能可能不會受到嚴重的性能影響,並且您不能保留單獨的圖片/創建日期元組列表。隨着圖片數量的增長,文件列表方法在我看來似乎是解決問題的合理方法。然而,只要將圖片標準化爲圖片數量的增加就可以告訴你事實。因爲,我認爲,根據您的具體情況,您可能會有很多變數。

+0

哦,謝謝,stat命令對於與圖像相關的各種事物很有用! – miahelf

+0

只是要小心,因爲如果您在單個目錄中有多個條目,它會變得很慢。我們在談論多少張照片? – maraspin

+0

我猜「圖庫」類型的文章大概有100個左右的圖片,每個常規文章大約10-20張圖片看起來很公平。 – miahelf

1

imho,使用mysql會比較慢,但是要容易得多。如果MySQL服務器在同一臺服務器上託管(或同一臺服務器上的專用空間,如雲的Linux內),那麼它很可能不會節省太多時間

編輯

,如果你想要做一個測試,你可以使用microtime函數來確定需要多長時間才能追加和排序文件,以及從mysql獲取所需的時間需要多長時間

+0

它是共享主機,我猜MySQL服務器在同一個數據中心,但它不能連接到本地主機,所以我猜它至少是另一臺計算機。 – miahelf

+0

@miahelf然後文件名將是最快的,前一段時間我有一個類似的項目,但訴諸於MySQL分貝,因爲它更容易處理文件排序 – topherg

+0

我想這就是我在想什麼,但想要一些輸入,似乎是做對SQL數據庫的額外連接和查詢有時會導致站點在嘗試與其他服務器通信時滯後。 – miahelf

2

如果您關心的是性能,爲什麼不保存列表(可能已經用HTML格式)到一個文件。當你的頁面加載只是

$code = file_get_contents("cache_file.html")

,並輸出給用戶讀取文件。最快的解決方案是將文件存儲爲.html,並讓Apache直接提供服務,但只有當您的頁面沒有任何其他動態部分時才能使用。

爲確保您的緩存文件是最新的,您可以使其無效並在一段時間後重新創建它(具體時間取決於圖像更改的頻率),或檢查緩存文件創建日期之後目錄是否更改。如果您可以觸發映像目錄中的更改(例如,如果更改是從您編寫的一段代碼中進行的,則始終可以確保在更改映像時刷新緩存)

希望這有助於

+0

你可以使用一個xml數據庫來創建一個沒有sql的數組 – topherg

+0

嗯......這個XML提示只是爲了跟蹤一個有序的列表,在我看來就像射擊瓦特/火箭筒到螞蟻;-)只是一個列表,爲什麼還要麻煩作爲XML文檔有一些內在複雜的東西?一個.ini文件可能就足夠了。 SQLite可能也是一個不錯的選擇。你不覺得嗎? – maraspin

+0

我喜歡緩存文件的想法,一旦保存了訂單,然後生成HTML並根據需要添加。 – miahelf

2

這聽起來像不成熟的優化。

我的問題是關於最佳實踐和速度 - 每次文章加載時,都必須找出圖片的順序來顯示它們。

那麼,諸如「選擇文件名,來自圖像的標題,其中articleId = $ articleId按'order'排序」的查詢將在幾分之一秒內執行。這真的沒關係。做任何最簡單的事情,我可以建議做SQL選項。

+0

對於不成熟的優化,您可能是對的。 – miahelf

+0

我同意可能過早的優化問題。從他告訴我們的情況來看,我覺得他在FS上有文件,而不在DB上。因此,我認爲這是MySQL的東西是矯枉過正的功能......只是我的2CC。警告一切邪惡的根源當然是明智的:-D – maraspin

+1

無論圖像是在磁盤上還是在數據庫中(這也存儲在磁盤上,但是可惜)並不重要。 OP在談論他(或者至少我希望)在某種數據庫中存儲的文章。在打開連接來檢索文章內容的同時,他還可以執行查詢以獲取圖像的順序。當在羅馬... ;-) – CodeCaster

相關問題