新商務(wù)模型和企業(yè)組織的不斷融合打破了傳統(tǒng)的網(wǎng)絡(luò)計(jì)算的邊界,在這種情形下更高級的分布式應(yīng)用程序和支持移動(dòng)數(shù)據(jù)的需求變得越來越強(qiáng)烈。
作為填寫表單、backoffice數(shù)據(jù)處理電子表格,或者當(dāng)從旅途歸來時(shí)浪費(fèi)工作時(shí)間來輸入數(shù)據(jù)的取代,現(xiàn)在移動(dòng)辦公人員使用手持設(shè)備、智能手機(jī)、平板或膝上型電腦運(yùn)行便攜式客戶端軟件來輸入或取出數(shù)據(jù),而且這些設(shè)備正在開始處理他們的數(shù)據(jù)并和backoffice系統(tǒng)同步來引發(fā)商業(yè)過程-例如,自動(dòng)售貨機(jī)跟蹤記錄本機(jī)庫存清單來實(shí)現(xiàn)按需補(bǔ)貨。
移動(dòng)化使企業(yè)得到了更多利潤和更快的執(zhí)行時(shí)間,企業(yè)已經(jīng)意識到移動(dòng)化的價(jià)值并且已經(jīng)開始升級自身的IT部門來加速推進(jìn)這種把競爭優(yōu)勢帶入基礎(chǔ)部門的整合。
作為移動(dòng)化趨勢的結(jié)果,Java和.Net開發(fā)人員正在探索應(yīng)用在分布式、客戶端為中心的設(shè)備上存儲數(shù)據(jù)的解決方案,并且發(fā)現(xiàn)傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在運(yùn)行環(huán)境需要零管理、占地小和靈活的時(shí)候的不足之處,比如,產(chǎn)品化的數(shù)據(jù)庫在更新數(shù)據(jù)模型方面的能力已經(jīng)被分散在成千上萬的客戶端字段內(nèi)。
而目前大約50%的開發(fā)者仍然自己編寫持久化解決方案來滿足這些需求1,現(xiàn)在一個(gè)快速成長的用戶社區(qū)選擇了db4o的面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)設(shè)計(jì)用來滿足上面描述的確切需求。
一些公司包括 Hertz, Eastern Data, Mobilanten and Mandala 已經(jīng)在他們初步的移動(dòng)解決方案中使用了db4o,而且很多正在開發(fā)額外的產(chǎn)品過程中。

db4o不僅為無縫集成以客戶端為中心的持久層提供可移動(dòng)的,原始語言數(shù)據(jù)庫。從2006年1月起,它還提供依靠db4o復(fù)制系統(tǒng)(dRS),基于Hibernate的一種整合分布式、面向?qū)ο蟮腷ackoffice數(shù)據(jù),以服務(wù)器為中心的,例如Oracle或MySQL這樣的關(guān)系型數(shù)據(jù)庫的解決方案。
在這篇文章里,我想要通過一個(gè)具體用例詳細(xì)討論移動(dòng)企業(yè)解決方案以突出挑戰(zhàn)性,使用db4o的移動(dòng)數(shù)據(jù)庫來表明具體的好處。
1. 案例可移動(dòng)企業(yè)級應(yīng)用的傳統(tǒng)結(jié)構(gòu)是網(wǎng)絡(luò)化的,在以服務(wù)器為中心的數(shù)據(jù)中心運(yùn)行著一個(gè)或多個(gè)中央數(shù)據(jù)庫實(shí)例,和許多分布式,周期性連接的客戶端。周期性連接意思是:在某些時(shí)候,你是離線的,因此數(shù)據(jù)需要永久的存儲在客戶端上。但是在另一些時(shí)候,你是在線的(無線的或者直接連接到PC或某個(gè)網(wǎng)絡(luò)),從而能夠在數(shù)據(jù)中心和客戶端設(shè)備存儲中同步數(shù)據(jù)。
我們假設(shè)一個(gè)地區(qū)銷售代表,Larry,他在一家生產(chǎn)裝飾品的公司工作。Larry的智能手機(jī)上運(yùn)行著一款以db4o為數(shù)據(jù)庫的軟件,并且可以與他公司的CRM和訂單處理系統(tǒng)連接。
Larry正打算離開辦公室去拜訪一些他所負(fù)責(zé)區(qū)域的客戶。因?yàn)樗喇?dāng)他在路上的時(shí)候不能很好的接收數(shù)據(jù),他點(diǎn)擊屏幕上的某個(gè)按鈕與桌面電腦同步他的智能手機(jī),得到他所有客戶和他們的相關(guān)業(yè)務(wù)信息(例如訂單)的最新數(shù)據(jù)
當(dāng)?shù)竭_(dá)第一個(gè)客戶那里時(shí),Larry發(fā)現(xiàn)他要延遲上一筆訂單的交貨日期。因?yàn)長arry已經(jīng)有了他所有客戶的訂單信息,Larry在他的智能手機(jī)上找出這個(gè)訂單并且商定了一個(gè)新的交貨日期。
與客戶商議需要制定的日期時(shí),這款軟件會根據(jù)商業(yè)規(guī)則來檢測期望制定的日期是否可用,通常商業(yè)規(guī)則是和“訂單”對象存儲在一起。商業(yè)規(guī)則會監(jiān)測多種商業(yè)因素,例如公司產(chǎn)品進(jìn)度優(yōu)化算法、某些基本庫存和關(guān)鍵材料可用性信息。比如系統(tǒng)剛剛更新了一個(gè)新的商業(yè)規(guī)則, 作用是用來監(jiān)測某個(gè)反映產(chǎn)品規(guī)范中新近變化的關(guān)鍵輸入組件的可用性。由于數(shù)據(jù)同步的面向?qū)ο蟊拘院蚫b4o的自動(dòng)語法演化,智能手機(jī)上會已經(jīng)存儲這個(gè)信息而不需要再做額外的管理工作,例如在關(guān)系數(shù)據(jù)庫中建立或修改某個(gè)table。由于這種更新的靈活性,Larry的公司發(fā)現(xiàn)更新產(chǎn)品進(jìn)度表比以前更加簡單方便,因此保持了市場競爭力。

在第二位客戶那里,客戶的訂單已經(jīng)交貨。客戶想要增加訂貨,所以Larry找出客戶的上一筆訂單并且增加了一筆新的具有相同產(chǎn)品的訂單。
之后Larry在一家咖啡館短暫停留了一會,他打開他的智能手機(jī),并通過GPRS讓手機(jī)連接到他的辦公室。輕輕點(diǎn)擊一下,他的更新的訂單就與應(yīng)用程序服務(wù)器完成了同步。兩項(xiàng)任務(wù)被添加到任務(wù)列表里:那筆修改交貨日期的訂單已經(jīng)開始生產(chǎn),所以不能修改交貨日期。他電話通知了客戶。第二位客戶的新訂單已經(jīng)被核準(zhǔn),正在計(jì)算交貨日期。他同樣打電話給第二位客戶來商定交貨日期。
整個(gè)數(shù)據(jù)同步過程實(shí)際發(fā)生在Larry的應(yīng)用程序內(nèi)部。內(nèi)嵌的db4o復(fù)制系統(tǒng)(dRS)為自動(dòng)復(fù)制任何修改后的數(shù)據(jù)對象提供了可能。整個(gè)復(fù)制過程與傳統(tǒng)的RDBMS復(fù)制能力相比可以包含復(fù)雜許多倍的商業(yè)邏輯。例如,在這個(gè)案例中,產(chǎn)品團(tuán)隊(duì)已經(jīng)開始裝配第一位客戶的訂單,因?yàn)檫@個(gè)訂單上的產(chǎn)品已經(jīng)被鎖定,所以同步請求被駁回。如果不使用db4o,我們必須手動(dòng)將這個(gè)邏輯編寫進(jìn)網(wǎng)絡(luò)應(yīng)用程序內(nèi)。然而,通過使用db4o和dRS,我們需要編寫的代碼僅是一個(gè)簡單的檢查訂單是否已經(jīng)被生產(chǎn)的沖突檢查對象。dRS的應(yīng)用程序接口同樣勝任自動(dòng)任務(wù)執(zhí)行,事件產(chǎn)生、或提示用戶做出選擇。
一旦數(shù)據(jù)和辦公室內(nèi)的應(yīng)用程序服務(wù)器完成同步,Larry所做的改變對其他用戶立即可見。新訂單開始被產(chǎn)品部門處理,購買訂單所需要的材料會自動(dòng)產(chǎn)生。
使用傳統(tǒng)技術(shù)也可能完成所有這些事情,但是那會包含許多關(guān)系表格,所有這些表格需要被僵硬的、靜態(tài)應(yīng)用程序代碼所引用,由許多行非原生SQL字符串組成,結(jié)果使重構(gòu)變得異常笨重。快速進(jìn)化的產(chǎn)品在基礎(chǔ)層面上維護(hù)所有這些代碼將會是很耗時(shí)的。對于每個(gè)平臺所有這些工作也不得不重復(fù)一次:從移動(dòng)設(shè)備到應(yīng)用服務(wù)器,再從應(yīng)用服務(wù)器到銷售團(tuán)隊(duì)的分析服務(wù)器。與此相反,db4o只需花費(fèi)開發(fā)人員的很少量時(shí)間在應(yīng)用程序中添加幾行代碼來完成這些。
2. 用db4o實(shí)現(xiàn)分布式應(yīng)用程序大多數(shù)流行的應(yīng)用程序都是用面向?qū)ο笳Z言開發(fā)的,大多數(shù)真實(shí)世界的數(shù)據(jù)也很容易用面向?qū)ο笳Z言表示,從這方面講開發(fā)人員也應(yīng)該考慮使用db4o。
在商業(yè)程序里,使用“客戶對象” 表示比用“客戶表格里的一行數(shù)據(jù)”表示更加有價(jià)值。例如:客戶對象可以包含這樣的邏輯,決定當(dāng)客戶可以訂購某個(gè)產(chǎn)品時(shí)是否允許其訂購,然后算出相應(yīng)的價(jià)格。傳統(tǒng)的做法,開發(fā)人員不得不編寫大量的數(shù)據(jù)庫查詢并用很多方法計(jì)算出結(jié)果,然后這樣的邏輯拙劣的被打包重用并存儲到移動(dòng)設(shè)備上。
db4o允許開發(fā)人員把精力放在如何讓應(yīng)用程序更好的工作而不是花時(shí)間在設(shè)計(jì)數(shù)據(jù)庫schema并編寫持久化代碼上。實(shí)際應(yīng)用中,已經(jīng)證實(shí)db4o可以減少開發(fā)數(shù)據(jù)持久層90%左右的費(fèi)用。
分布式db4o應(yīng)用程序也同樣簡單。db4o設(shè)計(jì)用來內(nèi)嵌入軟件組件,并且對于最終用戶完全不可見。部署db4o就如同你在安裝程序中包含一個(gè)單獨(dú)文件那樣簡單。沒有安裝、配置、維護(hù)數(shù)據(jù)庫方面的花費(fèi)。
此外,db4o會自動(dòng)適應(yīng)應(yīng)用程序的升級。它假定沒有數(shù)據(jù)庫管理員,并且允許應(yīng)用程序從舊數(shù)據(jù)庫更改到新數(shù)據(jù)庫的無縫轉(zhuǎn)換,結(jié)果是:簡單、平滑、快速的部署和低廉的支持花費(fèi)。db4o幾乎完全消除了當(dāng)你發(fā)布新版本時(shí)用來維護(hù)數(shù)據(jù)庫方面的費(fèi)用
db4o允許你用Java 或者M(jìn)icrosoft .NET語言開發(fā)的應(yīng)用程序部署在PDA、移動(dòng)電話、Windows桌面、Linux或Java服務(wù)器上,而且他們之間可以無縫的互相通信。
3.收集你的分布式數(shù)據(jù)db4o獨(dú)特的面向?qū)ο髲?fù)制功能很簡單地允許你在db4o數(shù)據(jù)庫之間,類似Oracle,SQL Server,MySQL這樣的關(guān)系型數(shù)據(jù)庫之間,和他們?nèi)我饨M合之間實(shí)現(xiàn)數(shù)據(jù)同步。通過使用流行的Hibernate對象-關(guān)系映射機(jī)制實(shí)現(xiàn)了對關(guān)系型數(shù)據(jù)庫的包裝。
dRS是100%的面向?qū)ο筌浖P汀U沁@樣,它對于采用快速開發(fā)軟件環(huán)境的敏捷式企業(yè)來說是種完美解決方案。因?yàn)閐RS設(shè)計(jì)用來嵌入您的應(yīng)用程序,它在您的程序代碼內(nèi)保留您所有的領(lǐng)域邏輯和商業(yè)過程,而不用分散存儲在企業(yè)服務(wù)器不同系統(tǒng)內(nèi)。因?yàn)槊總€(gè)獨(dú)立系統(tǒng)都需要額外的獨(dú)立開發(fā)工作。取而代之,dRS允許您專注于獨(dú)立的應(yīng)用程序開發(fā)和整合。dRS能夠減少開發(fā)時(shí)間和分布式功能的測試時(shí)間,讓你可以專注于你的商業(yè)邏輯。
dRS系統(tǒng)一個(gè)比較獨(dú)特的特點(diǎn)是解決應(yīng)用程序完整性沖突的功能。傳統(tǒng)的復(fù)制只關(guān)注數(shù)據(jù)庫的結(jié)構(gòu),這意味著復(fù)制處理的是行級別或列級別的改變。然后通常這種“行”和“列”的表達(dá)方式對大多數(shù)應(yīng)用程序沒有太多意義。同步真實(shí)的 “客戶”和“訂單”對象不是更好嗎?實(shí)際上如果使用dRS的話, 大多數(shù)情況下在兩個(gè)數(shù)據(jù)庫間解決一個(gè)單獨(dú)的沖突所需的代碼量幾乎可以忽略不計(jì):因?yàn)檫@就象寫一個(gè)If語句那樣簡單。
當(dāng)沖突出現(xiàn)時(shí),傳統(tǒng)的數(shù)據(jù)復(fù)制系統(tǒng)是向處理器發(fā)出一個(gè)沖突日志指令。處理器向數(shù)據(jù)庫添加標(biāo)識,應(yīng)用程序開發(fā)人員在處理他們之前不得不做定時(shí)性的檢查。而如果復(fù)制系統(tǒng)是與應(yīng)用程序整合在一起的,應(yīng)用程序就可以立即接收任何沖突的變化情況。沖突就可以立即被應(yīng)用程序或者用戶處理。
任何企業(yè)級開發(fā)成果中可維護(hù)性都是很關(guān)鍵的。當(dāng)開發(fā)人員聽到“復(fù)制”這個(gè)詞時(shí),他們中大部分都“敬而遠(yuǎn)之”。這是因?yàn)閷?shù)據(jù)格式的任何改變都需要與所涉及到的數(shù)據(jù)存儲同步,其中包括復(fù)制腳本,和所有應(yīng)用程序涉及到的可能使用的那部分?jǐn)?shù)據(jù)訪問代碼。使用db4o和dRS則意味著無論何時(shí)您的應(yīng)用程序的對象模型改變,您的應(yīng)用程序都可以無縫的更新到您的數(shù)據(jù)庫。
4. 結(jié)論對那些想要使用科技驅(qū)動(dòng)商業(yè)過程來與自己的競爭對手或者包含發(fā)展進(jìn)程中價(jià)值鏈占用的費(fèi)用相區(qū)分的企業(yè)來說, 移動(dòng)商務(wù)是必然的趨勢。
新的商業(yè)模型和過程需要正確的技術(shù)做支持。移動(dòng)化軟件不同于以服務(wù)器為中心的軟件-領(lǐng)先的以服務(wù)器為中心的數(shù)據(jù)庫(Oracle,IBM,Microsoft)在嵌入式數(shù)據(jù)庫領(lǐng)域卻是落后的,在市場占有率方面大概只占到2%-5%左右。
一批具有前瞻性思維的開發(fā)人員已經(jīng)嘗到了面向?qū)ο笥?jì)算在構(gòu)建更加分布式的移動(dòng)商業(yè)程序中的益處。他們把面向?qū)ο髱У搅藬?shù)據(jù)層來允許快速應(yīng)用開發(fā)(這帶來低成本和快速投入市場)并且增加更多靈活性,因此敏捷的商業(yè)過程正以一個(gè)前所未有的速度快速改變著商業(yè)環(huán)境。
db4o是僅有的、明確的、以客戶端為中心而設(shè)計(jì)的,Java和.NET環(huán)境可移動(dòng)持久化原生面向?qū)ο髷?shù)據(jù)庫。新發(fā)布的dRS通過提供一個(gè)開拓性的復(fù)制系統(tǒng)確立了領(lǐng)先位置,它允許應(yīng)用程序即使是把最復(fù)雜的對象結(jié)構(gòu)與遺留下來的關(guān)系型數(shù)據(jù)庫進(jìn)行同步也僅僅是一行代碼。
關(guān)于作者:Eric Falsken 是db4o在分布式醫(yī)療設(shè)備領(lǐng)域的長期用戶, 而且最近作為技術(shù)傳播者已經(jīng)加入到db4o的開發(fā)團(tuán)隊(duì)。
作為一個(gè)有經(jīng)驗(yàn)的企業(yè)應(yīng)用開發(fā)者和早期Microsoft .NET技術(shù)創(chuàng)始者(他并不太鐘情開放源代碼運(yùn)動(dòng)合作)他喜歡探索開發(fā)工具以使開發(fā)優(yōu)美的、有用的、可維護(hù)的軟件成為可能。
下載db4o:http://www.db4o.com/china?src=cn