歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> 為什麼ODBC不是Linux的一個標准特征?

為什麼ODBC不是Linux的一個標准特征?

日期:2017/2/27 12:21:06   编辑:Linux文化

幾年前,微軟宣布了稱為Windows開放服務架構(WOSA)的技術戰略。WOSA 的精華是開放式數據庫連接(ODBC),它是Windows平台提供一套通用數據庫存取服務的模型,而數據庫供應商為他們的產品提供適配器。所以,Windows應用能避免為數據源編寫的適配器的工作,相反地借助標准化的ODBC架構存取數據,能集中精力做一些有用的事情。在Windows的其他地方也有同樣的思路在起作用。例如,統一的打印機和調制解調器訪問。並且微軟做了一個極好的工作以抵銷各種各樣的網絡之間的差別。Windows網絡服務可在TCP/IP、IPX/SPX和NetBEUI上以相同的方式運行,因為平台在一個中間層上抽象這些協議的差別。

“微軟只是一個商業的公司,”Linux 社區喜歡這樣看。這種說法有很多真實,但是真實的故事卻要復雜的多。當微軟將WOSA風格的抽象引入核心服務,它是作為改革者出現,而Unix/Linux更象是蹒跚學布的原始人。

我現在為什麼提起這個問題?上星期我在做一個Zope/Python的應用需要與一個SQL數據庫通信,我從Godfly開始,它是一個全部用Python編寫的輕重量級別SQL數據庫引擎。 Godfly確實很靈活,並且它是Zope內置的數據引擎的一種解決方案,你可以立即用於原型設計,但是一個置於內存的基於腳本語言的SQL引擎將無法處理我的項目需求,而且, 與Godfly一樣,它只是SQL的一個子集--例如無ALTER TABLE命令,因此現在正是把Zope掛到一個傳統的SQL引擎上的時候了。

在我家庭實驗室用NT工作,是因為ODBC的不用動太多的腦筋。Zope提供一個稱為ZODBCDA適配器產品,它可在數秒內安裝,並且立刻讓你的Zope環境存取所有系統被設置與之通信的ODBC數據源。這些可能是經由Jet引擎存取得的本地.MDB文件,或者是Oracle、SQL服務器或任何其他數據庫的本地或遠程實例。

在我的應用建立原型後, 現在是運用它的時候了,運用平台是Linux和MySQL。Zope本身在Windows上和Linux上同樣運行,我已經發現這點,因此我不期望有任何麻煩,但是因為我想當然地相信ODBC數據源的中間性,但悲慘的事實中間性還遠離Linux世界的常規。特別是Zope和MySQL,你得:

找到並構建將Python捆綁在MySQL客戶庫的Python擴展,然後構建Zope包裝程序以事適配這個SQL擴展。

我以前從來沒有構建過Python,我試一了試但失敗了。我肯定有其他讀者嘗試並且成功,我為它們鼓掌,但難道你不是花時間用Zope做些有用的事情,而非將自己處於一個你能開始做事的境地嗎?生命太短暫了。那天的結束後,我從Python回到了Perl,並且然我的應用很快運行起來了。為什麼呢?Perl的類ODBC驅動程序管理器DBI已經在我的機器上安裝好了,它是DBD::mysql-MySQL適配器。總的來說,由於DBI設計師Tim Bunce和一大批真正的驅動程序編寫者的出色工作,Perl用才分享著ODBC的許多好處,但是你沒有看到這種景象有什麼不對嗎?投入Perl DBD::mysql的勞動力竟沒有一個人繼續進行Python、PHP、Tcl或其他要與MySQL通信的應用的開發,這些環境的每一個都必須定義它自己的數據庫抽象層,然後希望鼓勵 開發者建立全部數據庫的適配器。有時它會發生,但通常不是,結果是五花八門的數據源。在數據庫新聞組我問了:為什麼堅持應用在一端而數據庫在另一端這種瘋狂組合的泛濫,所有這些都必須以成雙成對的方式連接嗎?注意在Windows中,僅需要一個Zope ODBCDA,它讓你進入缤紛世界。我確實希望Linux/Unix也能如此。

看Perl DBI的例子。它是一個有力的嘗試,證明驅動程序管理器/數據適配器模型是必要的。 ,但僅僅是對於Perl。那麼Python來了,必須開發一個Python的DB-API,並希望得到廣大的數據庫開發者們支持它,就像Perl開發者們支持其“通用”API一樣。

我斷言如果你把投入在針對Unix數據庫的Perl、Python、PHP、Tcl或其他只有上帝知道的東西的努力全部加起來,大大超出得到一個完備的由這些環境和數據庫供應商曾經支持的類ODBC模型。

事實上,Alastair Sherringham已經說過,這些問題正在被解決,他提交給我們給一些URL記錄了各種各樣的 ODBC-for-Unix 努力:

Brian Jepson's FreeODBC pages:http://users.ids.net/~bjepson/FreeODBC/ The Unix ODBC project:http://www.unixodbc.org

事實上我聽到這些好多年了,但是我不得不感到驚訝:

與4年前相比,通用的數據庫抽象層為什麼今天感覺不到進一步成為Linux的標准部件?

我想知道是否開放原代碼的進程-至少當到目前為止我們看見它-並為加快人認同並取得這種戰略目標。

我不想批評或輕視這些不懈的努力,我只是真誠地想知道怎樣做在能使在Linux上的多廠家數據庫存取能像在Windows上那樣直截了當。

另一個更深入的有趣URL:

http://www.openlinksw.com/iodbc/

在1999年1月,OpenLink軟件公司宣布它將管理以iODBC(independent ODBC)而出名的開放原碼工程,它原來是Ke Jin完成的微軟ODBC驅動程序管理器的一個移植版本。因為OpenLink軟件公司是一個有豐富數據庫技能的公司,這聽起來前景大有希望,也許Openlink的工作最終將推動Linux數據庫存取技術。為了知道更多,我打電話給了Openlink的總裁首席執行官Kingsley Idehen。

Jon(筆者,下同):我無法告清所有這些Unix ODBC行動的脈絡。 Kingsley:有3個主要的線索。首先是iODBC,是由Ke Jin啟動的公開原代碼工程,這是我們支持的一個。然後有Merant ODBC SDK,它是Merant(Micro Focus和INTERSOLV合並而成)從Visigenic繼承的。該ODBC for Unix產品基於微軟許可的代碼並移植到Unix,它不是公開原代碼的。最後有unixODBC,它也使用 iODBC並且增加圖形用戶界面以支持驅動程序更友好的安裝和配置。

unixODBC使用另外一個ODBC驅動程序而不是iODBC,這樣做是因為他們想要一個ODBC 3.5驅動程序而不是ODBC 2.5,他們宣稱將走得更遠,為此開發另一個unixODBC項目改進iODBC。

jon:為什麼ODBC的推動力來自微軟而非Unix社區?

Kingsley:不是的。SAG CLI(SQL Access Group Call-Level Interface-SQL存取組調用層接口)最早(大約1990)由Unix數據庫供應商-Oracle、Informix等提出的,微軟以後才加入。但是微軟領悟了,而Unix 社區從來沒有,一個圖形用戶界面能如此擴大觀眾的視野。用戶友好的安裝、配置和測試是微軟實現的特征,它幫助微軟取得巨大的商業成功。

Jon:為什麼iDOBC仍未沒獲得這樣的吸引力?

Kingsley:問題是它在GNU GPL下發行,不是LGPL(原Library General Public License, 現在是Lesser General Public License,見http://www.gnu.org/copyleft/lesser.html)。在我們開始了支持iODBC時,我沒理解其中的差別。但是當我們發行在iODBC上的Virtuoso時(Openlink 商業通用數據庫產品),人家告訴我:“Kingsley,iODBC是GPL'd,因此你必須也讓人家得到Virtuoso的源代碼”。用LGPL,你能發行連接到公開原代碼庫的一個商業產品。既然iODBC是在LGPL下,我希望我們除掉一個去大障礙並將看到豐富的iODBC工具和Linux應用的崛起。

Jon:unixODBC呢?

Kingsley:我與Richard Stallman正在討論這個LGPL問題,unixODBC作為一個LGPL項目啟動,並且兩個主要領域取得進展。首先,不論iODBC是沒有GUI的一個傳統Unix應用軟件,Unix ODBC旨在用Qt做出圖形界面,並且與KDE集成。第二,Unix ODBC從ODBC 2.5進展了到ODBC 3.5。

Jon:你的iODBC項目當前計劃是什麼?

Kingsley:我們准備發布符合ODBC 3.5的一個iODBC的版本,但它也與ODBC 2.5是向後兼容的,並且我們增加圖形界面部分,但是我們正在用GTK開發,因此他們將工作在KDE和GNONE。在大約一兩個星期內,你將看見它的beta版。希望關注unixODBC的人們能認識到仍然有很多的工作要做。為了使iODBC確實出色,我們將開發一個包括Gator(ODBC 測試工具)和支持跟蹤的驅動程序管理器的最佳實現,因此人們可以評價和體是其應用。

Jon:你為什麼正在做這項工作?

Kingsley:我們相信質量而非市場炒作。Linux是一個高質量廠品,我們想要看它在黑客和商業社區都取得成功,這意味必須有一個通用數據綁定層,在它上面構建桌面/終端用戶和服務器者解決方案。很自然這綁定層的候選者是ODBC驅動程序管理器,這一層也顯然需要公開原代碼。歸根結底Linux、UNIX和WIN32將駐留大量的遵從ODBC的工具,只要我們不斷地開發高效ODBC驅動程序,我認為我們的商業目的將也仍然是保持完整。

ODBC驅動程序管理器(DM)應該是置入OS的基礎結構技術(就像Windows下的ODBC那樣)。因為Linux是有爭議OS,ODBC DM必須公開原代碼,但是要有正確的許可證(LGPL而非GPL)。

Jon:最後還有的什麼想法?

Kingsley:總的說來,非Windows社區沒能看到或欣賞SQL數據的基本重要性。這是世界上的最不可思議的事,看看這個社區是由一些你能在任何地方找到的技術尖子和決定聰明的人組成。微軟理解地最好的是數據中心化,使得一個平台同樣推動應用開發人員和終端用戶等。我正在期望Linu、Unix和其他非Windows 社區又一天能理解這些。我對這項努力的貢獻是我對的iODBC公開原代碼的項目的支持。

Linux社區的人們沒能看見數據的重要性。它是在地球上的最不可思議的事情。微軟理解地很好的,在今後,正式數據綁定使得一種平台推動商業用戶。微軟領悟了,Linux卻沒有。


——摘自:http://linuxdb.yeah.net


Copyright © Linux教程網 All Rights Reserved