2009年10月30日 星期五

溫室裡的工程師

在矽X寫第一隻程式的時候,突然想起如果是有幾百萬筆資料,他們會怎麼想,如果使用者亂拉資料,DB Server不怕Crash掉嗎?根據溝通的結果。。。。他們說。。。銀行也只會調今年的資料,我反問說,萬一,櫃台小姐想調出5年前的交易紀錄,怎麼辦

PS.資料很有可能很大(如果每次都SELECT *....沒幾個人玩,DB Server記憶體要擴充到幾百G都有可能...)

他們:........

我:!!(。。。)

好吧,我自己想,在艾瑞克也是這樣解的。。。很多無解的問題也是這樣解的

1 則留言:

  1. 其實這樣技術當天就寫出來了,花了3個小時去實做出來,想法如下:
    當使用者下條件的時候,有可能會拉出很多筆資料,資料量可能會到幾千幾萬,傳統的作法是,全部撈出來,放在記憶體裡面,然後,挑選要看得資料,接下來修改『那一筆』資料,回存資料庫。

    這個作法當然是好,既安全又可靠,可是,每次都撈一大堆,實際上要看得就那幾筆,浪費不只記憶體空間,網路傳輸也是一項負擔,當然,可以叫客戶全部買G等級的網路,然後賣一堆設備賺錢,可是,身為程式設計師,難道每次都要靠硬體?沒有我們自己的想法嗎?有的,動態查詢專門解決這一項問題,只撈出『螢幕顯示』的資料,同時用SQL去算出一共有幾筆,再記憶體制造出虛擬的資料量,同時餵給DataGridView或是GridView不管。。。。重點是,如果螢幕一次只能顯示10筆資料,客戶所下的條件可能會查出500筆,程式就只撈1~10筆,當然有人會反應,這樣DataGridView不是就沒有上下捲軸了?當然有解,下一個動作是用SQL去算出一共有幾筆,扣掉目前有的筆數,用迴圈填入空白的ROW,這樣一來,客戶端『看』起來有500筆,實際網路傳輸的時候只有10筆,當客戶端滾動捲軸,準備要看到空白的ROW的時候,再去撈11~20的資料,替換掉空白的ROW,使用者會覺得程式很順,硬體完全沒有負擔,實際上,程式設計師的演算法解覺得這一項問題。。。。。程式有興趣自己跟我要Windows版跟Web版都有

    回覆刪除