[PHP] ADODB ≠ Cross Database

在 PHP 程式設計上 ADODB 的使用率愈來愈高,但是很多人都搞不清楚自己為什麼要用 ADODB,甚至在各大 Open Source 論壇都會看到有人發表類似「ADODB = 跨資料庫保證書」的錯誤觀念。


我相信 ADODB 在使用上有九成以上(這是我自以為是的數據) 都只是連接單一資料庫而已。ADODB 身為 Database Abstraction Layer 已經算是相當盡責的讓程式設計師能更方便的存取資料庫,但是 ADODB 的部份功能都是要用龐大的效能來換取程式設計師的方便。

如果只是公司內部使用的程式,使用人數也不多的時候,程式設計師貪個方便使用像 GetInsertSQL、GetUpdateSQL 或是目前最新的 AutoExecute 這種簡便的更新資料庫方式也未嘗不可,但是對於同時間大量存取的網站,這類方便的方式就會轉為程式效能的致命傷。

至於 ADODB 的跨資料庫功能,沒看文件的人可能不知道在設計上的注意事項:
Portable SQL Tips with ADOdb

對於沒有實際接觸過各種不同資料庫的人,大概很難想像上面說的東西。要跨資料庫 (Cross-Database) 除了在程式要使用標準 SQL 語法(如 SQL-92、SQL-99 ..) 之外,有些資料庫並沒有像 MySQL 、M$ SQL 具備自動產生數量編號的功能 ; 甚至有的資料庫根本就不支援 JOIN,諸如此類的問題雖然 ADODB 都有考量進去,但是實際上有去注意及使用 ADODB 跨資料庫相關功能的人並不多,因此對於使用 ADODB 就代表程式跨資料庫的迷思真的應該要更正過來,尤其 OpenSource 的軟體除非官方作者明白表示該程式可跨資料庫,否則基本上應該都是只支援單一資料庫的。

如果是中大型企業的軟體,要跨資料庫更是難上加難。一般大型的商業資料庫必須藉由 Stored Procedure 或 Trigger 等功能來輔助其複雜的商業流程。因此像 ADODB 只是單純用組合 SQL Command 的方式來做 Cross-Database 也僅限於邏輯簡單、同時需要具備資料庫可攜性的軟體使用。

因此想跨資料庫不要指望 ADODB,把它當成一個簡單的存取介面就好。ADODB 本身所提供的跨資料庫功能不過讓使用者需要做資料庫移轉的時候,可以少花一點時間而已。如果沒有跨資料庫的需求,也不用為了「有可能」要跨資料庫就把自己的程式碼寫的綁手綁腳的。

雖然 ADODB 雖然模仿 M$ ADDOB 模仿有點不太像,但至少它給 PHP 使用者的方便性也是可圈可點的,也期待 ADODB 有更多更新更方便好用的功能。^^

7 comments On [PHP] ADODB ≠ Cross Database

  • 假 OO 的 class 是 php 速度上的致命傷.

    包了一層又一層的 class 是惡夢呀…

    php 作者 rasmus 曾經說過,

    一般寫法也可以寫出 php class 做東西,
    為甚麼一定要用 oo 呢?

  • 為了炫耀自己懂 oo

    不過老實說,用 function call 牽過來連過去,
    還是不如用 php class 包起來,看起來比較清爽,
    將來要改 method 時也好找。

  • 如果是極小、時限短的話,function call 就非常適合用來完成專案。

    我用 OO 的目的其實大部分的原因是衝著 OO 的彈性與容易 reuse。OO 當然不是萬靈丹,對於一個專案有詳盡的了解和規劃才是最佳解。

  • Dear Neo…

    請問一下,PEAR:DB跟ADODB那個比較好用呀…
    看你的文章好像ADODB會耗很多系統資源..
    但是好像有些文章提到ADODB的效率會比PEAR:DB…
    這讓我有點困惑…既然很耗系統資源,效能為何會比PEAR:DB好呢…
    煩請Neo解惑一下…

    Kevin..

  • Kevin:

    Sorry..PEAR::DB 我沒用過。

  • 呵…
    沒關係啦…還是謝謝你的回答…

  • 没有auto_increment支持的数据库,可以像Drupal那样用sequences来自行记录ID

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar