2006/09/15

由AJAX設計導入來談資料庫資料分頁實作

程式碼說明版請連至 [Java技術論壇]

談到分頁這個問題,其實算是個討論到爛的設計,目前說法大抵可分「一次讀完」,與「建立索引」 這兩派。

一次讀完再慢慢地分,簡單來說就是一口氣將資料庫的屬於該邏輯的所有資料讀到記憶體中,再依使用者所要求的區間來呈現資料表內容。這方法的好處是可以降低平均整體查詢資料庫的時間,也就是降低與資料庫之間存取的頻率。而缺點就是必須提供大量的記憶體來儲存整個資料表內容,而且不能即時反應資料庫的變化。

建立索引的方式則是取得資料庫的資料表內含的索引,再讓使用者依照分頁索引來查詢出資料庫內的資料表該區間的資料。這方法的好處是僅需在記憶體內提供一些位置給使用者做資料表更新與索引表物件,缺點就是對資料庫的存取頻率較高,連結資料庫的動作所消耗的時間較多。

當然,有些額外的手段可以使資料庫查詢的動作簡化,就好比說是Connection Pool,這幾乎可以讓建立連結的時間忽略不計,而只需考慮到資料庫本身處理SQL語法的速度。但仍有些部分是無解(也不能這麼說,因為阿扁言:能用金錢解決的問題就不是問題。),那就是記憶體的使用量。

正因為金錢的來源是大問題,所以實際上要設計分頁還是要回歸使用者的使用習慣和查詢功能。若使用者的查詢習慣是只看前幾筆最新的內容,則一次讀完的方式顯然太浪費記憶體。又若使用者的習慣是將所有每筆資料逐筆查詢做運算,則建立索引的方式就顯得無用武之地。

既然使用者的習慣捉摸不定,那麼設計者就應要在介面上來隱性導引使用者習慣。好比說頁面僅呈現該區間資料的簡略屬性,若需要詳細資料,可再繼續按下按鈕調出詳細的屬性。而要調閱及時反應的最新資料,僅需使用者按下了分頁的第一頁,整批索引便立即更新,即可調閱最新一批資料。這些都是目前各開源的討論區作法的一部份。

而如今,有賴於AJAX的流行,我們更可以將所有資料作更分散式的取得,讓使用者有者近似於「一次讀完」的速度,又可以達到「建立索引」的記憶體節約。



上圖的分頁內容為使用「建立索引」的方式來呈現,搭配了Connection Pool之後,分頁的速度也頗為迅速。由於此服務的使用者習慣為檢閱最新資料以及指定時間區間的資料,因此在資料呈現上提供了最新十筆資料,並在右下角要求使用者一頁頁往前翻查,再不然也可以使用日期輸入器指定日期區間來做查詢。



接著,若按下了事件旁的按鈕,則會啟動AJAX function,將指定的單筆資料撈回做處理。由於不用換頁,因此此分頁的內容無須在重新reload,也無須重新查詢一次整個頁面的事件數。 即使系統忙碌,使用者也可藉由讀取中的小icon來得知目前正在等待事件事件內容資料,而不像目前一般討論區在閱讀文章遇到系統忙碌時,使用者只能看著瀏覽器底下的進度欄緩慢地前進,頁面空白一片,不知所謂。



當然,若要更狠一些,還可以將整個頁面都以JavaScript配合XMLHttpRequest來呈現出來,但我想那已經已經算是「純」Web 2.0 網站(Beta都應該還不算是吧!)的範圍了吧。

註: 「純」web 2.0,我想每個人心中都有一把尺,我認為像是Google ig、start.com、以及Windows Live Mail beta 的純度應該比Yahoo奇摩那些大得多

2006/09/07

老人之死

這是一個改編的故事,這是件真實的事情,也許有人曾在報紙上看過類似的社會事件,謹以此獻給現在正在孤獨生活的老人們。

「老了,也該休息了吧!」老人這樣想著,在他奮鬥了數十載之後,他也該可以頤養天年了吧。

老人有四個兒子,三個女兒,在十大建設的那年代,他一肩挑起了養大這些兒女的重責。如今,兒女們都長大了,都有了自己的事業了,他的責任似乎也完成了,看著子女們事業有成,他的內心洋溢著滿足的愉悅。

這天,七個兒女都回老家來了,在他們母親的照片下頭,老人宣布了財產的分配方式; 不知過了多久,七個孩子原本堆滿微笑的臉,漸漸的僵硬了起來,每個人似乎均不滿他們所分配到的財產,忌妒的眼光飄在七人之間,唯一看起來覺得愉快的,只有老人與牆上的那張黑白遺照。

原本便不常回家的孩子們,在分了財產之後,就幾乎是完全不回家了。

不知過了幾個月,春節到了,老人終於盼到了今天,幾個月來,孤寂一直伴隨著他,除此之外,就只有鄰居以及那隻不知何時定居在院子裡的胖貓。而今天,終於到了一家團聚的時候,要發給孫子們的壓歲錢,也都準備在胸前的口袋中,他盼啊盼的,就是等著大家回來吃頓年夜飯。

「爸,我們今年不回去了,琦她感冒了,不舒服,我要待在家照顧她,對不起了,爸,就這樣囉!新年快樂!」「好!叫小琦保重身體呀!新年快樂!」老人緩緩的掛上了電話,隱隱露出了頹喪的神色。今天是除夕,他已經接了四通這樣的電話了; 到了大年初二,他又接到了三通,理由仍是大同小異,就這樣,老人的新年就在七通電話聲中過去了。

春節過去,全家人一起的機會便更少了,老人仍繼續孤寂的生活下去,但他絕對想不到,他的寂寥,竟是他對子女們的愛造成的。然而將孩子養大,將財產分與了他們,這就算愛了嗎?老人就活在這樣奇怪的邏輯之中。也因此,他那七個孩子每個人都認為,父親對其他兄妹的「愛」,要比自己來得多得多了。

終於,中秋節到了,到了這個「月圓人團圓」的節日,幾個月來,老人所得到了,除了孤寂外,只有鄰居們同情的目光與安慰的話語,而他所構想的「頤養天年」,卻僅僅是他夢裡的畫面。中秋團圓夜,他的兒女們會來嗎?

夜深了,貓兒也睡了。老人望著皎潔的月光,在他的眼中看來是如此的冰冷。活了一輩子,吃過了多少的苦,經歷了多少的風霜,卻沒有今晚的月光如此令他心寒; 明早,他是否又要面對鄰居們同情的目光,同情他在這全家團圓的日子裡,仍是孤零零的一個人; 他怕這種憐憫的眼神,他被這種眼神壓得喘不過氣來,他想逃開,從僅剩無多的日子中永遠的逃開。

早晨,一輛警車停在老人的門前,一棵老樹,一張凳子,一條麻繩,就這樣,老人過去了;但是,沒有人知道,在明年掃墓時,他的墓前會聚集著多少的子女......

~ 本文於 1997.11.27 初草~

2006/09/05

【敗家實錄】ATH - ES7

一直想買個掛在頭上的耳機,於是在今天下班前,看了PTT耳機版上的資訊之後,下班後就衝到了重慶南路二段的音,想比較一下ES5以及PX200這兩支耳機聽起來的好壞。

我測試的音源很普通,是我平常在用的iPod Video,聲音感受的基礎為我去年買的ATH CM7 Ti。比較的曲目為音樂劇鐘樓怪人原聲帶的兩段: Ou e st-elle 以及Etre pretre et aimer une femme。而我所謂的感受,是指我在聽歌曲時,身體是否會因曲目的高潮而打冷顫作標準。
【迷之音】你這個色狼!又高潮又打冷顫!

一開始老闆娘先拿了牆上的大耳機給我聽,記得第一隻叫做M One。一連換了兩三隻,我都聽不到那種我想要的感覺。據老闆娘解釋,大概是iPod沒辦法驅動阻抗(32)那麼大的耳機吧! 。(就算是音量調大也是一樣)

當放棄了之後,我決定告訴老闆娘我原本來的目標物,ES5以及PX200這兩支。當初想比較這兩支的原因其實很簡單,就是我不想在新耳機上再花太多錢了。

結果,老闆娘說店裡的PX200借給雜誌社沒得聽,所以我只有ES5可以聽,ES5聽起來雖然比剛剛聽的好一點,但離我想要的感覺還是差一些。

聽著聽著,心中真的感到很無奈,又看著老闆娘在忙,於是我拿起掛在旁邊的ES7想說聽聽看有沒有差別...

是了!就是這種感覺!吉他的撥絃聲是如此地明亮,神父渾厚的高亢的聲音充分表現出他內心想上了女主角的掙扎!這就是我想要的感覺啊!
【迷之音】你果然很色! = =a

於是我問了工讀生美眉ES7的價格,結果她報了個自稱是網路上的最低價,NT$4200.-,這價格與我預算的ES5(NT$2600.-)整整差了1600元啊!! Q.Q

不想花這麼多錢的我,於是又問老闆娘,3000~4000之間有沒有什麼其他的可以選擇,於是老闆娘又拿了一隻Sennheiser HD215給我聽,聽完之後,我還是很認命地選了ES7...

唉... 耳機這東西真的不能比,比來比去,我又超過預算好多錢...

回家後看到PTT耳機板上提到,音ES7白色其實是賣NT$4000.-;唉~想必老闆娘認為我是買定了,所以不給我這價錢吧!撇開這不談,音的確是間服務不錯的店。
【迷之音】乖~買了就別再回頭看價錢了!

肉包

小明總是在住家附近的肉包店買肉包,20 年來,肉包從一顆 10 元漲到一顆 30 元,從一天可以吃三顆,到一天只能吃一顆,今天他心血來潮問了老闆為何這些年漲了這麼多,老闆很驕傲地回答... 「這區的店租漲價了啊!然後你沒發現我們現在店面不但有冷氣,又有座位,還有 80"...