每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
          最近關心的內容:SSH,seam,flex,敏捷,TDD
          本站的官方站點是:顛覆軟件

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
          key words: 上傳文件

          目里面有上傳文件的需求,我想了一下不外乎下面兩種處理方法:

          1. 在數據庫表中建立一個blob字段存放用戶上傳文件.
          2. 在服務器上建立一個文件夾保存用戶上傳文件,數據庫表中只存放該文件的url地址.

          我本人現在比較傾向于第2種方案, 主要原因是擔心方案1的效率(我用的是mysql數據庫)。 但是處理過程中除了維護數據庫中表的字段還要維護上傳的文件,稍微麻煩一點。

          大家在項目里面又是怎么做呢? 給我點建議!謝謝


          討論內容見: javaeye

          robin更建議第二種方案,放在數據庫中主要的問題是 AppServer吃不消,開銷比較大.

          上面是摘錄,不過我們這里用的是Oracle9i AS,在Oracle的協作套間里一般文檔或者上傳的文件都是保存在數據庫里,還把這個特性作為Oracle 與別的協作套件之間不同的賣點。

          大家以為如何? 我直覺是Oracle的DB和oc4j的AppServer對付這個似乎沒有開銷上的擔心,但是沒有實際檢測過。

          換句話說,文件的管理是放在文件夾里方便還是數據庫里方便? 有點為難

          update (2007-5-13):
          還有一種方案結合了數據庫和IO,我認為比較可行,就是文件存在數據庫,但是下載的時候第一次從數據庫下載,然后第一次這個文件保存在一個臨時文件夾下面,以后每次下載的時候總是先檢查此臨時文件夾,如果已經存在則直接下載,如果沒有則從數據庫重復這個動作。當然,保存在臨時文件夾下的文件的命名需要唯一,這個應該沒有問題。
          posted on 2007-01-31 09:06 Alex 閱讀(1978) 評論(4)  編輯  收藏 所屬分類: javaweb技術Oracle

          評論

          # re: [討論]上傳文件放在哪里比較合適?[未登錄] 2007-01-31 10:49 hut
          同樣為難。如果用第二種方案,最好還要將文件壓縮或者改變格式。否則在系統中對權限有限制的文件,管理員從硬盤上就能看到。  回復  更多評論
            

          # re: [討論]上傳文件放在哪里比較合適? 2007-01-31 10:59 Yinzhe
          選擇起來是很困難的  回復  更多評論
            

          # re: [討論]上傳文件放在哪里比較合適? 2007-01-31 11:17 BeanSoft
          數據庫反應速度比 Apache 慢不知道多少倍去了... 照這樣說新聞站點都不要做靜態頁面了, 都入庫得了. 但是大站的, 如 163, sohu, sina, 新聞都是靜態的頁面, 只有評論才會入庫. 軟件下載站一個軟件就500MB, 你再入庫...反正靜態內容存硬盤 + 數據庫記錄管理 是不二的選擇.  回復  更多評論
            

          # re: [討論]上傳文件放在哪里比較合適? 2007-02-01 15:39 BeanSoft
          還有個問題就是 Mysql 存儲大文件的問題. 根據你的情況我基本上斷定是有點不太現實了:
          在MySQL3.23時(新版也是),最大允許的信息包是16MB,從4.0.1及以上版本后,該值改為了1GB。而在使用時允許值是通過max_allowed_packet來設置的,一般來說,在客戶端和服務端都會有自己的#max_allowed_packet變量,所以要改變在信息交換中使用信息包的允許大小,就要正確設置客戶端及服務端的max_allowed_packet變量。
            如果使用mysql的客戶包,那么其默認值是16MB,則可以通過以上方式來啟動mysql:
          #mysql> mysql --max_allowed_packet=32M

            如果使用服務包,那么該值默認是1MB,通過以下方式啟動:
          #mysql> mysqld --max_allowed_packet=16M
          對于4.0以前的mysql應該使用
          #mysql> mysqld --set-variable=max_allowed_packet=16M
          也可以在配置文件中使用
          [mysqld]
          max_allowed_packet=16M
          指定信息包大小,注,4.0以前用
          [mysqld]
          set-variable = max_allowed_packet=16M  回復  更多評論
            

          主站蜘蛛池模板: 金寨县| 麦盖提县| 永宁县| 揭东县| 渭南市| 景洪市| 凤山县| 崇信县| 大冶市| 资中县| 塔城市| 潞城市| 济宁市| 五莲县| 江西省| 五指山市| 绥宁县| 都江堰市| 元朗区| 双峰县| 炎陵县| 集贤县| 兴隆县| 琼结县| 浦城县| 澄城县| 三门县| 黄陵县| 鄂伦春自治旗| 宣恩县| 汾阳市| 治县。| 大姚县| 怀安县| 普宁市| 望谟县| 麻阳| 永清县| 多伦县| 呼和浩特市| 获嘉县|