监理公司管理系统 | 工程企业管理系统 | OA系统 | ERP系统 | 造价咨询管理系统 | 工程设计管理系统 | 签约案例 | 购买价格 | 在线试用 | 手机APP | 产品资料
X 关闭
长春OA行业资讯

当前位置:工程项目OA系统 > 泛普各地 > 吉林OA系统 > 长春OA系统 > 长春OA行业资讯

如何保证数据库操作与文件系统操作的一致性

申请免费试用、咨询电话: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)

}

 

上述代码的潜在问题就是如果文件系统存储失败,那么,数据就会不一致,页面显示用户信息的时候,图片确没有找到。后果稍微严重的列子还有些,譬如上传密钥文件失败但相关数据确已经存储到数据库。

如何解决这个问题呢?有俩种思路,一种我称着“工程思路”,因为这是比我还老的一程序提出的办法,他通常很实际。另外一个称为"纯技术思路",因为这是比他还老的一个更老的程序员提出的来办法,而他很擅长技术语言框架,但不太擅长实施工程。

所谓工程思路,其实就是对操作纪录日志,然后有后台系统监控错误并提供管理模块供事后纠正这些错误,这就是所谓的“冲正”,比如上面一个例子,可以写成下面的代码

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专家网论坛)

发布:2007-04-21 14:07    编辑:泛普软件 · xiaona    [打印此页]    [关闭]
长春OA系统
联系方式

成都公司:成都市成华区建设南路160号1层9号

重庆公司:重庆市江北区红旗河沟华创商务大厦18楼

咨询:400-8352-114

加微信,免费获取试用系统

QQ在线咨询

泛普长春OA行业资讯其他应用

长春OA软件 长春OA新闻动态 长春OA信息化 长春OA快博 长春OA行业资讯 长春软件开发公司 长春门禁系统 长春物业管理软件 长春仓库管理软件 长春餐饮管理软件 长春网站建设公司