探讨:关于中小量数据的备份,再此提供一种解决方案

sotom 2010-11-04 10:04:30
再此提供一种备份还原,方式,谨拿出来和大家探讨,寻求更好解决办法



需求:某人事管理系统,需要定期对某一个员工的联系人资料-->联系人资料(跨必须热播资料表)及联系人对应的电话(人员电话表),进行备份操作。

难点:1.由于用户较多,且每个用户的联系人资料大多在1000人左右,而且可能会备份多次,将会造成大量的冗余数据。
2.正常情况下所有用户的联系人在数在100万左右,电话则大约200万,如果直接进行备份的话,数据异常庞大,恢复操作
将异常缓慢,且~管理不方便。
3.存在联系人-》联系人电话的 1对多 对应关系。

解决方案:1.采用xml方式表示 人员-》电话一对多对应关系
2.将所有需要备份的数据转换为xml (采用XStream转换,之前项目一直使用,技术比较成熟)
3.将转换后的xml进行压缩 (采用jdk uitl工具包中GZIPOutputStream 压缩)
4.将压缩后的数据存储为CLOB格式(Oracle 11g数据库)

实施: 由于是现实中正在开发的项目,所以只提供部分修改后的代码,但也足够大家摸索使用了,请大家理解,再此主要提供该问题的思路,技术不是难点。
1.xStream 采用Anotation注解方式转换xml
 @XStreamAlias("TEMPCLASS")
public class TEMPCLASS //类名的注解方式
@XStreamAlias("T_TEST_PROPERTY")
private String T_TEST_PROPERTY;//普通属性注解方式
@XStreamImplicit(itemFieldName = "tellist")
private List<tel> tellist;//1对多部分注解方式
//电话部分的同普通属性注解方式


2.压缩率问题:800+个联系人,转换为xml后,字符数为93万+,压缩后为9.1万左右,压缩率10倍+

//部分代码
GZIPOutputStream gzip = new GZIPOutputStream(xxxxx);
gzip.write(str.getBytes("UTF-8"));

3.存储方式,CLOB类型在存储时和普通String Number 类型,不同,具体可Google.
...全文
139 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sotom 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bao110908 的回复:]
JSON 的数据量比 XML 更小,而且层次结构并不比 XML 差
[/Quote]

下次版本升级的时候考虑JSON,试试。
sotom 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bao110908 的回复:]
JSON 的数据量比 XML 更小,而且层次结构并不比 XML 差
[/Quote]

嗯~ 这个我们倒是没有想到,不过我们使用的XML使用了压缩,效率在11倍左右,效果还可以。
  • 打赏
  • 举报
回复
JSON 的数据量比 XML 更小,而且层次结构并不比 XML 差
sotom 2010-11-04
  • 打赏
  • 举报
回复
咳、、、 看来还是应该发在javaEye的。。
xinlan1022 2010-11-04
  • 打赏
  • 举报
回复
学习。。。
sotom 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jxsryecheng 的回复:]

不知道你用的是什么数据库?

如果是DB2的话那还是在数据库进行备份和复原为好!
[/Quote]
说了的,数据库为Oracle 11g , 且,这个备份的还原点 是由用户何时做了批量操作触发的,非全表动作。
十橙心橙意 2010-11-04
  • 打赏
  • 举报
回复
不知道你用的是什么数据库?

如果是DB2的话那还是在数据库进行备份和复原为好!
sotom 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kokobox 的回复:]

为什么要转到应用层去做备份?

我觉得应该在数据库层定时做备份就好了。 直接保存为数据库文件,这样无论恢复还是备份都简单。
[/Quote]

这个备份操作时用户触发的,例如用户做了批量的操作。
kokobox 2010-11-04
  • 打赏
  • 举报
回复
为什么要转到应用层去做备份?

我觉得应该在数据库层定时做备份就好了。 直接保存为数据库文件,这样无论恢复还是备份都简单。
yclovecs 2010-11-04
  • 打赏
  • 举报
回复
.........................
sotom 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liwutao 的回复:]

这个备份的xml文件是什么结构?一个人对应一个xml,还是一个人对应一个节点呀?
[/Quote]

所有数据对应一个xml,因为xml的树形结构可以很好的展示层级(人员和电话的层级)
liwutao 2010-11-04
  • 打赏
  • 举报
回复
这个备份的xml文件是什么结构?一个人对应一个xml,还是一个人对应一个节点呀?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧