Summary

 

這次演講的內容大致上如下,一個是Internet上的東西,一個是Multimedia,那這兩個東西當然不能代表說他未來會佔據這整個市場,那的確他在我們生活上慢慢地會面臨到,multimedia上面,在發展database的時候,會提到一個relational database;還有video browsing,video on demand,隨選視訊,一個Kala OK on demand.

 

information的型態作一個簡單的解釋,眼前所看到的和耳朵所聽到的其實都是我們的一個資訊,datainformation有什麼不同,簡單來看data是呈現在各位眼前的一個資料,可是information呢,是經過整理過的,是比較有意義的資料,所以在database裡面有很多不同的領域,有一個叫做data miningdata mining呢,基本上是希望從data裡面去抽取一些information出來,然後在將這information透過另外一種機制,將information轉換,這是另外一種領域,但是不管怎麼樣,我們的媒體,我可以給你一個圖片,我可以給你一段video,我可以給你一串字,但是這一些對你來講都是data,但是我們為什麼要叫media而不叫data,過去我們稱為data的東西,他變的定義非常模糊,就程度上來講,我們能夠focusdatatype就非常有限,簡單來講,我們過去的所談的data,他是廣泛的指你所有的東西,但是,但是我們看到的除了文字還有圖片,所以我們現在把media這個東西加進來,所以我們包含了除了文字之外的東西,其實我們有很多的infomation不只是文字還包括了圖形聲音以及影像,包括透過影像與文字產生之後的另外一種東西.

 

90年代,談的多我想就是oo的技術,多媒體之所以會被拉來OO技術是一個重點,當認為oo是一個導火線,也就是說oo的觀念帶動了多媒體上的應用,當然多媒體上的應用可以用oo來做,最後我會提到,有一個部分就是這個,我怎麼把多媒體的東西,透過OO的術結合database把他帶出來,但是OO這個東西到目前為止,他被引用的大部分是presentation tool為多,但在system底下的,幾乎還是沒有辦法做到,目前嘗試的是如何把oo技術往下壓,目前只應用到多媒體,在database這邊有兩個分支,一個強而有力的站穩市場,relational database,一個非常有挑戰性的,是oodatabase.

 

hyper media,就是hyper link 的東西,就是hyper link 加上mutimedia,但是希望做的是interactive system,他基本上是透過hyper link的方法來作,最簡單的interactive system ,internet 來講的話,就是web page,是一個interactive,不過他的interactive 非常非常簡單,他只單純的透過一個hyper link 而已,也就是說他沒有額外的flow control.

 

transaction,你今天對於你的資料庫要做一個access 的動作的時候,你會碰到幾個很critical 的東西,包括你今天要做update 的動作,insert 的動作,delete 的動作,有些東西跟你的completion 來講他是一個完整的東西,而這個完整的東西,我們包括insert 兩筆data,delete 一個東西,再加上一個update,那麼對於一個database 來講,他必須把這個東西包成一個transaction,以下的演講內容有詳細說明.

 

database 要處理大量的資料,一定要有幾個機制,一個,index,一個是sorting,index 什麼樣的index,自己想辦法作,algorithm或是 data structure裡面告訴各位一大堆什麼index 的技巧啦,sorting 的技巧,你這些都可以用,現在最好的sorting,細節內容有說明.

 

演講內容:

 

因為時間上太短了,不能夠夠涵蓋太多東西,因為講坦白的,我們的經驗,可是呢,當你真正在做一個系統的時候,那簡直是天天跟code在一起,我們的一個經驗是說,別人呢,PHD拿到以後是天天在寫論文,那我們呢,是天天在寫code,也許有些人會覺得寫code一件很難的事情,但是在這幾天的新聞報導裡面,我們可以看到淡江有一個學生去破掉那個CIH的病毒,那他對於code的那種觀念已經慢慢地建立起來了,我是覺得說其實寫code是一種藝術,你可以把他寫得很好,也可以把他寫的很差,那過去呢,我剛剛提到寫code是一種藝術,我先回顧一下,因為我唸PHD的時候是唸Algorithm,計算方法,我想現在,各位都大四嘛,根據我的觀察,大部分的人會很想去考研究所,那其實現在目前的社會現象也是這樣,目前在我的部門呢有51一個人,在這51個人中有45個都是master,那我想其實這是一個趨勢喔,其實學歷並不代表什麼,可是呢,學歷是一種訓練的過程,在台灣的學歷呢,很特別,我想國立大學的學生和私立大學的學生有一點不一樣,因為透過競爭來產生的,過去呢,我們有一種理論,叫做80/20理論,什是80/20理論呢?其實就是82,那什麼又是82?我舉例來講,假設我們今天從一群人裡取出10個人出來,那他就有所謂的82的情形,那我們過去的理念是,假設有10個人是從國立大學出來的,那即使我亂猜,隨便亂點,10個會點到8個,這個基礎都還不錯的,但是私立學校呢,當然我們不能完全否定私立學校,我們的作法是比較謹慎一點,那當然對他來講,我們還是會挑到好的,只是比率比較差一點,其實淡江大學這個私立學校而言,當然他也培養出很多不錯的學生出來,那以台灣的教育來講,是全面性的,所以會考上國立大學的人呢?國文不能太差,英文不能太差,歷史不能太差,地理也不能太差,那其實就專業領域上來講,我們慢慢可以發現,其實私立學校,在專業領域上,慢慢再提升,所以我想,慢慢地他會改進,那想今天其實主要要談的東西呢,可以說是最近最hot的東西,其實也不能說是最hot,因為現在好像談電腦的東西,大概都脫離不了免不了,不管怎麼談都會談到這兩個,一個呢是Internet上的東西,一個是Multimedia,那這兩個東西當然不能代表說他未來會佔據這整個市場,那的確他在我們生活上慢慢地會面臨到,那舉例來講,Internet在三年前上Internet的人數和現在上Internet的人數,我想有數十倍的差距,那主要的原因,其實,資訊生活,那我想今天,跟database,那前面這一段,我會focus在多媒體的技術,後面這一段我會focusvideobrowsing,我們叫視訊的瀏覽技,multimedia上面,我們過去其實在發展database的時候,因為這個要講大概講三個禮拜都講不完,早期都會提到一個relational database,我想你們學校應該有開關聯式資料庫的課嘛的課,我今天大概會提一下有關資料庫的東西,那裡面其實都是基礎的觀念,可是呢,我待會裡面有一張圖,是要告訴各位資料庫裡面有很多的components是我們要做的,那這些東西呢,你從外面看不到,但是我沒有辦法在裡面講得非常深入,但我想,我今天這個data呢,我會對multimedia做一個introduction,基本上沒有那麼深入,但是會有一個基本上的概念,基本上這些東西給各位在Multimedia上的一些觀念,portingdatabase上面去,那我前面再加上一個multimedia的,那以現階段來講,過去的database是怎麼樣的一個方式,那未來的databasemultimedia上面,那他應該是怎麼去做,那當然再下來的話,是屬於video browsing,那這個部分來講的話,我想是一個新的概念,那我想各位應該聽過一個名詞,叫video on demand,隨選視訊,一個Kala OK on demand,什麼on demandmusic ondemand,對不對,這些東西,其實都有他的優點,因為我們目前資訊生活裡面的,可是我們的人,一天就是只有24小時,可是扣掉睡覺的時間,吃飯的時間加一加,那最多也是幾個鐘頭而已,對不對,可是那麼多的資訊,那當然挑我們有興趣的,我們能夠看的,我們看的懂得,對不對?所以透過這種方式來講,所以你希望會有一個,讓你在最少的時間內找到你想要的東西,我想這是一個很實際的問題,所以對隨選視訊也好kala ok on demand也好,這些都是因運而生的一個東西,對麼多的資訊情況下產生的東西,那後一個item是一個integration的一個architecture,那這個architecture呢,是我把multimedia的東西和database的東西和在一起,那當然有一個圖呢,是有關Internet的,那其實這都是我們最近在做的一些projects,那這些projects其實都蠻longterm的,大概都是兩年到三年左右的時間,所以其實剛開始的時候要propose這樣的一個architecture是很有挑戰性的,考慮到這樣的一個architecture是否夠周全,所以我想我們先來進入multimedia的東西,我想首先呢,我們對於這個information的型態作一個簡單的解釋,其實我們這樣看好了,我們眼前所看到的和耳朵所聽到的其實都是我們的一個資訊,可是事實上媒體來講的話,我過去呢,曾經問過一個問題,datainformation有什麼不同,回去各位可以去想想這個問題,簡單來看data是呈現在各位眼前的一個資料,可是information呢,他是經過整理過的,他是比較有意義的資料,所以在database裡面有很多不同的領域,有一個叫做data miningdata mining呢,基本上他是希望從data裡面去抽取一些information出來,然後在將這information透過另外一種機制,將information轉換,這是另外一種領域,但是不管怎麼樣,我們的媒體,我可以給你一個圖片,我可以給你一段video,我可以給你一串字,但是這一些對你來講都是data,但是我們為什麼要叫media而不叫data,過去我們稱為data的東西,他變的定義非常模糊,就程度上來講,我們能夠focusdatatype就非常有限,簡單來講,我們過去的所談的data,他是廣泛的指你所有的東西,但是,但是我們看到的除了文字還有圖片,所以我們現在把media這個東西加進來,所以我們包含了除了文字之外的東西,其實我們有很多的infomation不只是文字還包括了圖形聲音以及影像,包括透過影像與文字產生之後的另外一種東西,那我想這些都會是,大概就可以看到我們的media type是什麼,但是各位可以看到,我這裡沒有包含數字這東西,他也可以當作我們的media,但是數字上的media對於我們來講,他的意義並不是那麼大,那麼在這個地方來講的話,我們來看一下,其實我們對於media,有一個很特別的東西,各位可以看到這個我的重點在兩個領域,一個是分散一個叫continous,那discrete的東西他是分散的,那如果是continous的話,那他是連續的,代表他是跟時間有關的東西,另外一種情況就是說,你可以用其他的設備取得,或者你可以一些設備或工具去做合成,那其實現在所有的媒體喔,都可以利用各種方法達到這樣的效果,那所以我想我們一個來看imagetext,那這裡我會寫text,其實並不是string,所以基本上我在這裡所要涵蓋的東西,他比過去我們所講的data的定義裡面,會更為鬆一點,所謂鬆一點,就是他datalength不會被限制了,datasize不會被限制了,也就是說今天我給你的data,他可以是一個字,也可以是一篇文章,也可以是一個很小的圖,或是一個解析度很高的圖,,我可以給你一秒鐘的media也可以給你兩個小時的media,所以,也就是說,他在媒體上來講,他的data size已經不被限制了,另外一個,他所呈現的東西,他不是單一的,像文字他不是單一的,對不對,可是我給你的影像,我也可以是一個,他的顏色是不是夠多,他是一個65536的顏色還是16萬個顏色他可以是同一個information,那他呈獻給你看的,是完全不一樣的東西,可是對我們來講,他都是媒體,因為文章可以是兩段也可以是長篇大論,所以text來講的話,他一樣沒有data size的限制,好ok,那麼我們這個地方,我們所講的,他其實是靜態的一個資料,但是呢,我們的聲音和我們的video跟時間有關係,他是一個單一點上面的東西,你看到就看到了,他要透過一段時間,他才把所有的data通通取出來,那其實就跟時間有關係,那同樣的,animation,我們的動畫,其實動畫跟video,他的背景是一樣的,只是可能他的處理方法不太一樣,ok,像video的話那我就v8,他就拍進來了,對不對,可是我的動畫呢,不是啊,動畫是畫出來的,對不對,然後再一張一張把他scan進去,把他結合在一起,那或者,我們的畫可以用另外一種方式,我們畫第一張,再畫最後一張,然後中間用差分法把他變出來,但是他還是一個animation,所以在這個地方,各位可以看到,聲音可以被合成,因為可以透過很多的東西,我可以把他合成,那聲音和video會不會有問題,我剛剛提到了,video可以是合成的,所以有很多的這個寫真照片呢,頭是一個人,身體是另外一個人,這些都是合成的方式做到的,那另外一個,我想textgraphic也是一個,其實這是一個媒體的觀念,他是一個media type,我們在多媒體上面,其實若是找到另外一種新的媒體出現,我想大概找不到替代的新媒體,但是我想,我都可以把他歸類到media type裡面去,其實他也當作一些hardware,那這個地方我就不介紹了,除非有人告訴我說,我從來沒有摸過v8,應該很少,但是沒有摸過應該也有看過吧,這裡面東西在我們系上的的實驗室設備大概都會有,當然有一些東西比較特別,像是音樂鍵盤這些不一定會有,但是其他的東西大概都能夠看到的,好那麼,其實呢,在多媒體上來講,我們現在不談多媒體,媒體的type,我們希望把他拿來用,要不然他一點意義都沒有,本身他是我們用來傳遞的東西,譬如說,我怎麼把這個資料從這個點傳到另一個點,造就成另外一個東西,而這樣的一個東西,可以使我造就出另外一個東西出來,舉個例來講,譬如說,現在呢,有所謂交談式的系統,不曉得各位有沒有到中正機場,喔不,是松山機場,松山機場裡面有一個叫做導覽系統,動物園啦,動物園裡面應該有一個導覽系統,那這個導覽系統,基本上呢,基本上他是把這些媒體,結合在一起,但是呢,他有一個所謂交談式的作用,他在某一些時間點,他就會有一些動作,是他並不一定要停下來,他可以繼續往下走,這個是information狀態的利用,但是呢,他整個並不是單一的data,他可以放一些media在裡頭,他可以放聲音,放一些image在上頭,所以呢,這個地方,我把他變成三個dimensionB理來講的話,那其實早期呢,我們所做的東西就是dataproperty而已,datamanagement而已,那當然電腦他是informationmanagement,但是其實他information都是我們創造出來的,譬如說,一個品的總銷售額是多少,這是一個information,那這個information是算出來的,有伬是我們系統故意給他的information所以我們過去作的東西都在這個地方,所以這個部分呢,我們在先看這裡,是過去的,那這裡呢,這個data我們把他定義叫做??data,其就是我們剛剛講的,在我們過去的data裡面其實他的限制蠻嚴格的,第一個,他的字,他的本身,他的資料型態必須是固定的,那第二個,他的資料的長度也被限制下來了,被限制住了,那在這種情況下呢,舉例來講,我們先回到我的program好了,如果今天讓你處理一些文字上的應用,那你可能會去define一些data structure,那這些data structure,可能你會define一個array,那每一個array

那如果我今天給你一個資料庫,假設你的string length是固定常,假設我給你150個長度是固定的string,你有沒有辦法處理,你沒有辦法處理了,因為他已經超過我definedata structure了,對不對,所以對我的系統來講,他是非常嚴格的,你要給的data對不能夠超過定義的長度,好,我想各位應該有實作過這些系統喔,請各位一個人事系統好了,那我問各位,因為他是一個人事系統嘛,他一定要記錄人嘛,對不對,要記錄人的話,他一定要有一個記錄的是就是姓名,那姓名呢,我想請問各位,你的姓名呢,大概多長,8character還是10character還是12characterok,非常的requirement,這是沒有答案的喔,也就是說你今天,你告訴我,我只接受中文姓名,而且超過四個字,那就是多少呢,那就是8character嘛,對不對,可是如果你的資料裡面,有包含,因為我的公司可能會找老外,那完了,老外的姓名有時候很長,而且老外的處理方法不太一樣,他姓跟名是分開的,甚至他還有一個middle name因為這樣他的長度都是固定的,你只要一define下去就沒有機會去變了,所謂沒有機會是說,除非你要把你系統改掉,那若是你一define下去,就要按照你這個規格,所以呢,這個東西就是一個structure data,可是我們現在要處理的東西是個樣子的,可能給你一張圖片,請你scan進來,那甲這個人呢,他的技術比較差,所以呢,結果呢,掃進來是16色,size呢,是360乘以480,另外一個人呢,

比較厲害,他可以把顏色調成65536的顏色,可以把size調成640乘以480,挖,兩個data size完全不一樣,同一張照片,所以這種情況下,你的系統是不是應該也要接受這樣的東西,也就是我今天請各位去做一人事系統,但是這個人事系統要加上一張照片,所以你必須在你的系統裡面有辦法handle這一張照片,當然你可以說,我這張照片最大的size不能超過多少,可是你外界的device不能夠做這樣的一個東西,或是你程式沒有辦法作這樣的一個東西,你這樣限制是不是比較實際一點,也就是說你根本就做不到,所以不管怎麼樣,我們的系統應該要把所有的data把他加近來,那這些data都比較unstructure,也就是說我剛設定的限制都不能有,但對媒體上的應用,也就是說,我們data拿來可以做一些講一個比較簡單的方式,過去呢,我在做簡報的時候,我們都要用投影片,我現在都不用投影片了,其實這也不是環保,因為他本身,他的技術就是這樣子,過去,我電腦沒辦法處理這樣的東西,所謂的圖案啦,想這個東西,要畫這個,過去的電腦是text mode,我怎麼畫啊,跟本沒有辦法畫,所以我只好用投影片,可是現在就不一樣啦,我可以用powerpoint,可是powerpoint好像不太夠啊,我想要放一些video之類的,powerpoint就不行了,所以你必須透過一個??才能有presentation的能力,這是完全不一樣的,其實媒體上面其實過去早期,他的應用就在教育界,娛樂界,娛樂界是什麼,就是任天堂,game是最多的,現在你到賣場去看,我想有超過80%的軟體都是game,所以早期都在教育跟任天堂上面,他authoring的東西,也就是說透過authoring我可以把這東西叫出來,也就不一定只有在任天堂上可以用,他還有很多地方可以用,早期呢,也有人把他拿來做presentation用,那其實多媒體的應用這整個都是,那最大宗的,就是我剛剛提到的,交談式系統,訓練,有現在mail還可以傳影像和聲音,那還有整個industry,我們面臨到的,各位可以看到,整個computer的本身,現在的Internet,早期呢,不得了了,現在電話線一插,就連上了,所以現在有很多的東西已經跟過去不一樣了,在最後一張圖,我可以告訴各位,我有一個想法,就是在Internet上我如何,另外就是我們的內容本身,除了文字之外,還有很多圖片,除了影像之外,我可以把視訊的東西都放上來,那這些有沒有什麼困難,那一般的consumer就是一般的end user,他所最要用的的東西,那銋這些東西都跟多媒體有關,其實在這我們要談到,我們剛剛談到都是多媒體的東西,可是這些應你總是要把他製造出來嘛,那我想在90年代,談的多我想就是oo的技術,多媒體之所以會被拉來OO技術是一個重點,但我必須強調的是,這兩個東西,相對並不是相當大,當認為oo是一個導火線,也就是說oo的觀念帶動了多媒體上的應用,當然多媒體上的應用可以用oo來做,最後我會提到,有一個部分就是這個,我怎麼把多媒體的東西,透過OO的術結合database把他帶出來,但是OO這個東西到目前為止,他被引用的大部分是presentation tool為多,但在system底下的,幾乎還是沒有辦法做到,我們目前嘗試的是如何把oo技術往下壓,可是我們只應用到多媒體,那唯一不一樣的地方我們等一下會去介紹,在database這邊有兩個分支,一個強而有力的站穩市場,relational database,一個非常有挑戰性的,是oodatabase,可是oodatabase到目前,都還沒有辦法去搶relational database的市場,其實我們過去在台灣有兩支, 一個是凌群電腦, 叫作 relational database一個是資策會, 叫作 OODB

過去台灣有兩支,一個是凌群電腦,在做relation database,一個是資策會,在做oodb,到目前為止在市面上看得到的產品,大概只看的到凌群,並不是oodb 他的技術不好,其實他有他的限制在資料庫方面,第二個的話,所謂graph interface會帶動我們在整個資訊處理上面的不同,我想現在有沒有人告訴我說,他不用windows,或者是用unix 而不用所謂的motif,也就是所謂你不用graph interface,甚至告訴我說,他在用dos,不會了吧,講坦白的,graph interface 他所佔的resource 非常多,今天早期的486 4 MB ram,run 一下windows ,絕對起不來,因為它需要佔那麼大的 resource,當然,因為industry 已經到了這個程度,他不會沒有這個程度,所以不是問題,那這樣的 environment 使得有辦法去process 所謂的media ,*media 可以不受data size 的限制,我可去做這件事情,而且可以做到所謂的what you said,what you get,就是這麼簡單,另外一個,這邊我提到的,visual anything visual authoring,可以有很多東西,可以省掉很多programming的機會,會有這些工具,讓你已經可以做到這樣子的情況,舉例來講,各位有沒有做過homepage,都有吧,對不對!?,用的tool 是什麼frontpage ,沒用過frontpage 的舉手,只有一個,不好意思,front page 的東西,坦白的,你要不要寫program,沒有嘛,對不對??,可是在web page 做出來之後,你可能要在後台加點program,因為你可能要database,所以你可要寫些cgi,或是在windows 上面有個IIS,要寫asp program,像這些東西,但是不管怎麼樣子,我今天要把page 做出來,我用到什麼工具,一種是畫圖工具,一種就是frontpage,當然不只是frontpage,還有其他很多這個工具可以用,但是這兩個東西基本上都必須要寫program,而且他都叫做vision,我可以看到螢幕上的東西我要去做,我該去做什麼樣的工作,去作什麼樣的事情,authoring 的東西,其實,web 上的page 也是一個aurhoring的動作,這是我底下要談的,叫做hyper media,就是hyper link 的東西,另外一個名字叫hyper media,就是hyper link 加上mutimedia,就是講有關這樣的東西,怎樣把一個mutimedia system,但是我們希望做的是interactive system,他基本上是透過hyper link的方法來作,最簡單的interactive system ,internet 來講的話,就是web page,他是一個interactive,不過他的interactive 非常非常簡單,他只單純的透過一個hyper link 而已,也就是說他沒有額外的flow control,今天在你整個你去玩game 的時候,他跳出很多地方出來,他有很多著個flow 跑的流程,你可以從這一點跑到另外一個地方去,但是他有一些回應的東西,不是只有單一個web page,不太一樣,他有一些動作,你可能說,我點這個object,另外一個object 會做一些什麼樣的動作,那這些東西在這個地方是不太一樣的,那就是我要談的hyper media,就是hyper link 加上multi media,multi media 大概是佔百分知幾左右,另外一個我想要提的,internet computing,前面談的都是簡單的multi media,不過主要是讓大家知道一下multi media 的東西是什麼,那接下來我想要談的是database,database 的話,我們要介紹到database 裡面去的時候,我們心理所感覺的都是relational database,剛剛提到一個OODB,可是講坦白OODB 在我們實際生活應用上面有很多困難點,這個困難點裡面簡單的舉幾個東西,第一個你的應用工具,你在一個OO database 上面怎麼寫一個應用程式,這是第一個問題,那很簡單,有人講說我會C++,所以我會寫,可是現在programer C++ 的有多少個,對不對??,我想會VB 的比較多,當然因為有很多人不是computer 本科系的,現在我發現很多國貿系的會寫program,發現很多中文系的會寫program,但是他們只會Basic,叫他寫C++ 完了怎麼加,因為很多coding 他不知道怎麼做,很多object class 怎麼做不知道,之類的東西,這是oodb ,因為你要用到oodb,oo programming,所以有很多class 觀念你必須存在,也許,退一步來講,Pascal,現在最有名的Pascal 是什麼Delphi,還有沒有其他的,現在還沒有看到,但是這個比較有名,不管怎麼樣子,他還是有一些比較更深入的東西,any way,到目前為止,oodb上面的應用工具是一個很大的問題,這是第一個,第二個,oodb 裡面,在這幾年裡面,有一個很重要的觀念叫做transaction 的觀念,oodb 裡面,目前不是那麼完整,不是那麼 complete,你今天對於你的資料庫要做一個access 的動作的時候,你會碰到幾個很critical 的東西,包括你今天要做update 的動作,insert 的動作,delete 的動作,有些東西跟你的completion 來講他是一個完整的東西,而這個完整的東西,我們包括insert 兩筆data,delete 一個東西,再加上一個update,那麼對於一個database 來講,他必須把這個東西包成一個transaction,什麼叫做transaction 我想各位學過database 應該知道,要嘛全部進去,要嘛全部出來,就叫做一個transaciton,舉一個更簡單的例子,你現在大家都有提款卡嘛,銀行的提款卡,現在銀行的提款卡是通儲,也就是你在A 銀行的戶頭,可以到B 銀行的提款機去領錢,請問各位,你到B 銀行去領錢的時候,領的是哪一家的錢,B 銀行的錢嘛,但是你扣帳的時候,扣的是A 銀行的帳,所以你至少可以知道兩個動作,一個動作是,假設你提$2000,B 銀行少$2000,可是A銀行你的戶頭也少$2000,可是A 銀行的現金多$2000,這樣講有沒有錯!?,因為你本來要領的錢是A 銀行的錢,可是這樣一個領錢的動作,你必須包含幾個動作,告訴B 銀行我要領$2000 ,B 銀行的資料被update ,$2000 `被這個客戶領走了,第二個A 銀行那邊要被告知說,那個戶頭,A銀行那邊少$2000,他做一個紀錄,$2000 撥給B 銀行,然後再扣掉一個手續費,這樣的動作,所以這是一個完整的東西,假設各位想一個狀況,我今天到B 銀行去領錢,$2000 吐出來,機器當掉,這時候會怎麼樣??錢沒被扣到,所以我賺$2000,是不是??,還是我另外假設一個狀況,我領錢,結果錢要吐出來,當掉,我損失$2000,有沒有可能,不可能阿,為什麼??,因為他帳已經扣掉,可是錢沒有出來,所以現在唯一的解決方法是什麼,趕快按電鈴,(台下:~~),各位可以發現,不管你有沒有領到錢,電腦被當掉,這個transaction,絕對被保證,如果你沒有領到錢,在機器裡面,事實上他的做法,他有一個先後順序,但是這個先後順序被保證,要嘛全部處理掉,要嘛沒有,可是現在銀行的處理方法是這樣子的,他會先做一個扣帳的動作,完成交易,在吐錢,所以,倒楣的是誰,領錢的人嘛,所以機器當掉的話,一定事先扣你的帳在吐錢,你只有一種 狀況就是領不到錢,但是帳被扣掉,可是不會,因為當機器遇到這種狀況的時候哩,他會作另外一個 transaction 下去,把這個錢扣回去,那這個地方注意一下,他不是一個database transaction,主要的原因,他跟機器有關係,所以他是兩個transaction,不是一個transaction,第一個transaction 作什麼??告訴B 銀行說,你的$2000被領走囉,然後告訴B 銀行說,你的這個帳戶少$2000,給你一個record,到時候你要把錢撥到B 銀行來,他是一個完整的 transaction,這個做完就是全部做完,再下一步就是錢吐出來,如果錢吐不出來或是沒有錢,這個時候哩,機器會再送另外一個transaction 回去,剛剛所做的這個動作在 update 回去,所以作第二個,修補的動作,所以你真的去看銀行的帳本裡面,如果你真的遇到這種狀況,帳本裡面絕對是兩個record,這兩個record 基本上是做這樣的動作,但是每個transaction 裡面他都包含了兩個以上的動作,那我再舉一個例子,剛剛第一個transcation 裡面我要扣錢對不對,我現在進去了,這個transaction 告訴B 銀行說,我要給你領$2000,所以這個B銀行就紀錄少$2000,可是第二個動作他去做A銀行的時候哩,當掉,怎麼辦??,B 銀行說我少$2000,A 銀行說,歹事,挖捫哉,對不對,是不是這樣子,對阿,我不知道阿,因為transaction,你的資料沒有過來阿,對不起,在這個transaction 裡面他被保證了,我們叫做所謂2 phase commit,他是internal,基本上來講,他對於只有一個database,他是internal 2 phase database commit,必須告訴說,我在做這個動作,結束了commit下去,commit 下去的這個動作保證的你資料沒有問題,還沒做commit 的時候勒,機器當掉,這裡面有兩種狀況,一種是你還沒下commit 就當掉,這個時候,database 本身會把你的transaction會做一個roll back 的動作,是屬於database的事情,你不用管,他自動把你roll back ,他為什麼可以roll back ??,因為你原來要update data lock 住了,系統幫你lock 住了,所以它可以幫你roll back ,也就是說你那些data 並沒有真正寫到資料庫裡面去,這裡面他的機制很簡單,所有的database 都必須有一個general system ,比如說叫log system,是在紀錄你所有transaction 還沒有完成時候的東西,如果你完成了,在這個log system 會做一個commit 的動作,commit下去,完了之後,系統會自動把你log data 轉到database 裡的data 裡面來,他自動幫你做一個回覆的動作,那這個動作保證你這個data consistent,當然這個database 裡面講得很清楚,現在praticesystem 也可以作到這個程度,主要的你要考慮到是說,我怎樣去跟disk system 做這樣的動作,保證它可以作得到,那這是透過log system的機制,我剛剛講的,每一個transaction,不管是第一個還是第二個,他都是被保證的,這不是問題,那回到我們這邊,這談的是資料庫,談到多媒體的時候哩,完全不一樣的原因在哪裡,因為,原來的database,relation 裡面,他能做的事情就是,你的姓名多長就是多長,你的地址多長就多長,你的薪水位數有多少位就多少位,沒有辦法變,但是多媒體跟資料庫合在一起的時候,我們發現不一樣的地方,當我的資料都很簡單的時候,比如說你要存的是一個小icon,可能2k ,所以我們可以設定給他一個位址 storage 2k,single data,我可以假設我所有的都不超過5k,把一個5k 的位只給你放,大概10 年前,我們用小database d base,可是現在tool 裡面其實還有一個d base file format,這個d base 開始的時候勒有一個欄位,就做memo,這個memo 欄位有一個限制,最大不能超過多少,也就是說,當時處理的技術,它可以讓你做一些動作,但是他處理的長度有限,對我來講,他還是一個single data,所以我可以define,它最大不超過5k,我的東西只要不超過5k 就可以存起來,可是當你的size 越來越大的時候勒,其實我們現在做的都是屬於multi media system,他是一個file base,也就是說,一個video ,他是一個file,可是你把database應用進去的時候哩,database 記什麼,記一個file name加上他的path,但是他的檔案在外面,這個時候碰到一個問題,如果我從OS 進來,把你的file 殺掉,那最後結果是什麼??,single file 找不到,對不對,找不到, 他並沒有被保證他的data 是包在一起,所以他是一個file base,如果以這樣走的話,以過去一database 的觀念,他希望能夠幫user data 管得很完整,甚至於資料量可以管得非常非常大,過去用d base 碰上一個問題,當資料上萬筆的時候,他的performance 是這樣子,exponential的往下降,第二個,他常常會掉資料,因為index file,所以我要rebuild index,做這件事情,所以碰到所謂大量資料的時候哩,我會有很大的問題,所以我們要透過database system,資料量又大,data size 又大,我們希望用multi medai database,我們談到database,這是傳統的,這個data model,這個我大概不用提了,因為資料庫裡面的課都講過,relation model,階級 relational ,object oriented,這是最精采的,不過我不會講*,這就是,事實上來講,線沒有那麼少,因為要簡化他整個flow 的關係,我把一些線都拿掉了,主要的原因在哪裡,這裡面哩,是你完全看不到的東西,但是寫系統的時候哩,user 絕對看不到,因為你用的很舒服,其實做一個database,有幾個重點,第一個重點,你怎麼去control 你的storage,因為我們有辦法去control storage 的時候哩,我們就能夠把他extend 到另外一個unit 上面去,stroage control,這裡面有一個非常重要叫做storage manager,看起來很簡單一個框框而已,不難嘛,我要control file system 也很多,包括一般unix file system,windows file system,甚至我要做roty files,什麼是roty files,就是不透過OS filesystem control,我直接跟disk 聯絡,我們為什麼要做roti files,因為database 直接control disk 的時候,剛剛講的transaction 的動作,還有很多I/O 的動作,很多東西我能夠保證,透過file system 的時候, file system 本身有一些buffer 的動作, 我必須透過一些強制的執行,才有辦法作,我們剛剛講的那個 transaction有沒有,當我transaction 第一個動作進去以後,我原來data 要改阿,可是我這個data 要進 disk,因為如果不進去的時候,我沒有辦法保證他,如果這個時候當掉,在我的system 裡面認為他改了, 可是實際的data base裡面沒有改,透過file system 的話哩,假設我transaction第一個動作做下去以後,我對file system 要做一個動作叫做flush,flush 動作是強迫他把這個data 寫到disk 裡面去,也就是說當user 得到回應的時候,這個資料一定是在disk 不是在buffer,那很重要喔,為什麼要這麼做,當我第二個動作作進去的時候,也是做進去,但是他不是進database,他是進到我的log 裡頭,當我transaction 做完,做一個commit 的動作的時候,我要把這個commit 的動作寫到log 裡面去,那寫到log 裡面去的時候在我原來的buffer裡面,他有所謂dirty page,所以user 進來的時候他是看dirty page 不是看data page可是我有page swapping,當我的page 不大夠用的時候,我必須把一些舊的dirty page swap 回去,這時候我可以把data page swap 回去以後,這邊就被清掉,就會被重複在使用,因為我已經保證commit 掉了嘛,但是如果這個時候當掉,我的log 使保留完整的東西,雖然我的database 沒有被改掉,當我的database重新起來的時候,我會從我的log 重新再跑一遍,哪些transaction在我log 裡面有,可是data base 裡面 沒有改回去,就交給他,由他改回來,所以storage management 很重要,除了這個storage management,事實上database 還有很多東西,使得database 要很好用,這個我們就看嘛,啥麼file manager,buffer manager 不用看了,往上看的時候,因為你的database 要處理大量的資料,所以你在讀data 的時候,你一定要有幾個機制,一個,index,一個是sorting,index 有沒有告訴你說你要用什麼樣的index,沒有嘛,你自己想辦法作,algorithm或是 data structure裡面告訴各位一大堆什麼index 的技巧啦,sorting 的技巧,你這些都可以用,現在最好的sorting 我現在不曉得是哪一個,已經太久沒有看這些東西,不管,我有一個index manager,但是不是所有的data 都有一個index,在我過去的工作經驗裡面,曾經告訴一個engineer,我今天給你一個一萬筆data table,那在這裡面我希望找一些資料,這些資料可能是一萬筆裡面的十筆,也可能是一萬筆裡面的九千筆,差異很大喔,如果我今天要找的是9000 ,對不起,請你不要給我用index,為什麼不要用index,他的速度因為比較慢,但是如果我要找的是10 ,我要求你一定要給我用index,各位想想問題在哪裡,有了index 之後,我所有access的動作,是透過index linkdata 在挑出來,我有一萬筆data ,我要找10 ,那在index tree 裡面,我所找的路徑,在進到data path,我所花的時間,假設我們這樣算,10 筆的兩倍,頂多三倍不得了了,因為如果我們是tree 的話,因為他是一個tree,所以他是一個exponential的數字,那是他的height,所以我們可以做到這一點,10 筆的兩倍時間,就是20 筆的時間,可是我要的如果是9000 筆的話,透過index 在找到data,9000筆的兩倍,18000,我幹麻阿,乾脆重頭看到尾,我只看10000,這裡面勒,這邊沒有寫到一個東西,就是optimizaion,optimizer 要去做一個動作,當一個query 下來的時候,要去告訴你,你要不要跟index不是你自己指定的喔,我系統幫你改,因為我要幫你算出你要找data 的量剛我原始table的量大小差異在哪裡,這是有準則的,這裡面有一個scan manager,scan manager 可以也可以不透過index,透過 一些其他的東西來作,這裡面有很重要的東西,也就是我講的,semaphore control,當你有兩個人同時去access 同一個資料的時候,他有一個locky 的動作要出來, 這個人進去是要讀的話,他要抓一個share lock,也就是讀,別人也可以讀,但是如果他是寫資料,另外一個人就必須在外面等他做完這個在OS 裡面叫semaphore,test and set,lock 就是這些東西,再往上走就是transaction manager ,因為transaction manager 要保證你的data consistent,今天我去做那個動作,好比我剛剛講領錢那個事情,對不對??假設我去領錢,假設有一個銀行的 administrator,他要去改你的 data,對不對,他也要進這個 database 啊,對不對。所以如果今天你要做完整個動作的時後他會被擋在外面,他必須要在你的 transaction 完成之後他才能進來,所以這是一個 transaction manager 要做的事情,上面就是你可以做 TDCLTDLTML這樣的東西,那當然這邊有一個中央() manager,這邊有一個 lock manager,可以做這樣的事情,這個地方其實沒有辦法跟各位講的非常詳盡,那這只是一個非常rough 的一個 model,讓大家知道,其實做一個 database,要做這麼多東西,大家不要就看到幾個方塊而已,這裡面總共有20個人在做,這只有 kenel 的部份喔,總共有20個人在做。然後咧,真正完成的時間咧,到目前為止已經做了一年,它的程式的行數咧,大概超過數十萬行,太多的東西要做,但是咧,事實上做database我們發現我們的code越來越少,因為做完一遍以後在回來看,看完以後咧,本來寫十行的變三行,會有這樣的現象發生,你必須重新把它精緻化。OK,好,那麼,其實在這個地方我想補幾個 storage management 的部份讓大家知道,因為等下我們要講 videomultimedia 的部份,那這裡面有提到一個所謂 table space,那 table space 理面擺的是 table index,因為index是配合table來做的,但是咧,如果從 system view 來看的話,它的 table space,它擺的都是 table,它管的都是 file。好,為什麼要轉成 file,一個 table space 裡面可以有很多 table,對不對?我們講裡面會有很多 table,因為你在做 relational database 的時候要 create table,對不對?那 create table 的時候咧,事實上,在你的 database 裡面你要告訴我你這個 table 要放在哪一個 table space 裡面。好,那麼,這個時候咧,相對於我的 system '講的話咧,我會告訴你,你這個 table 被我放在哪幾個 filesystem,可能是一個 raw device,可能是某一個 fileA fileB fileC file。那 A file 可能在 A disk,啊,在第一棵 diskB file 可能在第二棵 diskC file 可能在第三個 disk,它為什麼要這樣做?performance issue 來了,你現在如果接 SCSI 卡三片,後面接硬碟,對不對?如果我今天要讀的 data 咧,分散在這三棵,理論上來講就是三倍的速度,對不對?對 IO system 來講它是三倍的速度,對不對?那對我的 database 來講這個有好處啊。另外一個,它可以 cross volume 的原因就是說,當我的 data size 很大的時候,如果我現在一個 disk 的空間不夠大,那我可以利用兩個,三個,四個 filesystem,來存同一個 data,這樣懂我的意思吧?所以這是一個很重要的地方。可是傳統的 database 事實上不需要我剛剛講的那些東西,可是咧,對於你的,我們講的比較大的媒體資料 media data 的時候咧,我們會用到。那麼,在這個地方我們會有一個觀念叫作 block,其實 block 是一個很 common 的名詞叫作 binary block object,啊,binary block object,那這個東西呢,反正你給我的 data 就是個 binary 的東西,可是事實上這樣不夠嘛,因為它只是個 data 而已,我們希望在 database 裡面以後加很多東西在裡頭。好,那麼,我想那個部份呢,我們等下會有 storage 的部份我們會 focus block 上面,但是至少 performance 這個 issue 上面來講,我們有對 storage 上面的處理,對 buffer 的處理。我們剛剛有提到的,其實很多的東西在 memory 上面處理,對不對,那你不是處理完就只要下 disk,因為 io cost 很高,所以如我今天能夠 cache memory 上面我就 cache memory 上面,所以我的速度會很快,這也是 performance issue,所以我 buffer 要去做,這是很重要的,然後我剛剛提到的 query optimization,你今天給我的 query,我需要 index 不要 index,或者我應該要怎樣打開這個 file,那當然會有一些小問題。但是其實我很強調最後一點,programming 的技巧。因為 application 的一個 system 不是說,我今天給你一個很好的 database,你的系統就可以做的很好,不見得,不見得,programming 的技巧很重要就是說,它不只是 system programming skill,甚至於說 appliction skill 也很重要。你必須知道,我今天要做的這一件事情,到底怎樣做才會比較好,那你可能會分那些事情由 database幫你做很好,那些東西你必須要在這個地方做到,那這樣你的系統才會做的好。好 ,對,我在這個地方跟各位強調,如果說,我想各位以後都會接觸這樣的問題,我想你唸博士班以後當教授就不用摸 code 了,可是如果說你到外面去,除非你當 sales,否則以後當工程師,我想,除非你不在資訊領域,否則我想摸 code 的機會應該是會有的。但是我想 programming 的技巧很重要。OK,回到我們的地方來,這裡面很重要的地方,我們剛剛提到 buffer 的東西,對,你在 buffer design 上面來講,把它分成兩個,這是在 database 上面要做的,一個,這是一般的 buffer memory,一個就是我們 block 的,binary lock object buffer memory,這兩個是分開的,為什麼這樣子做?我們剛才提到所謂的 dirty page,對不對?那如果一般的 data 下來的時候,這個 page 可以裝 100 data,對不對?可是如果我們 block 進來的時後,一個 page 可以裝多少?半個 data,可能只有半個,對不對?好,那如果是這樣的情況下,一個 block 進來的時候是可以占掉很多個 page,對不對?因為把這兩個 page buffer 合在一起,那麼我的 page swapping fashion 就變的怎麼樣?沒有被用到的趕快就踢出去,對不對?可是因為 block data 太大,所以變成所有的 page 都踢出去,所以 performance 下降,這樣有沒有有聽懂我的意思?因為你的 buffer 如果沒有辦法 keep memory 的時候你要做很多 IOIO 做的越多,你的 performance 越差,對不對?所以在這種情況之下,其實我們講的 locality problem 在原來的這個地方會發生的非常頻繁,可是 locality problem 在這個地方發生的就很少,那這邊所用到的 memory 跟這邊用到 memory 的方式會不一樣,所以我們把它分開。其實呢,這還不夠,我們提出了一個做法,因為在我們傳統的 database 裡面咧,有所謂的 data cache,但是我們剛剛有提到啊,如果把 multimedia data 放進來的時候,那麼,我還是要處理 multimedia 的東西,可是它跟你原來的 database 裡面的 information 存在一起,其實這種東西我們叫它 computer ??的這種功能,這個地方,我們做一個動作就是說,我們剛剛不是把 buffer 分兩塊嗎?一個是 data cache 一個是 block cache,對不對?可是咧,如果今天我的 block data size 很小的話,我幹麻把它分兩邊?這樣懂不懂我的意思?我就沒有必要把它分兩邊,我就直接跟我的 data cache 放在一起,那麼為什麼這樣講?因為我一下就做好了,因為我一個 page 上來的時候,block data 順便上來,啊,順便上來。因為你的 data 很小,根本就可以放在一起,我不浪費空間。第二個情況就是說,因為這樣子我可以一次上來,如果我把它放在另外一邊的時後我要做兩次啊。可是這個有一個條件,它必須要小於我的 storage page size。也就是說,事實上它整個 block 的欄位,它如果能夠放在我的原來這個 data page 裡面的話,那它的 size,它的 block size 一定要小於我的 page size。但是如果大於的話那我就必須要把它分開,把它放到外面去。假設我們要把它放到外頭去,我怎麼放?啊,會怎麼放?第一個 block 就是 cache,你這個 storage management,那你給我 2 Mega 一個 image,我底下的 page size 16 K,或者 64K,或者 128K,不管怎麼樣,那這就是一個 page,對不對?那對我來講的話,我的 storage management 來講的話就是一個 page 接著一個 page 嘛,所以咧,我今天要讀這個 data 的時候就是,第一個 page 抓到,順便透過一個 link 把第二個 page 抓出來,第三個 page 抓出來,第四個 page 抓出來,對不對,咦我抓完啦,可是各位有沒有想像到如果這個對 image 很有用啊,為什麼?對 image 我一次要把它全部抓完,但是如果對 video 咧?不 work。為什麼不 work?我可不可以從第 10 秒開始看 video?可以吧?對不對?這是我們想要做到的事啊,我可以從第三分鐘開始看,對不對?各位在家裡看錄影帶的時後,這個今天晚上租回來幾捲,先看一個鐘頭,明天在看第二個鐘頭,可以吧?對不對?我可以把它們留在那個地方啊,所以我有那個 index 可以指到那個地方啊,對不對?好,所以如果是這樣子的話咧,如果我要從第 10 分鐘開始看的話,當我在做 IO 的時候,咦,第 10 分鐘找到了,我是不是花掉這麼多時間,對不對?所以咧,做一個轉變,這是我們另外一種處理方法,這是我們 block cache 的處理方式,用 two dimension 的方式來做,那麼每一個 two dimension 上面的第一個咧,會有一個 directory data,那告訴你第幾個,多少 offset 在哪裡?我在這個地方就直接可以這樣子跑過去,如果今天你如果要到第 10 分鐘,那個第 10 分鐘我可以從這邊看,看到這裡再往下走,所以我就不用這樣子找,對不對?所以 performance 會變的比較好,這個對於我們底下的 video browsing 就很重要,就很重要。好,OK,那這個地方你可以怎麼樣去處理 multimedia user view 怎麼看呢,也就是說,我可以讓 database 裡面的,就是說用 database user 咧,他可以去 specify 那一些欄位它是 directory (??) data ,那麼,這個部份怎麼做,我不特別講,因為這裡面談很多的東西,包括 object 怎麼做 indexing,怎麼做 object seaching,這樣的動作。好,接者下面才是重頭戲,好,那在看這個之前咧,我希望先秀一個東西,先跳一個東西給各位看一下,(操作 notebook ) 這個是我們的 video server,啊,這是我們的 video server,放了。這個現在目前比較簡單的方式,那我等下會提一下,這些東西會跟 database 結合在一起,我的 video server 以後會不見,會跟 database 結合在一起,那各位可以看到我現在是用打的,其實以後我不會用打的,它直接在上面選一選就好了,OK,那我們現在目前呢,把這個東西咧,apply mpeg file 裡面去,因為 mpeg file quality 比較高,(一段寂靜) 剛剛那個打錯了,啊,剛剛那個打錯了,各位可以看到 server 裡面咧,它接收到一個訊息,啊,它會抓一個 mpeg file,那當然任何一個 file 一定會有一個 name,或者任何一個 data 一定會有一個 name,那這個東西以後跟 database 結合在一起的時候咧,它會從 block data 裡面抓 data 出來,可是它抓 data 的方式不一樣喔,不太一樣。這個地方還要解釋一下就是,這裡面我有一些 information 就是,我已經送了多少 data client 端,好,那麼,這底下就是我要講的,如果你看一個 video,其實講坦白最直接的方式就是從頭開始看,對不對?可是咧,有另外一個議題就是,如果說你今天到錄影帶店去,啊,發現我要看那個太空電影,租了10 捲回來,那我 10 捲一捲 120 分鐘,對不對?兩個小時 10 20 個小時嘛,對不對?是不是你 10 捲都看?不會吧?不會吧,對不對?你可能裡面只喜歡看一捲,那麼你可不可以這樣做嘛,(撥放影片中) 那現在這些是它不太一樣的地方,剛剛有沒有看到這個,其實咧,我任何時間,到目前這個階段裡面我都還可以再做 preview,而且它每一次 preview 的效果會比前一次來的好,這個是什麼叫 preview,可是各位可以看到不一樣的地方在哪裡?撥一段,跳一下,撥一段,跳一下。好,這個東西我們這樣講好了,如果你今天租了 10 捲錄影帶回家,對不對?你可不可以用很快的方法告訴你,你只要看三捲,這裡面只有三捲你喜歡看,那最簡單的方法是什麼?快轉跳著看,對不對,一下錄影機就被你轉壞了(),對啊,快轉啊,你先快轉一下看看怎麼樣,對不對?好,先快轉啊,所以說如果我們做快轉的動作的話就可以很快把它看完,對不對?可以很快的把它看完,好,這裡面我想給大家看一下啊,這個等一下這個地方,這個 buttom enable 嘛,那 enable 的條件咧,是它到一定的程度會讓你 enable,但是這並不表示它全部 download 完,也就是他 preview 完了之後呢,detect 它的頻寬覺得說我可以邊播,邊傳,那我就可以把我的影像全部看完,那這種情況之下的話呢,我就可以開始讓你 normal play,這是我等下會介紹的 kernel 的一些 technologic 的部份,OK,那麼這個地方不一樣的地方就是它是不斷的在 download,不斷的在做這樣的動作。那等一下,現在以經可以了,(normal play) 各位看一下這邊喔,這邊還在 download,這是 download 的比率。這是我們美國總公司,我一年大概要跑去那邊三次到五次,各位可以看到,我這個時候是同時在播,同時在做 download,那當然這會牽扯到它的頻寬,它頻寬是不是能夠滿足你這個條件,或者你有沒有辦法去做,但是 mpeg 來講的話,它的 data rate 很高,每秒鐘 1512(??) mega,它的 data rate 很高。其實我們的目地是想說,如果你在網路上可以看電影的話,對不對?那你可不可以在一萬片裡面去看?去找你要的東西,所以有這樣的條件之下來講的話,如果你每一卷都看,我想你要看個一年恐怕都看不完,你很難找到你要的片子。另外一個應用,另外一個應用在電視臺啊,或者媒體公司它常常碰到的一個問題,它有很多媒體帶,那它的媒體帶裡面咧,基本上來講,今天它要撥另外一個媒體的時候它會一定用舊的東西,所以它要去找,所以它有一個印象說大概在哪裡,啊,在哪裡,所以這個地方我們提出另外一個構想就是 two phrase searching,第一個 phrase 是在 database searching,第二個 phrase 是在 video 上的 searching,那我們叫作 video browsing,那也就叫作 preview,就是 preview,不只是 preview,還做 fast forward,那這個地方等一下我們會看一下喔,這個我們另外取了一個名子叫作 VCR,因為我們的錄放影機叫作 VCR 嘛,叫 VCR 帶,這我我們看一下,這它現在應該已經 download 完了,全部完了,對不對?OK,所以在這種情況下咧,我們來看一下喔,我們可以撥,對不對?快轉,好 normal play,找到你要的位置,在開始 normal play,找到你要的位置再 normal play,要注意一下啊,我們這個東西跟 VCR 不一樣的是,你快轉 VCR 會壞掉,對不對?我們這個東西咧,我們本來是叫作 VCR fast forward,我們也讓它做那種,逼逼逼逼逼,的那種東西在做,可是現在我們做這樣的原因是,我希望做 search forwardsearch forward,也就是說你每一段的東西都看的很清楚,聽的很清楚,所以你知道這一段到現在開始,就是你要的,啊,就是你要的。所以這個地方來講的話就是整個在我的技術上是一個很重要的經驗,很重要的精神。所以在我們開始的動作裡面,我們希望在比較大量的媒體上面去找到你要的東西,那麼,其實這個東西最基本的條件,它有這個所謂 video on demand,那所謂的 video on demand 就是你找到這個裡面要開始看的時候,你再馬上開始看,可是當你要去找到這個影片,你需要花一段前置的時間。現在各位在 internet 上面看東西的時候咧,對不對,不管到哪裡,它只告訴你,有這十個片子,你就選一個看,但是如果有一個地方告訴你說,我裡面有幾千支,對不對?然後做一個怎麼樣的分類,然後你要怎麼樣做,你要去找你要看的東西,啊,找你要的東西。好,在這個地方我們回到我們的這個,ㄟ,(臺下: 可不可以請問你你剛剛在 preview 的時候怎麼解決 audio video synchronization 的問題 。。。) 因為基本上來講一個 mepg file 的話,它世實上是由很多 cop (??) 所組成的 一個,每一個 cop 本身就有 video audio,那我只是在傳到這邊的時候,要出去給 device 的時候,那 device 它有 audio device video device,這個時後我在把它分開,然後直接出去,那這個地方本身它有一個 evice event timer,因為 mpeg 本身就有這個時間,(所以 preview 的時後 audio 應該會有一些斷音?) ㄟ,會有,會有一些時候,你的 preview 的時候,我們在第一次 preview 的時候,就是當你送到開始可以 preview 的時後,你的聲音可能會跳,會跳,可是因為你 download 越多之後,因為它的那個,因為 toc 會越強,所以它就越來越 smooth,越來越 smooth。會有這種現象,那我想剛剛這可能的主要原因就是,第一個你要看影片,第二個你要聽聲音,所以這兩個都有在一起(??),那我想說喔,這個部份來做一下就是說,其實,在這個地方我們先提一下我們的重心就好。過去來講的話呢,如果我們要做 preview,一個 video 給你你要做 preview,對不對?你大概會怎麼樣去做,好,最早的一個方式,我們想到一個方法,我就把這些要 preview 的這一個段落抽出來,產生另外一個 file,那這個 file 傳給你,對不對?那這個很快啊,對不對?可是呢,我除了原來的 video 裡面來有另外一個 video file,對不對?那我把這個 video file 傳給你,這個是 preview file,不是 video file,是 preview file,但是我也必須要把它傳完你才有辦法看,對不對?那等一下我們會看到它傳,這個 sending 的動作,那等它傳完才可以看,可是呢,那你覺得真的要看的時候,我必須要把這個 video 重新再傳給你,所以我剛剛花的時間又要再花一次,喔,又要再花一次。所以,在這種情況下,第一種方式呢,我們就會碰到一種情況下就是說,我這樣來丟,對我丟這樣的一個東西就會有重覆的現象,啊,重覆的現象。那另外一種方式咧,叫作 pipeline,現在目前的 real networkreal player,在 internet hot 的這個東西。基本上它有兩個條件,第一個,它的 data rate 要降低,降到它比頻寬還要低,我們的 bandwidth 還要低。也就是說,我們要預留 bandwidth 嘛,比如說我們用 modem,這個 336K,比起來 56K 基本上要算大的了,但是它要把它的 data rate 壓到比如說,每秒鐘 4K 5K,或者甚至更低,那也就是說它每一個傳送的東西會比你的 bandwidth 還要低,所以它可以 continue 傳送,那你在傳送的時候你接著就可以播,可是事實上說不對,你知道為什麼?因為在 internet 的頻寬喔,是跳來跳去的,可能現在這個是 5K 下一次咧,一大堆人進來的時候變兩K,甚至變得不到一K,對不對?會有一些這樣的現象,所以咧,這個地方我們所講的 pipeline 是說,它一開始的時候咧,先把第一段先 download 下來,之候它就開始 play,那開始 play 的時候咧,它會再 download 第二段的東西,可是咧,各位可以發現,我的 play 的速度比我 download 的速度來的快,所以我 download 的條件會比較差,對不對?所以我第一段要 download 比較長,再來就比較短一點了,再來又再比較短一點,又再更短一點,又再更短一點,對不對?所以我必須去計算我的 X0 到底有多大,X1 有多大,然後這個 X1X2X3 這樣的一個長度,然後我每次在播的時候咧,當我第一個 phrase 叫作 download X0,第二個 phrase 咧就是 download X1 而且 play X0,對不對?如果我讓它能夠 continue 的話,它的條件是什麼?當我 X0 快播完的時後,我那個 X1 就進來了,然後我我可以播 X2 呢,表示 X2 進來之後 X1 還沒有播完,好,必須有這樣的一個東西,那它才能持續的這樣一直播下來。可是咧,這種 approach 碰到另外一個問題,是我沒有辦法 preview,對不對?我沒有辦法 preview,因為我的 preview 的動作很糟糕,我每次要做 preview 的時候,會有這樣的一個問題。OK,到目前為止呢,這這到目前為止呢,基本上來講,user 他可以很快的開始看他的影片,可是咧,他沒有辦法利用所謂的 search 的觀念去認為說這個 video 是你想要看的,也就是說你看第一分鐘跟第十分鐘,到第十分鐘,你可能還不知道這個,這個 video 是不是你想要的,可能前面的十分鐘都很精采,對不對?可是後面咧,都不精采。會有這種現象,那麼你可能看了十分鐘就不看了,對不對?那個這種情況下你沒有辦法讓你的整個錄影帶全部看完。那這種東西咧,基本上當然它有個好處就是不用等馬上就可以看了,對不對?可是咧,它的壞處咧,基本上來講,你整個,在你的,我們剛剛提到的,當你有很多,很大量的 video 給你選的時後,你就必須一捲一捲一捲慢慢看這是另外一個看法。可是在這些東西沒辦法達到你的條件的時候,就必須做改變。第一個想法是說,如果我把一個vedio產生另外一個preview的話,先把這個prefile送給這個,我要做一個previewfile。第二個,假如我沒有preview的話,我利用pipeline去送video,事實上我剛剛都拿不到,為什麼?因為我不能夠preview。第三個,請各位想想看,其實現在Vedio on Demand,它所要求的動作就是,所有的data都由server來控制。目前vedio server有一個很大的問題就是我來開發,client就只做播的動作。所以今天當你把serverdata丟給client的時候,client只做播的動作,可是當你要做快轉,前進快轉或後退快轉,就會碰到一個情況叫,server要提供給你足夠的資訊,足夠的量,你才有辦法這樣用。這裡會碰到一個狀況是,如果server碰到這種request越多的話,那麼server本身的bandwidth就越大,server本身I/Obit要越大,也就是說serverloading會很大。所以就目前的環境來看,我們是不是可以把一些這樣的loading放在client端。就像我剛剛講的,我們preview file先送上client端的時候它會做preview。這是第一個條件。第二個條件,我有...的時候,就可以做forwardreverseVCR functionnormal play,而我的client端也有preview file。不過這和我們第一個過程不一樣的地方。第一個過程有一個preview file,如果要normal play,你要重新來。所以我們希望我擁有這個preview file,而且這些preview filedata,我已經拿到之後,當我要normal play,就不需要重新來。這是我們剛剛提到的一些缺點。好,那這邊就是我們剛剛講的,我希望做到的是能夠去download這個。比方說你今天去一個錄影帶店選錄影帶,租了十卷回來,結果你只看了三卷,花了六小時,一天把它看完。然後回去跟錄影帶店老闆說,老闆,我只看三卷,剩下七卷不要算錢。可以嗎?不可以嘛,對不對,因為我們都已經租出來啦。所以在這種條件之下,你還是租了十卷,但是你只看了三卷。那如果說,我可不可以在錄影帶店跟老闆講說,ㄟ老闆,可不可以請你先放一下錄放影機,讓我在這邊看,我要就租,不要就不租。那不租的不算錢。老闆也不會同意啊。這樣我的錄放影機會常常壞。所以基本上今天如果在一個vedio librarydigital library上面要去做這個事情,我可不可以希望我做preview的動作,當我真正需要做normal play的時候,希望說它不要download完。所以第一個我們希望能夠做到的是previewplay要是FREE 不要付錢的。這樣的話我找東西算是一個相對條件嘛,因為我沒有真正看啊。那當然還有一個條件就是,它不需要additional delay。所謂additional delay就是說我先preview這邊過來,當真正要看的時候再重新還回去一次,所以有第二個delay。第二個,我不需要額外的priorityrequirement,如果要做VCR function的話。因為我只要preview得快就好了。因為我preview得快,所以我可以保證參與的頻寬在那個狀態下可以normalplay。也就是說,等一下會提到,怎麼讓它normal play,當然是用pipeline的方法,可是我已經有了previewfile,所以我就...。好,這就是我們的model,叫做2 phase model2 phaseservice model。那接著很簡單,講起來很簡單,就把它圈圈。可是圈圈不容易啊。所以第一個,假設這些data都放在database裡面,所以我的vedio server是和我的database server合在一起,我用的是我的prob boner(?)。這樣大家有沒有聽懂?OK,我原來database裡面,有一個prob database(?),存著一些拉哩拉渣的,所以update很慢很慢。所以你的vedio file存到我的database裡的時候,我可以利用database裡的file managementcontrol你的...。所以我可以保證在databaseI/O上面來講可以達到...。這是第一個。第二個,根據我剛剛browsearchitecture,所以我可以找到我要的那一個data的位置,不需要重locate(?)。其實我可以對這個vedio做一個index。我所謂的2 phase model其實很簡單,第一個phase就是把我preview的部分丟給你。它不是一個額外的file,而是在index之後,這些fragment叫做L-fragment。我們把這個vedio切成好幾個fragment,每一個fragment把它分成L-fragmentR-fragment。所有的L-fragment集合在一起就變成file。所以我真正在做的東西就是,第一個phase是把L-fragment全部送走。送給client端。Client端拿到所有的L-fragment的時候它就可以開始做review。當你所有的L-fragment全部收完可以做preview對不對,可是previewnormal play中間還有一段時間,這就是我們的另外一個處裡的地方。就是說,我可以讓你很快的prevew不浪費太多時間,也就是讓你真正開始看vedio的時間縮短。可是你可以第一次preview、第二次preview、第三次preview,到normal play開始。這一段時間都可以preview。可是我的第一次preview跟第二次preview不一樣的地方是第二次的previewquality會比第一次preview的好,第三次的會比第二次的好。所以我們這裡面還分幾個東西,L-fragment還分幾塊、幾個東西。就是說,我L-fragment傳到什麼程度的時候,你可以開始做preview的動作。然後我L-fragment繼續傳,你繼續preview。在L-fragment全部傳完之後,你就可以做normal play。在做normal play的時候我其實還會送R-value給你。所以觀念上是我第一個phaseL-fragment給你,傳完之後你可以做normal playnormal play就是我開始play L0download R0。這是我的第一個phase。那RO download之後開始download R1,當我的R0開始被播的時候一定會有pipeline,傳進來就可以播,傳進來就可以播,所以我只要保證能夠頻寬是不是夠快到R0全部傳完就正好播完?我就可以保證了。那下一個階段是什麼,下一個階段是它要播L1R1開始download,可是L1還有一段啊,所以我還有一個buffer的時間去函R1的時間。那我還要測他們的頻寬,到底L0要多大,R0要多大,L1要多大,R1要多大。透過這樣的方式,所以我真正在download的時候,不是跟剛剛前面的步驟(一樣)。好,這個不一樣,這個部分它是先把S0 download完,開始播S0download S1。不一樣的地方是因為播的速度很快,它會沒有buffer,所以它一定要保證,在這個播完後,這個要接得上,而且接的buffer要夠大。如果不夠大的話,因為播的速度快,download的速度慢,所以會造成一種現象是它會停掉,沒有東西播了。所以它這個要長一點,再來短一點,再來短一點,再來短一點,這樣的方式。

()Client端可以把這個東西存下來,那client端重組的能力?

(Ans):一般來講,重組這個東西其實還好,因為它本身在mpeg file的標準裡面,每一個都有時間,你可以照

這個來排。向我們這個裡面會做一個index,做出來它是哪一個group of picture,它在video的哪一段,我們就可以把它存在那個地方。它好幾個動作其實是很簡單的,其實沒有那麼困難。只是我要能夠做到這件事。目前在播的時候,其實只是...的關係。我們碰到的最大困難,不是重組的問題。這是很實際的經驗。OK,這是我們第一個想法。很簡單,這是一個2 phase model。第一個phase...files。可是真正我們在做不是這個樣子。這是第一種方法。我們用linear fragment來做這個東西。這個東西就是我們的L-fragment,這一段就是R-fragment。那我download的時候,這個地方大家可以看,到這一點它就可以preview了。可是這一點開始呢,我的L-fragment並沒有全部進來。我的download方式是,先不要去計算我到底要download多少,所以當你開始preview,效果不會太差。所以我可能一開始的時候,0113142627,是一個linear的方式。那完了之後可以讓你normal play。這個時候就開始download 2download 15download 28,這樣的方式來做。那如果頻寬變比較差,這個時候我會把這個東西往上壓。注意一下,你的bandwidth越小,我的preview的東西要被download得越多。也就是我的L-fragment要更大一點,否則當你要normal play的時候,R0會過不來。這裡下面我們還有一個部分就是說,如果R的部分來不即的話會降下來,會跳下來。但是,不能夠跳得太厲害,希望它能夠繼續做,不要停。過去我們的videointernet上做的時候是開始播,結果網路頻寬變大,它播完之後沒有data播,就停住。可是對我們來講,我們剛剛提到,L-fragment是分開的,所以我可以一直播,可是我播到某一段的時候,R來不及,這個時候我就跳過去,L、下一個L,這個時候下一個R就進來,所以我便往下跳。這樣這個group of picture不會太多,因為太多的話就沒有辦法。這是一種方式。這種方式會對照你的頻寬,來決定到底L-fragment要多少的group of picture。下一個我們的做法事實上是把它分開的,剛剛是第一段多少個進來、第二段多少個進來、第三段多少個進來,那現在有另外一種方式是,我是分開成一個一個的,然後再拿每一個的第二個,拿每一個的第三個,這只是分開的方法。其實這沒有差,基本上這做法沒有差,主要原因是我在做indexing的時候,我在做I/O的時候會有差。如果原來存的pagelinear的,那麼我要去找offset的時候,我的disc I/O會比較多。這個地方會碰到的狀況就是這樣。那如果我底下的architecture,底下offset的處理跟我的link的處理,是我剛剛說的2 dimention的方式時,那我的I/O就比較少,因為我可以把每一個directary page...,所以我就知道下一個page在哪裡,I/O就比較少。上面這個方式跟下面這個方式差別並不是很大,因為我們preview本來就是很短。那另外一種方式是用binary tree的方法,我們把這一個video file做一個重組的動作,重組完之後我在傳的時候,是把previewfile接在前面那一段開始送。送到這邊的時候我可以開始preview,然後再往下送。這個時候,我們重組的方式很簡單,各位看一下,這個部分是我們剛剛重組的方法,一個video file經過一個convert的東西下來,我的L-fragmenet在這裡,其他的是R-fragment continuous的放下來。這就是我剛剛講過的,當我的L-fragment播播播,R來不及的時候就會跳掉,這個時候server端知道這個要跳掉了,所以這邊不能播了,那它就會收到一個訊息,它一直往下跳,哪一些東西要skip掉就跳掉。所以這個時候,如果它跳掉的東西比較多,這邊的I/O會大一點,如果serviceuser多的話影響會很大。所以這個地方我們可以用這種方式,改成這樣,OK,這就是我們的index file,這是我的video index,這個video index filebase on group of picture,而不是base on L-fragmentR-fragment。再講一遍喔,我的index不是把L-fragmentR-fragment來做index,而是用group of picture來做index。各位可以看到的是,這只是我的L-fragment中的一個,可是我這個index裡面我可以做一些調整,使得我的L-fragmentR-fragment可以調整大小。今天這個client端給我的頻寬是28K,另外一個給我的是T1,那它們的L-fragmentR-fragment調整就不一樣。所以我們會用不同的方式,去access它們的LR。這個很特別,因為如果你的index是用LR來做的話,那我們就沒有辦法去調整它們的大小。所以我們的index基本上是用group of picture來做。然後再給它一個參數。所以我們在討論index tree的時候,就知道要抓五個group of picture或十個group of picture。這是讓各位知道index的方法。OK,這個地方所講的binary,就是index的方法,所以透過這一些方式,我們可以用更detail的媒體去做硬體的方式。那,在這種情況下,就是我們講的preview的動作。好,那我們要做simatric(?)simatric(?)是什麼?那這個地方其實有個錯,我們現在是用mpeg1,真正我們在preview是用mpeg1mpeg4因為還沒好,它只是我們模擬的對象。因為mpeg4data rate比較低,它未來可以處理的比較多。現在我們的頻寬是用modem的,28.8。那當然這裡面有一個VCR...跟你的video length,那我現在用的video length大概幾分鐘,這是simatric(?)。可是我剛剛播的那個東西,大概七分鐘八分鐘,它的data很大,七分鐘大概就六十幾MB了。那還有一些時間,那我這兩個的意思是,我previewdelay,還有一般來講的話,我要resume它的base forward的時候,它所需要的時間是多長。我得到的結果很好玩,一般來講我要做base forward的話,這是原本我們講的pipeline的方法,是S0S1S2,你會發現,當它的時間越長,跟它的video length越長,那他delay的時間就越長,我video的時間越長它就越長。因為它要開始forward的時候它要get比較多的東西,所以它比較長。好,這是preview的方式。所以我們發現7根本沒有delay啊,我們的方法根本沒有delay。那同樣的方式,pipeline的方式,video的長度越長,它的delay的時間會越長。可是對我們來講,如果我們的preview file已經在了,我們要的只是告訴它說,你下次給我一個RR-fragment,所以,很容易,我們可以接的到。好,那一樣,previewdelay,基本上來講,這是initiation delaypreview。這時我們做的動作是,如果video越長,previewquality就越夠。所以我剛剛講的,我可以第一次、第二次、第三次、第四次,這樣的方式來做(就是重複播放影像檔案,品質會越來越好)。所以基本上它有一個initialdelaypreviewdelay,一般來講,previewdelay都很短,可是initialdelay會跟著video越長而越長。這是另外一個,它把不同的model拿出來用,但是基本上就前面這兩個東西來講的話都是在這個裡面的。(下課鈴響)哇,OK,剩下的,這是database的部分,等一下後面有幾頁介紹這個東西。那這個地方,我想今天所做的…因為我所做的這樣一個model裡面,希望在Internet的部分,現在有很多人解釋不一樣,但事實上不需要,我們希望有這樣一個東西,因為你做read ahead,你是不是跟database做得到。下面這個就是database,這就是我剛剛說的,這是我的database server,裡面有用到一個東西,就是OO。這個地方,我們叫做medium object class,每一個medium object,它會有它的counting(?)method,不同的object,它的method會不一樣。另一個地方就是要做searching,我的database要做第一個phasesearching,那我從幾萬個東西去篩選出所要的其中一些,然後在從這裡面開始做preview的動作,這是第二個phase。所以我們medium跟我們的searchingagent就有這樣的關係。那當然,我們mdeium來講的話,目前searching的技術啊,基本上有很大的空間改變。另外一個我們叫做broadcastsearching。因為其實你要找一個video的東西,另外一個方式你可以用文字的方式去找,但是文字的方式又不是你用很多固定的key word就可以找到的,那是做不到的事情。所以我希望能夠base on它的一些相關的文字,而這些文字基本上不限制的情況下去做searching。那這個control base on這個video server來做的。這是我剛剛講的server,這是communication的東西,這邊有一個communication buffer,所以我的index可以放到database buffer裡面。那這個地方我們有做一個synchronization,我怎麼把這些東西做synchronize,在synchronize裡面其實我們以後還有另外一個動作就是希望把這個location放到...。給各位一個question,也不希望各位有答案,我今天也沒有太多時間給各位一個答案。今天如果是Video On Demand,如果今天一個video server可以service十個,我的頻寬是T1,那麼如果有二十個人要來用的時候,怎麼辦?但是如果今天它是一個broadcast的動作,可是broadcast就像我們看有線電視一樣,你必須八點就來看,九點就來看,我可不可以做到一點就是,我任何時間想看我就可以馬上看。給各位一個觀念喔,我們的Video On Demand,是你什麼時候要來看,你就可以從頭開始看。那當然如果在找preview就去做search。另外一個觀點就是說,因為你是Video On Demand,你任何時間想看你就可以看,就會限制到videoserver service的人數。十個還是十五個還是二十個,頻寬到多少。那麼各位想想看,有線電視他採用的是broadcasting的方式,所以今天你有一百個人看,兩百個兩千個兩萬個人看,都一樣,所以它所花的頻寬是一樣的。那我可不可以把這兩個combine在一起,就是說,我要做到Video On Demand,可是我用broadcasting的方式,其實我們目前有一個,就是說我用broadcast的概念來做,這是一個很新的技術,很新的想法,它可以不佔空間。也就是說你不要八點就趕快衝回去開電腦。那,我想這最後的投影片跟各位講一下,我想這樣的技術,我們不需要additional file,第二個,我們的previewframefree的,所以以後錄影帶店可能就要關門了。另外一個,我們不需要任何的additional file去做VCR。再來的話就是,那這裡面把它分開的話就是,總共以上來講,因為你本身在download過程裡面沒有額外的東西,所以你會覺得還好。另外一個你也比較省錢,因為你的preview file不要錢。另外一個很重要的地方是你的所有video已經不是一個file了,你家的disc有多大?兩GB,四GB,不管怎麼樣你的video總能夠比這個大。所以我們的video已經不是一個file了,而是一個medium object,它被分散在不同的file systemOK,我想今天花了很多的時間,希望能給各位一些東西。

相關網站:

[1]  http://www.dbmaker.com.tw/
[2]  http://www.simdb.com/
[3]  http://www.cs.rpi.edu/~kimy/multimedia.html
[4]  http://mmlab.snu.ac.kr/course/mmseminar/odbms/dbms.html
[5]  http://www.librarylrc.uams.edu/wwwroot/MediaDatabase/index.html
[6]  http://www.avanti-acts.org/html/detail/multimedia.htm
[7]  http://microimages.biosci.uq.edu.au/
[8]  http://erciyes.ces.cwru.edu/mmedia.html