[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 有更多更新更方便好用的功能。^^