當前位置:工程項目OA系統 > 泛普各地 > 吉林OA系統 > 長春OA系統 > 長春OA行業(yè)資訊
如何保證數據庫操作與文件系統操作的一致性
通常來講,支持事務的資源一般稱為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專家網論壇)
- 1服務器虛擬化是實現綠色IT重要途徑
- 2IT史上最偉大的十大存儲發(fā)明
- 3評估綠色數據中心有哪些量化指標
- 4提高服務器系統可管理性 滿足中小企業(yè)需求
- 5服務器虛擬化的綠色IT夢想
- 6預算緊縮下如何保障公司安全運營
- 7注意提防統一通信帶來的安全威脅
- 85大絕招護航服務器的虛擬化實施
- 9確保Windows操作系統穩(wěn)定的六個秘笈
- 10CTO解讀企業(yè)數據安全管理與防護
- 11安全問題應當慎用“拿來主義”
- 12虛擬機數量增加將加大系統安全風險
- 13如何更好管理一臺服務器上多個數據庫
- 14高效簡化數據中心網絡的五項措施
- 15重復數據刪除技術的安全性如何
- 16提高寫文件的性能的簡單方法
- 17談談數據丟失保護中的隱性成本控制
- 18分析:虛擬化技術給企業(yè)應用帶來的優(yōu)勢
- 19企業(yè)組網要把握好網絡最后一公里
- 20保證Web登錄安全的四種密碼管理工具
- 21如何高效管理企業(yè)的基礎應用服務?
- 22不要讓云計算成為皇帝的新衣
- 23開源與SOA醞釀技術機制與商業(yè)模式變革
- 24如何恰當評估和應對數據中心各種風險
- 25Web2.0時代企業(yè)怎樣制定互聯網戰(zhàn)略
- 26不可不知的路由交換的安全七宗罪
- 27數據中心 迎接巨變
- 28OA辦公軟件的應用范疇涉及到所有知識性員工
- 29應用技巧:創(chuàng)建你自己的系統存儲過程
- 30數據中心自動化是否預示自動化時代的來臨
成都公司:成都市成華區(qū)建設南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務大廈18樓