2006年12月27日 星期三

Web To Database

我常用的Web系統 (例如中銀智達銀行), 今天完全不能進入, 或是慢得可憐, 令我想起了現時我們使用的Web To Database應用系統, 是如何運作呢?


我從來沒有編寫過任何 cgi 的系統, 例如 ASP, JSP和.Net, 連甚麼Web2.0我也不太清楚了. 或許大家可以告訴我, 它們是如何連接Database呢? 是否每次收到Browser的Request, 這些CGI都要連線Database一次? 做Password Authorization呢? 這樣不是很慢嗎?

另一個可能性就是使用3-tiers (或M-tiers), 即是Browser和Database之間有個Middle Tier,這個Tier會永久連接著Database, 收到CGI的Request, 就可以Send Request到Database, 從Database取得Result, 再交給CGI, 由CGI給Browser, 就算是這樣, 我亦覺得沒有效率.

現今的科技太過講求結構性了, 把系統分得很遠, 例如Web Server和Database Sever是兩個獨立的系統, 當然這樣有其好處, 但就是放棄了效率, 我就不太喜歡這樣的設計.

我在網上解決方案一文寫過MemDB如何編寫Web To Database, 就是把Web Server和Database Server整合在一個系統內, 中間沒有CGI, 即是直接收到Browser的Request, 然後在Memory裡找到Result, 直接Send給Browser, 聯播系統就是用這個技術編寫了.

3 則留言:

  1. 我只知道asp,asp.net及 php
    正常而言,是一次請求便開一次 db 連接,但這樣會對 service 造成大負擔,是以會改成 funtion 方便存取,又或設立緩衝區把 db 的資料存在暫存中,減輕 services 的需求。

    回覆刪除
  2. 照預設的設定,應該係每次web request最少會開一個connection,不過應該可以set persistent connection。
    其實點解要分開web server and database server,可能係 1)先有database,才有web; 2)容易maintain; 3)兩個servers的loading都唔少,可以分開distribute開個loading
    其實如果loading唔大你的方法是最好的,但太大loading的時候,連web server 或 database server 本身都要distributed 開。
    如果好似youtube咁的話連個file system server都要distribute,所以strucutral design是比較化算。
    FYI,Google個index是在memory的,而佢也有一個google file system for distributed storage。

    回覆刪除
  3. 三個 terms: Connection Pool, Caching, Reinvention of the Wheel

    回覆刪除