昨天在論壇看到一篇討論嵌入式數(shù)據(jù)庫HSQLDB(http://www.javaeye.com/topic/79802)的帖子,想到自己曾經(jīng)讀過部分它的源碼,有一種對某些技術(shù)豁然開朗的感覺。所以,也希望和朋友們一起分享,大家有什么好的感受,不如也分享一下吧。下面是我對那個(gè)帖子的冗余回復(fù),我覺得有必要專門發(fā)一篇帖子重復(fù)一下:
說點(diǎn)題外話,建議大家讀讀HSQLDB的源碼,特別是jdbc driver(org/hsqldb/jdbc包)那部分,寫得清晰易懂。讀了它的部分源碼,我自認(rèn)為對下面一些問題理解深入了:
1、JDBC規(guī)范和JDBC實(shí)現(xiàn)的關(guān)系:怎么自己去設(shè)計(jì)一個(gè)規(guī)范,一種架構(gòu)?我是否自己可以為某種數(shù)據(jù)設(shè)計(jì)jdbc driver,如何設(shè)計(jì)?想想php里面各數(shù)據(jù)庫的函數(shù)庫各自為政對程序移植性的影響,就知道jdbc規(guī)范有多么重要了。
2、JDBC協(xié)議:JDBC是基于socket之上的,數(shù)據(jù)包格式(org.hsqldb.Result)(mysql數(shù)據(jù)包格式公開了)?那么JMS數(shù)據(jù)包呢?其實(shí),這也可以延伸到分布式協(xié)議的設(shè)計(jì)原理,如RMI、SOAP。其實(shí),這些數(shù)據(jù)包格式和JSON、YAML這些message格式?jīng)]有本質(zhì)的區(qū)別,只不過應(yīng)用范圍不一樣。任何分布式協(xié)議,肯定有一種message格式。
3、JDBC over HTTP:這樣我們對RMI over IIOP, soap over HTTP, http tunnel原理有更深入的理解。
4、什么是long connection(jdbc的socket),什么是short connection(http),具體怎么實(shí)現(xiàn)?
3和4這些在HSQLDB的org.hsqldb.HTTPClientConnection類里有實(shí)現(xiàn)。
5、Java客戶端和服務(wù)器端的通訊實(shí)現(xiàn):jdbc driver就可以認(rèn)為是一個(gè)java客戶端類庫。那么JMS client呢?還有,像mysql有各種語言的driver,原理是什么。
6、sql這種command、描述型語言究竟在數(shù)據(jù)庫里面是個(gè)什么地位:sql是怎么傳入jdbc driver,最終和database交互的?我們是否可以設(shè)計(jì)出另外一種command,形成一種行業(yè)標(biāo)準(zhǔn),它在服務(wù)器和客戶端怎么實(shí)現(xiàn)的。
以上我的表達(dá)可能有些晦澀,我只想表達(dá)一點(diǎn):大家有興趣就多讀讀經(jīng)典的源碼,擴(kuò)展一下自己的設(shè)計(jì)思路。可能很多人象我一樣,總有忙不完的項(xiàng)目,那么抽幾個(gè)小時(shí)就夠了,不必深入。
有很多技術(shù)我們理解總是很模糊,當(dāng)你深入到內(nèi)部,忽然發(fā)現(xiàn)原來就這么回事。我們總覺得IoC很神秘,其實(shí)最簡單的IoC容器,也許一個(gè)HashMap就夠了。
引用的http://www.javaeye.com/topic/80532
大盤預(yù)測
國富論
posted on 2007-09-06 10:21
華夢行 閱讀(665)
評論(0) 編輯 收藏 所屬分類:
Oracle