全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2494
推到 Plurk!
推到 Facebook!

資料庫如何存放共用文件

 
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-03 21:29:27 IP:61.231.xxx.xxx 訂閱
小弟為個人資料管理寫了一個小系統。這個系統主要是針對現在人的硬碟上通常會有很多與人或事或物有關及不同型態的檔案,如MP3/MDB/JPG/XLS/DOC/TXT/XML/CSS/JAVA等檔案的管理而存在。這些檔在再加上一些相關的說明、註記...等等資訊組合起來使用。為了個人管理方便檔案,這些檔是直接放在硬碟上,資料庫除了相關的記錄外只記錄檔名及目錄名。本來純是供個人使用,後來因為覺得還蠻不錯用,就將檔集中到集中的目錄下共用。檔案維護與移殖就夾雜以WinRAR及幾個簡單的模組湊合者用了,用來覺的尚可。以上是純個人使用的,所以寫的很鬆散,安全措施也作的很差。
如果我要將這個檔案集中管理的功能寫給多人長年使用,那勢必不能用現在這個很脆弱的架構來運作。小弟想將它移到MSSQL上,是用Binary-image的欄位型態去存這些檔嗎?我要如何作?有那些要注意的地方?
同理,如果要移到PostgreSQL/MySQL/Access要選那種欄位型態,及該注意那些問題?
先謝謝各位大大的指點與分享。

------
Kevin
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-03 22:46:40 IP:211.22.xxx.xxx 未訂閱
我剛好寫完一支給公司用!
MSSQL中要擺放文件,執行檔等BINARY FILE皆可,欄位格式設成IMAGE,存取則使用TBlobStream即可達成。
你如果想要作的更精緻可以配合自行撰寫的USER ACCOUNT權限管理來限制存取的檔案文件。TBlobStream的用法,本站裏面很多,搜尋一下即可找到一堆,至於PostgreSQL/MySQL沒用過。
請參考~
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-04 07:48:22 IP:61.231.xxx.xxx 訂閱
小弟清早起來看到苦思多日的問題,馬上就有前輩惠示,亂感謝一把的。
感謝前輩指點。這是個很有趣味的題目,又夠我玩好一陣子了。
小弟還有一些問題想向前輩們請益。
1.通常這些檔雖然很重要,可是它的篇幅倒往往不會很大,可是有些檔就很可能會動輒上Mega或數十Mega,那這會不會對資料庫運作的速度造成大影響?而這些影響要如何處理才好?這些異動會寫入到交易日誌以備還原使用嗎?
2.不知道可以存的檔案種類是不是有限制?
3.小弟通常都會順手寫個Access的版本,可否請教前輩Access是用那種欄位格式存儲?
謝謝前輩的指點。
------
Kevin
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-04 20:37:05 IP:211.22.xxx.xxx 未訂閱
===================引 用 文 章===================
1.通常這些檔雖然很重要,可是它的篇幅倒往往不會很大,可是有些檔就很可能會動輒上Mega或數十Mega,那這會不會對資料庫運作的速度造成大影響?而這些影響要如何處理才好?這些異動會寫入到交易日誌以備還原使用嗎?
沒有!但看你檔案怎麼存取,我都用TFileStream。
3.小弟通常都會順手寫個Access的版本,可否請教前輩Access是用那種欄位格式存儲?謝謝前輩的指點。
大檔案不建議用Access,效率有問題就算了,還可能資料毀給你看!我的經驗是超過50MB就快讓人不耐了。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-05 18:12:33 IP:61.231.xxx.xxx 訂閱
謝謝前輩。小弟拜領。小弟收益良多。
原先單純用原始檔案來管理的方式,資料是真有點脆弱,只能適合在單人的環境下使用。至多配合Fedo給少數人小心使用的缺點,現在可以大幅度改善。資料保固性及機密性強化不少。謝謝了。
小弟看過MySQL/PG的文件談及用DB存各類型檔案型資料時,有提到表格中凡有這類性質之欄位,其讀取速度都會變慢不少。當然,小弟可以將表格作切割及在須要時才讀檔以減輕這個問題。不過,實在剛開始玩,沒有經驗,真是會連讀取的速度都會變慢很多嗎?
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-05 18:19:41 IP:61.231.xxx.xxx 訂閱
小弟現在是將檔案集中讓多機共享,以身份及密碼將目錄整個打開或關上。這個是比較簡單的作法。小弟也考慮不讓User直接碰觸這個集中的目錄,而讓系統代為存取。這個另類的作法應該也有實例才是。可否分享一下前輩們的經驗?謝謝。
------
Kevin
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-05 19:06:20 IP:220.130.xxx.xxx 未訂閱
如果是M$平臺上,乾脆弄個AD..連寫都不用寫?
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-08 20:24:13 IP:61.231.xxx.xxx 訂閱
Coffee兄:你好。
小弟這兩天在結案子,沒有即時回,抱歉了。以往'裝W2KServer,裝到後來又是DHCP,又是DNS、又是WinS,再加個正向及反向的設定,真是煩死人了。所以我往往能將這部份丟給別人,就丟出去了。
因為我要對這些檔案作更多更強的控制,甚至有時連是誰,及何時有人來開這些檔,小弟都希望能管制一下。所以可能還是要直接寫個AP來管較放心。
謝謝了。

------
Kevin
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-08 23:47:07 IP:203.73.xxx.xxx 未訂閱
這是沒錯啦..再說M$的東西也不是很穩..萬一再中個毒就更難搞了XD
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
japhen
中階會員


發表:2
回覆:57
積分:71
註冊:2006-08-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-10 00:00:24 IP:211.74.xxx.xxx 訂閱
有個很偷吃步的方法,你可以玩玩

把資料欄位型態設定成image,長度預設(我假設你用的是SQLSERVER或ACCESS,ACCESS則用OLE做欄位型態)

現在你想存東西進這個欄位(假設欄位名稱是abc)

ADOQuery1.fieldbyname('abc')TBlobField().savetofile('c:\windows\mypic.jpg');

啊我想對stream操作,怎麼寫?
ADOQuery1.fieldbyname('abc')TBlobField().savetostream(mystream);

不過,我用這個,並不是所有檔案都得有必要存進資料庫里,你得理解策略,如果有可能會讓你一個資料夾出現成千上萬個用戶存檔的話,我就會把檔案存進資料庫,至少有資料庫幫我做管理,也好維護版本(比如說mp3、圖檔這類半大不小的檔案又多又煩的)

啊如果你要存的是超大檔案(電影檔、iso檔),那就算了吧

oracle、mySQL直接用BLOB做欄位吧


------
歡迎在大陸的台商加入我們的行列
台商小棧 www.twgocn.com
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-01-11 07:20:10 IP:61.231.xxx.xxx 訂閱
謝謝兩位大哥熱心回覆。小弟當初是個人下班後寫的這個系統,主要是管個人資料,如電話、親友、筆記、家庭財務等。前後用下班時間也寫了一年多。自己用起來用的很順手。後來公事上有個類似的系統,要給多數人及不定人長期使用,才體會到要澈底修改架構。這幾天在重新規劃。對這個提目,小弟很有興趣。等下去辦公室抽個空後仔細聊聊。
謝謝兩位大哥的熱心回覆。謝謝。
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-01-13 16:23:02 IP:61.231.xxx.xxx 訂閱
謝謝 Coffee及japhen兩位大哥。小弟這幾天在寫加解密的工具及安裝測試Fedora-Samba,及測試Access及MSSQL與PostgreSQL存這些檔的問題。加解密寫了兩天順利寫好了;Samba試了一天只能抓到Windows的共享目錄,但Fedora提供出來的只能看到目錄及檔,但無法看檔內容;Access及MSSQL很順利的可以上下了,但PostgreSQL老是碰壁,上天下地翻了無數文章,但還是無解,真氣人。
看了japhen的回文,想想只要不是超大'檔就直接用DB來存也是很方便的,令小弟信心大增。小弟這幾天在幾個站裏到處搜尋91年以來的文章,收益良多。
小弟現在的規劃是:
1.不管是硬碟檔案或DB,均經過壓縮及加密處理。
2.以Access為主的專業版以原先寫好的直接存取硬碟檔案的架構為主,但搭配Fedora-Samba作共享目錄管理。用Samba而不用WindowsServer是因為成本及功效的考量。此Samba均為隱藏式﹝即Windows的共享名稱尾加$﹞,且均由AP下令以不同身份﹝唯讀或可寫入﹞聯接取得後再覆製到本機來。及由AP管制寫入硬碟﹝壓縮加密後﹞。
3.PostgreSQL企業版:以DB為主,但亦可使用Samba目錄直接存取硬碟檔案。
這幾天頗花了我不少時間。
------
Kevin
japhen
中階會員


發表:2
回覆:57
積分:71
註冊:2006-08-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-01-13 23:12:59 IP:211.74.xxx.xxx 訂閱
用資料庫來存放檔案還有一個很方便的地方~~~~~~那就是權限管理大解放~~

試想,你把檔案都塞在一個資料夾中,幾十個幾百個都還好管,成千上萬個檔案,你光取檔名就取到昏倒(為了不發生重名,你肯定用隨機數取名,那52453576AB42101F31.DOC是什麼東西?),更不用講日後的管理,還有讀取的權限,另外,如果有病毒出現,一個資料夾想全毀掉,是輕而易舉的事

我還沒講到檔案多的時候,光是磁碟分配的浪費,就是一個大麻煩...............一天到晚讀檔刪檔...........磁碟空間的浪費,成天想辦法壓縮重整磁碟,那真的是會把人搞瘋掉的

還有還有,你的檔案讀取權限要怎麼設定?為了讓你的程式可以讀寫檔案,你肯定是把everyone的權限全開吧..............那麼除了你的程式可以打開該目錄的檔案,還有可以執行你的程式的人員也可以打開那堆檔案,你根本沒辦法AD來管理你的檔案,因為.....你的程式將會發生錯誤

而DATABASE存資料檔可就是最好的選擇,只要ROOT或SA的權限不亂放,除了你的程式,那堆檔案應該沒人讀的出來(用PL/SQL特殊工具除外),你也可以依權限來讓某些人只能打開某些檔案(SELECT的到的才能打開)

這就是我用DATABASE來管理檔案的重要原因
------
歡迎在大陸的台商加入我們的行列
台商小棧 www.twgocn.com
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-01-17 22:42:17 IP:61.231.xxx.xxx 訂閱
小弟這幾天還在與PostgreSQL-bytea奮鬥中,每天均是焚膏繼晷,不眠不休。
能存到DB中,其好處真是一言難盡。程式寫來真是簡便強大很多。我前些時寫了一個信箱管理,以管理我那N個信箱及陳年舊信。功能還可以,可是老是跟硬碟目錄扯不清的附檔,老是讓人覺得拖泥帶水的,很不舒服。現在有這個功能,打通任督二脈,亂爽一把的。原先我想寫個系統管硬碟檔案,可是對硬碟目錄這種脆弱的結構一直想不出來處理的辦法,現在這個也不是問題了,我不要以硬碟目錄作結構。我還是應該以由人事物的觀點來組職我的資料與檔案才對。
真是大解放。好過癮。
謝謝大家的幫忙。謝謝了。
------
Kevin
系統時間:2024-05-19 17:22:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!