create table test
巴南ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
(
NID VARCHAR2(1) not null,
IMG BLOB,
zhengqueFlag VARCHAR2(1),
cuowuFlag VARCHAR2(1)
)
說明:
1、IMG字段只需要保存圖片,將圖片信息經(jīng)過Base64編碼,存到數(shù)據(jù)庫BLOB字段中。顯示的時(shí)候要經(jīng)過Base64解碼。
2、對(duì)于像“正確”、“錯(cuò)誤”用標(biāo)志位在區(qū)別。你可以用1表示正確、0表示錯(cuò)誤。當(dāng)然你也可以用漢字的保存這樣的信息。自己來設(shè)計(jì)。
然后你到網(wǎng)上查一下怎么樣對(duì)BLOB字段進(jìn)行操作。如果不行,我在增加回復(fù)。
商品圖片,用戶上傳的頭像,其他方面的圖片。目前業(yè)界存儲(chǔ)圖片有兩種做法:
1、 把圖片直接以二進(jìn)制形式存儲(chǔ)在數(shù)據(jù)庫中
一般數(shù)據(jù)庫提供一個(gè)二進(jìn)制字段來存儲(chǔ)二進(jìn)制數(shù)據(jù)。比如MySQL中有個(gè)blob字段。Oracle數(shù)據(jù)庫中是blob或bfile類型
2、 圖片存儲(chǔ)在磁盤上,數(shù)據(jù)庫字段中保存的是圖片的路徑。
一、圖片以二進(jìn)制形式直接存儲(chǔ)在數(shù)據(jù)庫中
第一種存儲(chǔ)實(shí)現(xiàn)(PHP語言):
大體思路:
1、將讀取到的圖片用php程序轉(zhuǎn)化成二進(jìn)制形式。再結(jié)合insert into 語句插入數(shù)據(jù)表中的blob類型字段中去。
3、 從數(shù)據(jù)庫取出圖片展示的時(shí)候。則是直接發(fā)送圖片內(nèi)容
4、
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row-this_image;
實(shí)現(xiàn)代碼如下:
$PicturePath = ‘/tmp/xxxjgjgj.jpg’;//假設(shè)這是上傳的圖片,php放在一個(gè)臨時(shí)文件夾。腳本執(zhí)行完畢后自動(dòng)刪除了。
$imgStream = fread(fopen($PicturePath, "r");
$blob_img = fread(fopen($imgStream, "r"), filesize($PicturePath));
$sql =” INSERT INTO Images (this_image) VALUES ($blob_img)";
注:this_image就是數(shù)據(jù)表中一個(gè)blob字段類型的字段
================取出展示圖片代碼
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row- this_image;
總結(jié):處理代碼感覺還真比較麻煩。其實(shí),我從來沒用過在數(shù)據(jù)庫中以二進(jìn)制存儲(chǔ)圖片的做法。我們用得更多的是存儲(chǔ)圖片的路徑,實(shí)際圖片是在磁盤上保存的(圖片二進(jìn)制放到數(shù)據(jù)庫,把數(shù)據(jù)庫的負(fù)擔(dān)弄重了)。
據(jù)我了解,互聯(lián)網(wǎng)環(huán)境中,大訪問量,數(shù)據(jù)庫速度和性能方面很重要。一般在數(shù)據(jù)庫存儲(chǔ)圖片的做法比較少,更多的是將圖片路徑存儲(chǔ)在數(shù)據(jù)庫中,展示圖片的時(shí)候只需要連接磁盤路徑把圖片載入進(jìn)來即可。因?yàn)閳D片是屬于大字段。一張圖片可能1m到幾m。
有個(gè)原則:圖片盡量不要存儲(chǔ)在數(shù)據(jù)庫中(是指不要二進(jìn)制形式保存到字段,而只保存圖片的路徑)。這樣的大字段數(shù)據(jù)會(huì)加重?cái)?shù)據(jù)庫的負(fù)擔(dān),拖慢數(shù)據(jù)庫。在大并發(fā)訪問的情況下很重要。這是一個(gè)經(jīng)驗(yàn)。去看看dba對(duì)數(shù)據(jù)庫性能調(diào)優(yōu)方面的分析都能得到這個(gè)答案的:就是圖片不要存儲(chǔ)在數(shù)據(jù)庫中。
就像這個(gè)規(guī)則一樣:文章分為標(biāo)題、作者、添加時(shí)間、更新時(shí)間、文章內(nèi)容、文章關(guān)鍵字
文章內(nèi)容一般是比較長(zhǎng)的。經(jīng)常使用text字段去存儲(chǔ)。文章的內(nèi)容就屬于大字段。一般文章內(nèi)容可以拆分到單獨(dú)一個(gè)表中去。不要與文章信息存儲(chǔ)在一張表里面。
我理解的原理是:mysql中一張表的數(shù)據(jù)是全部在一個(gè)數(shù)據(jù)文件中的。如果大字段的數(shù)據(jù)也存儲(chǔ)在里面。程序展示列表,比如文章列表。這個(gè)時(shí)候根本不需要展示文章內(nèi)容的。但是仍然會(huì)影響速度,數(shù)據(jù)庫查找數(shù)據(jù)其實(shí)就是掃描那個(gè)數(shù)據(jù)文件,文件容量越小,速度就會(huì)越快(為什么單表的容量在1g-2g的時(shí)候基本上要分表了)。拆分出去到一張單獨(dú)的表,就是單獨(dú)的文件了。我覺得,舉一反三,相互獨(dú)立,分離的思想不僅在系統(tǒng)開發(fā)中用到,在現(xiàn)實(shí)生活中經(jīng)常存在的。相互混合,就會(huì)造成相互影響。小巧,簡(jiǎn)潔是一種思想。
可以看看這篇翻譯的文章,
http//developer.51cto.com/art/201211/364472.htm
作者建議,三種東西永遠(yuǎn)不要放到數(shù)據(jù)庫里,圖片,文件,二進(jìn)制數(shù)據(jù)。作者的理由是,
對(duì)數(shù)據(jù)庫的讀/寫的速度永遠(yuǎn)都趕不上文件系統(tǒng)處理的速度
數(shù)據(jù)庫備份變的巨大,越來越耗時(shí)間
對(duì)文件的訪問需要穿越你的應(yīng)用層和數(shù)據(jù)庫層
把圖片縮略圖存到數(shù)據(jù)庫里?很好,那你就不能使用nginx或其它類型的輕量級(jí)服務(wù)器來處理它們了。
給自己行個(gè)方便吧,在數(shù)據(jù)庫里只簡(jiǎn)單的存放一個(gè)磁盤上你的文件的相對(duì)路徑,或者使用S3(備注:亞馬遜云服務(wù))或CDN之類的服務(wù)。
============================================================
關(guān)于mysql中的blob類型
bolb像int型那樣,分為blob、MEDIUMBLOB、LONGBLOB。其實(shí)就是從小到大,
blob 容量為64KB ,MEDIUMBLOB 容量為16M,LONGBLOB 容量為4G。
說實(shí)話,圖片用這樣子存儲(chǔ)用得還真少。使用php函數(shù)serialize進(jìn)行序列化的值,我看到有人存入這個(gè)字段中去。
php手冊(cè):serialize返回字符串,此字符串包含了表示 value 的字節(jié)流,可以存儲(chǔ)于任何地方。
mysql中blob字段存儲(chǔ)圖片有個(gè)通信大小的設(shè)置:
圖片要傳輸給mysql存儲(chǔ)起來,那么需要涉及到數(shù)據(jù)通信。mysql中有個(gè)配置是限制通信數(shù)據(jù)大小的。
my.conf配置文件中的max_allowed_packet,mysql默認(rèn)的值是1M。
好多圖片尤其是原始圖可能不止1m。傳輸?shù)臄?shù)據(jù)(也就是圖片)超過這個(gè)設(shè)置大小。結(jié)果就會(huì)出錯(cuò)
呵呵,限制挺多。感覺好麻煩。這樣子明顯占用與mysql交互的通信時(shí)間嘛。延長(zhǎng)響應(yīng)時(shí)長(zhǎng)了。我直接丟個(gè)圖片路徑”images/xxxx”給mysql。沒這么耗費(fèi)資源。
其實(shí)所謂的性能,最關(guān)鍵是數(shù)據(jù)庫性能。因?yàn)殡S著數(shù)據(jù)庫數(shù)據(jù)量增大,大部分時(shí)間耗費(fèi)是在php,Java等語言等待數(shù)據(jù)庫返回?cái)?shù)據(jù)的過程中耗費(fèi)時(shí)間。
網(wǎng)站訪問量大了后,具體的語言不是瓶頸,瓶頸都在數(shù)據(jù)庫。用c,,php,java,net都能操作mysql數(shù)據(jù)庫獲取數(shù)據(jù)。語言之間可能存在速度執(zhí)行差異,但是其實(shí)這種差別已經(jīng)很小了。至少我覺得,給予用戶感覺不到明顯。執(zhí)行相差0.0001秒用戶感覺并沒有明顯的區(qū)別??赡苷f,大并發(fā)(很多用戶同時(shí)訪問)的時(shí)候,就會(huì)體現(xiàn)到差別了。其實(shí)我覺得,大并發(fā)訪問是數(shù)據(jù)庫瓶頸。等待數(shù)據(jù)庫給予數(shù)據(jù)。沒達(dá)到一定級(jí)別實(shí)在體現(xiàn)不了差別。數(shù)據(jù)庫數(shù)據(jù)量達(dá)到一定級(jí)別。語言相差0.001s會(huì)給予用戶體驗(yàn)上的差別。我想,這也是為什么php很適合做web開發(fā)了。解析頁面速度快(解釋型語言,不需要編譯)??梢杂胘ava來與數(shù)據(jù)庫打交道獲取數(shù)據(jù)。php不直接操作數(shù)據(jù)庫,而是調(diào)用java提供的數(shù)據(jù)接口,獲取數(shù)據(jù),馬上展示在頁面中。這是利用了php的頁面執(zhí)行速度快的一個(gè)優(yōu)勢(shì)。
備份圖片數(shù)據(jù)和遷移數(shù)據(jù)方便
圖片以二進(jìn)制形式存儲(chǔ)在數(shù)據(jù)庫,有一個(gè)好處:備份的時(shí)候方便。直接備份數(shù)據(jù)庫,圖片也跟著備份。換句話說,遷移環(huán)境的時(shí)候是方便。
而圖片放在磁盤上的話,數(shù)據(jù)庫中存儲(chǔ)的只是圖片路徑。備份數(shù)據(jù)庫后。磁盤上的圖片也要跟著備份才行。
不過我覺得,備份這個(gè)好處不是很明顯。圖片在磁盤上,備份磁盤也沒很大的事情。打包壓縮也可以了?;ヂ?lián)網(wǎng)環(huán)境畢竟與傳統(tǒng)的軟件開發(fā)不同,web開發(fā)比較關(guān)注網(wǎng)站速度。也就是數(shù)據(jù)庫的速度。就像互聯(lián)網(wǎng)開發(fā)中,有時(shí)候?yàn)榱怂俣龋每臻g換時(shí)間的做法比較普遍,所以往往在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候并不一定遵循傳統(tǒng)數(shù)據(jù)庫設(shè)計(jì)三大范式。
數(shù)據(jù)庫中保存的是圖片路徑的話,在web開發(fā)環(huán)境下,其實(shí)有個(gè)更好處,就是cdn加速。就是下面要進(jìn)行總結(jié)的地方。
二、數(shù)據(jù)庫中保存圖片路徑
一般是這樣子的:
按照年月日生成路徑。具體是按照年月日還是按照年月去生成路徑,根據(jù)自己需要(不一定是按照日期去生成)。
理解為什么要分散到多個(gè)文件夾中去才是關(guān)鍵,涉及到一個(gè)原理就明白了:
操作系統(tǒng)對(duì)單個(gè)目錄的文件數(shù)量是有限制的。當(dāng)文件數(shù)量很多的時(shí)候。從目錄中獲取文件的速度就會(huì)越來越慢。所以為了保持速度,才要按照固定規(guī)則去分散到多個(gè)目錄中去。
圖片分散到磁盤路徑中去。數(shù)據(jù)庫字段中保存的是類似于這樣子的”images/2012/09/25/ 1343287394783.jpg”
原來上傳的圖片文件名稱會(huì)重新命名保存,比如按照時(shí)間戳來生成,1343287394783. jpg。這樣子是為了避免文件名重復(fù),多個(gè)人往同一個(gè)目錄上傳圖片的時(shí)候會(huì)出現(xiàn)。
反正用什么樣的規(guī)則命名圖片,只要做到圖片名稱的唯一性即可。
比如網(wǎng)站的并發(fā)訪問量大,目錄的生成分得月細(xì)越好。比如精確到小時(shí),一個(gè)小時(shí)都可以是一個(gè)文件夾。同時(shí)0.001秒有兩個(gè)用戶同時(shí)在上傳圖片(因?yàn)槟敲淳蜁?huì)往同一個(gè)小時(shí)文件夾里面存圖片)。因?yàn)闀r(shí)間戳是精確到秒的。為了做到圖片名稱唯一性而不至于覆蓋,生成可以在在時(shí)間戳后面繼續(xù)加毫秒微秒等。總結(jié)的規(guī)律是,并發(fā)訪問量越大。就越精確就好了。
我現(xiàn)在還沒碰到需要這么精細(xì)的。概率比較少。
有個(gè)方面總結(jié)一下:為什么保存的磁盤路徑,是”images/2012/09/25/1343287394783.jpg”,而不是” /images/2012/09/25/ 1343287394783.jpg”(最前面帶有斜杠)
我的理解:
連那個(gè)斜杠都不要。這里也是做到方便以后系統(tǒng)擴(kuò)展。
在頁面中需要取出圖片路徑展示圖片的時(shí)候,如果是相對(duì)路徑,則可以使用”./”+”images/2012/09/25/1343287394783.jpg”進(jìn)行組裝。
如果需要單獨(dú)的域名(比如做cdn加速的時(shí)候)域名,img1.xxx.com,img2.xxx.com這樣的域名,
直接組裝 “http//img1.xxx.com/”+”images/2012/09/25/1343287394783.jpg”
當(dāng)然數(shù)據(jù)庫是可以在前面加斜杠/保存起來,/images/2012/09/25/ 1343287394783.jpg
其實(shí)不方便統(tǒng)一。比如相對(duì)路徑載入圖片的時(shí)候,則是”.”+” /images/2012/09/25/ 1343287394783.jpg”
可能我還沒體會(huì)到壞處,以后會(huì)遇到問題的。不過,遵循慣例不加斜杠” images/2012/09/25/ 1343287394783.jpg”就對(duì)了。
涉及到一個(gè)新問題:為什么大部分系統(tǒng)都不會(huì)域名保存進(jìn)去,像這樣子http//wwwxxx.com/images/2012/09/25/1343287394783.jpg保存到數(shù)據(jù)庫中
曾經(jīng)與一個(gè)上海的網(wǎng)友聊天,他也是習(xí)慣不會(huì)把域名保存數(shù)據(jù)庫中過去。但當(dāng)時(shí)我們兩聊的時(shí)候,他對(duì)”域名保存進(jìn)去的做法”與”不保存域名進(jìn)去”也沒有一個(gè)明確利弊。他就覺得,沒有什么明顯的區(qū)別啊。
了解的知識(shí)越多,越有利于我們做決定??赡芫褪且粋€(gè)”感覺區(qū)別不是很大”的影響下,去做一個(gè)決定,反而對(duì)后面是比較大的影響的。至少是增加自己的工作量了。
其實(shí)把域名保存進(jìn)去,也不是什么滔天大罪的事情。但凡是經(jīng)驗(yàn)豐富的開發(fā)人員都不會(huì)這樣子做。這是一個(gè)經(jīng)驗(yàn)積累出來的,所以上海那個(gè)網(wǎng)友也對(duì)此并沒有明顯的概念很正常,他說他不知道cdn方面的(當(dāng)然覺得存?zhèn)€域名進(jìn)去沒什么大不了的)。需要了解cdn知識(shí),什么情況下會(huì)用到cdn知識(shí)。
雖然是做開發(fā)人員,不需要關(guān)注運(yùn)維和服務(wù)器之類的知識(shí)。不過了解一些就有利于理解了。
這里涉及到cdn加速。
關(guān)于cdn原理(就是內(nèi)容分發(fā)網(wǎng)絡(luò))
cdn,我理解其本質(zhì)就是為了解決距離遠(yuǎn)產(chǎn)生的速度問題,使用就近的服務(wù)。
從中國請(qǐng)求美國一臺(tái)服務(wù)器上的圖片。一般比較慢,因?yàn)榫嚯x這么遠(yuǎn),網(wǎng)絡(luò)傳輸是存在損耗的,距離越遠(yuǎn),傳輸?shù)臅r(shí)間就越長(zhǎng)。一般會(huì)看到瀏覽器左下角顯示:“已響應(yīng),正在傳輸數(shù)據(jù)..”。這不是服務(wù)器本身問題了。實(shí)際上服務(wù)器早就響應(yīng)請(qǐng)求,把數(shù)據(jù)發(fā)給客戶端,但是網(wǎng)絡(luò)問題,就一直在傳輸,沒傳完了。
在中國,是南北距離遠(yuǎn)的問題。南北還會(huì)涉及到跨網(wǎng),南方用戶使用電信居多,北方用戶網(wǎng)通居多。兩個(gè)線路需要跨越,會(huì)有時(shí)間延遲。北京到廣州的距離,如果直接請(qǐng)求
cdn加速就是適應(yīng)這個(gè)需求產(chǎn)生的:現(xiàn)在不請(qǐng)求美國的服務(wù)器。直接在中國安放節(jié)點(diǎn)(節(jié)點(diǎn)是比較籠統(tǒng)的詞語,可以理解成一臺(tái)服務(wù)器,也可以理解成一個(gè)機(jī)房,就是一個(gè)點(diǎn)嘛),請(qǐng)求距離近的節(jié)點(diǎn)。這樣子就不需要那么遠(yuǎn)的距離了。
記得以前在長(zhǎng)沙的網(wǎng)站,團(tuán)購以城市分站的形式。北京和長(zhǎng)沙用的是同一套程序。服務(wù)器在長(zhǎng)沙。北京用戶訪問北京站的時(shí)候,實(shí)際上需要遠(yuǎn)距離訪問長(zhǎng)沙的服務(wù)器。速度怎么都快不起來。跟服務(wù)器性能完全沒關(guān)系。當(dāng)時(shí)不懂這些。不清楚怎么折騰。看那本《前端優(yōu)化技巧》,想辦法去做js代碼壓縮,瀏覽器緩存之類的。實(shí)際上瞎折騰。不是說這些前端優(yōu)化不重要,哲學(xué)上有主次矛盾之分,瓶頸在哪里就去突破哪里。沒解決主要矛盾,問題并不會(huì)迎刃而解。當(dāng)時(shí)也不是數(shù)據(jù)庫瓶頸。如果去優(yōu)化數(shù)據(jù)庫。也不會(huì)明顯改善。就那點(diǎn)數(shù)據(jù)量。根本就達(dá)不到瓶頸。哪里談得上主要矛盾。隨著后來去其他公司工作,接觸一些東西,類似不找瓶頸的優(yōu)化例子發(fā)生在身邊好幾次了,先沒找到瓶頸就瞎去優(yōu)化。我的同事可能是抱著多多益善的心態(tài)去做的,但主要矛盾(技術(shù)上說是瓶頸)沒找到,也沒改善。
當(dāng)時(shí)如果沒想到是距離問題。也就不會(huì)想到cdn,當(dāng)時(shí)其實(shí)我根本不知道cdn服務(wù)。我只知道,google這些網(wǎng)站肯定在中國部署的服務(wù)器,要不然,中國用戶還去訪問美國的服務(wù)器,那再好的服務(wù)器都會(huì)速度慢的。
由于自己搭建cdn環(huán)境和機(jī)房的資金比較大(需要大量的服務(wù)器),也需要人力維護(hù)。反正一般的公司弄不起,其實(shí)根本不劃算。淘寶以前用商用的cdn服務(wù),后來商用的扛不住了,就搭建了自己的cdn網(wǎng)。我不知道新浪有沒有自己搭建,但其實(shí)我覺得跟淘寶的特點(diǎn)有關(guān),店鋪很多,無論是商品還是交易記錄總計(jì)起來商品很多的圖片,圖片都是靜態(tài)的部分,cdn本來就是用來做靜態(tài)的(圖片,css,js等)請(qǐng)求分發(fā)用的。
我之前在網(wǎng)上看到一句話,cdn網(wǎng)絡(luò)不是一般的公司玩得起的。
一般的公司自己搭建cdn網(wǎng)絡(luò)成本高,所以就有商業(yè)的cdn提供付費(fèi)租用服務(wù),這是一項(xiàng)很成熟的業(yè)務(wù),很多這樣的公司,大部分全國性的互聯(lián)網(wǎng)公司都會(huì)使用到cdn。
總結(jié):cdn服務(wù)。對(duì)于靜態(tài)內(nèi)容是非常適合的。所以像商品圖片,隨著訪問量大了后,租用cdn服務(wù),只需要把圖片上傳到他們的服務(wù)器上去。
例子:北京訪問長(zhǎng)沙服務(wù)器,距離太遠(yuǎn)。我完全可以把商品圖片,放到北京的云服務(wù)(我覺得現(xiàn)在提供給網(wǎng)站使用的云存儲(chǔ)其實(shí)就是cdn,給網(wǎng)站提供分流和就近訪問)上去。這樣子北京用戶訪問的時(shí)候,實(shí)際上圖片就是就近獲取。不需要很長(zhǎng)距離的傳輸。
自己用一個(gè)域名img.xxxcom來載入圖片。這個(gè)域名解析到北京的云服務(wù)上去。
做法:數(shù)據(jù)庫中保存的是” images/2012/09/25/1343287394783.jpg”,
這些圖片實(shí)際上不存儲(chǔ)在web服務(wù)器上。上傳到北京的cdn服務(wù)器上去。
我從數(shù)據(jù)庫取出來,直接”img.xxxcom/”+” images/2012/09/25/1343287394783.jpg”
比如如果還有多個(gè),就命名img1.xxcom、img2.xxcom
反正可以隨便。所以如果把域名直接保存進(jìn)去。就顯得很麻煩了。遷移麻煩。
像淘寶,凡客,亞馬遜這些電子商務(wù)網(wǎng)站,我們看到請(qǐng)求的時(shí)候,下面往往會(huì)有
img1.xxx.cdncom
img2.xxx.cdncom
其實(shí)他們保存在數(shù)據(jù)庫中的是相對(duì)路徑。有些是不需要在數(shù)據(jù)庫保存的,縮略圖可以實(shí)時(shí)訪問的時(shí)候用程序生成(節(jié)省很多存儲(chǔ)空間)
實(shí)際上,把域名保存在數(shù)據(jù)庫中,非常不利于系統(tǒng)遷移。一旦換個(gè)域名的話,原來保存在數(shù)據(jù)庫中的是“wwwabc.om/images/xxxxxx“,因?yàn)槁窂蕉荚跀?shù)據(jù)庫中寫死了。下回?fù)Q個(gè)域名就用不了了。那個(gè)時(shí)候自己去寫sql語句批量更新字段吧。
幾個(gè)術(shù)語:
icp,Internet Content Provider,也就是網(wǎng)絡(luò)內(nèi)容提供者。聯(lián)想到我們運(yùn)營一個(gè)網(wǎng)站需要icp備案了嗎?你自己運(yùn)營網(wǎng)站,你就是icp服務(wù)商
IDC(Internet Data Center),互聯(lián)網(wǎng)數(shù)據(jù)中心。IDC的概念,目前還沒有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)。通俗點(diǎn),就是提供機(jī)房托管(服務(wù)器租用和托管),域名注冊(cè)之類的。
關(guān)于淘寶的圖片存儲(chǔ)
了解到:淘寶以前使用了商用的存儲(chǔ)。但是沒法滿足需求。據(jù)說,到2010年,淘寶網(wǎng)后端保存著286億張圖片。商用的系統(tǒng)系統(tǒng)沒法滿足需求的時(shí)候。他們就自己開發(fā)了一個(gè)tfs。大規(guī)模的小文件在磁盤上讀取,需要磁盤磁頭頻繁的尋道和換道。大并發(fā)情況下和大量的操作確實(shí)很麻煩。其實(shí)借鑒了當(dāng)時(shí)google公布的gfs設(shè)計(jì)論文。google有相冊(cè)服務(wù)。為每個(gè)用戶提供上傳圖片存儲(chǔ)。
估計(jì),google是率先實(shí)現(xiàn)這種小文件網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)的。
有個(gè)觀點(diǎn)比較好:對(duì)于老板們而言,往往覺得,用錢能解決的都不算問題。但問題在于,你遇到的問題,別人都沒遇到過。那這個(gè)時(shí)候你就沒有經(jīng)驗(yàn)可以參考或者直接拿來使用。只有自己參考一些思路去創(chuàng)造技術(shù)了。
三、關(guān)于圖片進(jìn)行云存儲(chǔ)(cdn加速)
曾經(jīng)看過這個(gè),這個(gè)是比較適合創(chuàng)業(yè)公司的。價(jià)格相對(duì)便宜
https//wwwupyun.com/
介紹提到,我們?cè)谌珖鞯夭渴鹆?5個(gè)CDN節(jié)點(diǎn),500多臺(tái)服務(wù)器,電信,聯(lián)通,移動(dòng)和教育網(wǎng)的4線帶寬。
其實(shí),現(xiàn)在的云存儲(chǔ)本質(zhì)就是一個(gè)cdn服務(wù)商。你把靜態(tài)的圖片上傳到他提供的服務(wù)器上去(ftp方式上傳或者api形式編寫程序上傳)。他為你做就近節(jié)點(diǎn)訪問。
計(jì)費(fèi)方式:按照流量付費(fèi),99元購買100g。怎么算流量。每次訪問文件的大小累加,比如一個(gè)1m的文件,訪問一次流量就加1m。
我個(gè)人理解,對(duì)于圖片的量不大的情況下,使用這種云服務(wù),好處不是節(jié)省存儲(chǔ)空間。你自己的服務(wù)器100g的空間可能創(chuàng)業(yè)型公司都沒用完,不是什么存儲(chǔ)空間不夠用,然后去用云存儲(chǔ)。以前我對(duì)cdn比較模糊,有這么點(diǎn)理解,或者以為是分散網(wǎng)站web服務(wù)器流壓力,服務(wù)器分流。這些好處是有的。但是,只要理解了cdn產(chǎn)生的背景和解決的關(guān)鍵問題后,就會(huì)明白云存儲(chǔ)關(guān)鍵好處在于:給用戶就近節(jié)點(diǎn)訪問,加速。
我覺得,如果不是出于這個(gè)考慮,或者達(dá)不到這樣的目的。用其他方案也完全可以替代。何必使用云存儲(chǔ)呢?就是你無非有實(shí)力做到全國多個(gè)節(jié)點(diǎn)去部署服務(wù),才需要租用cdn來幫你,畢竟他們是規(guī)模產(chǎn)生的效益,專注于解決這個(gè)領(lǐng)域。
1、使用blob將圖片保存為二進(jìn)制格式,(可以用瀏覽器來轉(zhuǎn)換)隨后用base64編碼來保存圖片,再將base64編碼保存進(jìn)數(shù)據(jù)庫的clob類型字段上。
2、然后要用一個(gè)數(shù)據(jù)名稱System.Data.OracleClient。
3、創(chuàng)建一個(gè)儲(chǔ)存文件,然后把相關(guān)代碼寫入比如string execSql="insert into clob_table(clob_id,) values(1,:clob_pic);"編寫代碼的時(shí)候注意,后綴的符號(hào)(;")也要寫入,不然無法進(jìn)行下一步指令。
4、之前上面用的是base64編碼,當(dāng)顯示圖片的時(shí)候要將圖片輸出到瀏覽器流中,不然在base64里面是看不到圖片。
5、在輸出的時(shí)候要把圖片轉(zhuǎn)換成二進(jìn)制(buffur即二進(jìn)制編碼)。
6、隨后上傳即可,然二進(jìn)制流也可以存成文件(File)存到FTP服務(wù)器,當(dāng)需要的時(shí)候可以根據(jù)路徑進(jìn)行下載的。
1、明白一些概覽:
1)上傳的圖片并沒有真正的存儲(chǔ)在oracle數(shù)據(jù)庫里,orcale數(shù)據(jù)庫里其實(shí)存儲(chǔ)的是圖片的路徑。
2)從瀏覽器上傳圖片到后端Action,action調(diào)用相應(yīng)文件存儲(chǔ)邏輯(文件存儲(chǔ)系統(tǒng))由文件存儲(chǔ)系統(tǒng)完成圖片的存儲(chǔ),并返回文件的路徑。最后將這個(gè)路徑保存到oracle數(shù)據(jù)庫(這個(gè)部分可以很簡(jiǎn)單也可以很復(fù)雜視實(shí)際情況而定)。
2、相關(guān)刪除邏輯,通過數(shù)據(jù)庫里的文件路徑找到實(shí)際的存儲(chǔ)位置執(zhí)行刪除。刪除成功后再刪除數(shù)據(jù)庫里相關(guān)記錄。
分享題目:oracle如何記錄圖片,oracle 圖片
本文鏈接:http://www.rwnh.cn/article26/dscdccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、面包屑導(dǎo)航、云服務(wù)器、建站公司、、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)