每日一得

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

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

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

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

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

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


          討論內(nèi)容見: javaeye

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

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

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

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

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

          評論

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

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

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

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

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

          主站蜘蛛池模板: 英超| 定南县| 子洲县| 宁乡县| 西畴县| 阜新市| 嘉荫县| 曲松县| 保德县| 云霄县| 阜南县| 北安市| 新建县| 淮南市| 句容市| 曲靖市| 开封县| 枝江市| 通化市| 东乌珠穆沁旗| 凌海市| 绥滨县| 永春县| 根河市| 拉萨市| 习水县| 乌拉特前旗| 富锦市| 宁南县| 启东市| 介休市| 德昌县| 山西省| 尤溪县| 临高县| 盐边县| 若羌县| 姜堰市| 桦南县| 濮阳市| 祁阳县|