簡體   English   中英

圖庫系統 - 哪種方法更好?

[英]Image Gallery System - Which Approach is Better?

我正在用PHP實現圖像上傳系統,需要以下內容:

  • 有類別
  • 允許用戶對圖像發表評論
  • 允許圖像評級

為此,我有兩種方法:

1.按文件夾實施分類

每個類別都有自己的文件夾,PHP將通過這些文件夾檢測類別。

優點

  • 結構化外觀,易於定位的圖像。
  • 使用本機PHP函數來操作和收集有關文件夾和文件的信息

缺點

  • 多重分類是一種痛苦
  • 需要保存數據庫中的完整路徑

2.按數據庫實施分類

數據庫中的每個圖像都有一個catID(或多個catID),PHP將查詢數據庫以獲取圖像

優點

  • 輕松實現多類別
  • 僅保存圖像名稱

缺點

  • 似乎更混亂
  • 需要查詢數據庫很多。

你認為哪個好些? 或者是否存在我缺少的第三種完全不同的方法?

只是一個注釋,我不需要代碼,我可以自己實現,我正在尋找實現的內容。

很想聽聽你的意見。

我相信第二個選項更好,DB會給你更大的靈活性,如果設置正確的索引,我認為文件系統的性能會更好。

在文件系統方法中,每個圖像僅限於1個類別,在數據庫中,您可以在圖像上設置多個類別。

認為Db更亂的騙局,對不起我在db中找不到合理的方式會比較麻煩,也許你的意思是文件系統沒有組織文件,但是你仍然需要組織文件文件系統並將它們分成多個文件夾以獲得更好的性能,如果你想獲得所有已經上傳的圖像,你可以查詢所有這些文件的數據庫,這將比所有類別文件夾上的ls快得多。
在使用數據庫方法時組織文件系統中的文件我的意思是你需要將它們分成幾個文件夾,實際上它取決於你預測圖像上傳的方式:

  1. 如果你預測上傳會在很長一段時間內傳播,那么我認為最好將文件按時間(日,周,月)放在目錄中。例如,如果我現在上傳圖像,它將轉到“/ web_path / uploaded_photos /week4_2012/[some_generated_string].jpg”
  2. 如果您不知道如何預測上傳,那么我建議您將文件分成一些通用的文件夾,如圖像名稱上的MD5哈希中的前兩個字母,例如,如果我的文件名是“photo_2012.jpg”哈希值為“c02d73bb3219be105159ac8e38ebdac2”,因此文件系統中的路徑為“/web_path/uploaded_photos/c/0/[some_generated_string].jpg”

需要經常查詢數據庫的第二個問題並不完全正確,因為在文件系統上需要相同數量的查詢速度要慢得多。

祝好運。

PS不要忘記為任何已上傳的圖像生成新文件名,以便不同用戶上傳相同圖像名稱或同一用戶時不會發生沖突。

我傾向於采用數據庫方法。 您列出了將數據庫作為con進行查詢的必要性,但這就是為數據庫構建的內容。 正如您自己指出的那樣,當涉及到屬於多個類別的項目時,層次結構具有嚴重的局限性,並且雖然您可以使用本機PHP函數來導航樹,但這比運行SQL查詢真的更快或更有效?

當然,實際的文件數據需要去某處,並且BLOBS有點問題,所以我將實際文件存儲在文件系統中,但是關於圖像(元數據)的所有數據在數據庫中會更好。 數據庫為您提供的額外靈活性值得所涉及的工作。

第二種解決方案(數據庫)實際上是對數據進行分類的TAG / LABEL系統。 這就是要走的路,最大的例子是Gmail和Stackoverflow。 您唯一需要注意的是如何建模標簽。 如果標簽未正確標准化,則從數據庫查詢會變得昂貴。

僅使用文件夾使文件存儲可靠,每個文件夾存儲一定數量的文件,即

/b/e/beach001.jpg

至於你的困境,這根本不是一個問題。
根據您的條件,您可以自己說數據庫是唯一的解決方案。

由於您需要一個用於存儲注釋和評級的數據庫,因此您還應該將類別存儲在數據庫中。 以后你可能還想存儲圖像標題和描述; 數據庫允許您這樣做。 而且我不會擔心很多時候查詢數據庫。

是否將圖像本身存儲在數據庫或文件系統中是一個單獨的問題,在此處討論

關於在文件系統中存儲圖像的注意事項:不要在單個目錄中存儲數千個圖像; 它可能會導致操作系統出現性能問題。 而是發明了一種在子目錄中組織圖像的方法。 您可以按日期,文件名,隨機等對它們進行分組。一些約定:

上傳日期:月/年

/uploaded_images
    /2010/01
    /2010/02

上傳日期:月 - 年

/uploaded_images
    /2010-01
    /2010-02

圖像名稱的md5哈希:第一個字符

/uploaded_images
    /0/
    /1/
    .
    .
    .
    /e/
    /f/

成千上萬的批次

/uploaded_images
    /00001000/
    /00002000/
    /00003000/

我最終得到了這個問題的最佳答案: 有效地將用戶上傳的圖像存儲在文件系統上

它就像一個魅力。 謝謝你的所有答案!

暫無
暫無

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

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