監(jiān)理公司管理系統 | 工程企業(yè)管理系統 | OA系統 | ERP系統 | 造價咨詢管理系統 | 工程設計管理系統 | 簽約案例 | 購買價格 | 在線試用 | 手機APP | 產品資料
X 關閉
長春OA行業(yè)資訊

當前位置:工程項目OA系統 > 泛普各地 > 吉林OA系統 > 長春OA系統 > 長春OA行業(yè)資訊

如何保證數據庫操作與文件系統操作的一致性

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件

通常來講,支持事務的資源一般稱為Resource Manager,如數據庫,完成了事物相關操作和數據恢復,我們使用JDBC來編寫數據庫訪問程序,并可以通國調用commit,rollback來提交或者回滾事務,也可以通過接口來設置隔離級別。如果需求是將數據存儲到數據中,那程序員是不需要擔心事務問題的。但如,如果數據非得存儲在文件系統中,或者聯合數據使用,那么,數據的一致和隔離如何保證呢?

用一個最常碰到的需求作為開始,用戶注冊后,數據保存在數據庫里,然后用戶上傳的個人肖像圖片保存到文件系統中(稍后會解釋為甚還要把數據存儲到文件系統里),顯然倆個操作都必須同時成功或者失敗,為了保證這一點,程序應該怎么寫呢?

如果不關注一致性,程序可能代碼如下:

public void register(User user,byte[] images) throws Exception{

UserDao dao = new UserDao();

dao,addUser(user);

FileSystem fs = FileSystemFactory.getFileSystem();

//保存圖片到指定路徑,有可能拋出異常

fs.saveFile(user.getImagePath(),images)

}

 

上述代碼的潛在問題就是如果文件系統存儲失敗,那么,數據就會不一致,頁面顯示用戶信息的時候,圖片確沒有找到。后果稍微嚴重的列子還有些,譬如上傳密鑰文件失敗但相關數據確已經存儲到數據庫。

如何解決這個問題呢?有倆種思路,一種我稱著“工程思路”,因為這是比我還老的一程序提出的辦法,他通常很實際。另外一個稱為"純技術思路",因為這是比他還老的一個更老的程序員提出的來辦法,而他很擅長技術語言框架,但不太擅長實施工程。

所謂工程思路,其實就是對操作紀錄日志,然后有后臺系統監(jiān)控錯誤并提供管理模塊供事后糾正這些錯誤,這就是所謂的“沖正”,比如上面一個例子,可以寫成下面的代碼

public void register(User user,byte[] images) throws Exception{

Logger log = LoggerFactrory,getLogger();

log.addTaskDescription("insert user "+user).addTaskDescription("save file"+user.getImagePath())

UserDao dao = new UserDao();

dao,addUser(user);

log.taskStatus("inser user is completed");

FileSystem fs = FileSystemFactory.getFileSystem();

//保存圖片到指定路徑,有可能拋出異常

fs.saveFile(user.getImagePath(),images)

log.taskStatus("save file is completed");

}

 

Logger將日志保存到數據庫中,這樣管理人員可以查看這些日志從而知道存在哪些不一致的地方。

還有一種就是純技術思路,既提供類似數據庫這樣的ResourceManager,支持文件系統操作的事務和隔離,并且,能加入到分布式事務中,從而能保證跟數據庫操作的一致性。如下面接口(可以想象類似JBDC的Connection)

Public interface FileSystemConnection{

public void addFile(String path,byte[] bs);

public void removeFile(String path);

public byte[] getFileContent(String path);

public String[] listFile(String root);

public void commit();

public void rollback();

}

 

實現方式我想類似于數據庫的實現方式,但又要與數據庫有所不同,這是因為之所以用文件系統存文件而不是數據庫是因為

1:速度更好。數據庫要轉化為自己特定格式存,當然慢些

2:有些應用只能讀取文件系統,而不能跟數據庫打交道,如圖片純在文件系統里,然后配置apache可以直接讀取這些圖片

3:由于很可能外部系統也要操作文件,所以文件系統ResourceManager必須考慮到這個情況。(IT專家網論壇)

發(fā)布:2007-04-21 14:07    編輯:泛普軟件 · xiaona    [打印此頁]    [關閉]
相關文章:
長春OA系統
聯系方式

成都公司:成都市成華區(qū)建設南路160號1層9號

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓

咨詢:400-8352-114

加微信,免費獲取試用系統

QQ在線咨詢

泛普長春OA行業(yè)資訊其他應用

長春OA軟件 長春OA新聞動態(tài) 長春OA信息化 長春OA快博 長春OA行業(yè)資訊 長春軟件開發(fā)公司 長春門禁系統 長春物業(yè)管理軟件 長春倉庫管理軟件 長春餐飲管理軟件 長春網站建設公司