[发明专利]对象存储方法和系统有效
申请号: | 201010504185.1 | 申请日: | 2010-09-30 |
公开(公告)号: | CN101963944A | 公开(公告)日: | 2011-02-02 |
发明(设计)人: | 王昊沙 | 申请(专利权)人: | 用友软件股份有限公司 |
主分类号: | G06F12/08 | 分类号: | G06F12/08;G06F17/30 |
代理公司: | 北京友联知识产权代理事务所(普通合伙) 11343 | 代理人: | 尚志峰;汪海屏 |
地址: | 100094 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 对象 存储 方法 系统 | ||
技术领域
本发明涉及数据存储技术,尤其涉及对象存储方法和系统。
背景技术
在面向对象的编程(OOP)领域中,经常需要将内存中的对象(Object)持久化到磁盘中进行存储,这个过程一般分为两个部分:首先将内存中的对象进行编码,也就是将内存中的数据编码为字节流,这个过程一般被称为序列化,然后将序列化后得出的字节流持久化存储到磁盘的文件中。反之,从磁盘上的文件中读取字节流,然后将字节流转化为内存中的对象的过程一般被称为反序列化。
在不同的程序语言平台上,如目前主流的JAVA和DotNet平台,都有关于序列化和反序列化方法的实现,它们都通过提供一个标准接口,将用户的对象进行序列化和反序列化,这其中最重要的过程是将内存中的对象转化为字节流的过程及其反转换过程,以上两个平台提供的标准接口在转换字节流的过程中,会将对象的类型信息(Class Type),对象的成员的数据类型(Data Type),对象的数据(Data)以及其他一些控制信息写入到字节流中,这其中除了数据本身以外,其他的信息都是为了在反序列化过程中重新在内存中构造对象(我们可以将这些信息称为元数据),然后再将数据赋值到对象,从而完成整个反序列化过程。
上述这种方法在持久化一些大型对象,如数十KB大小的对象时,会带来一些额外的空间开销:我们知道,在内存中对象的大小,如果是使用C语言,可以用sizeof()求得,具体的计算方式为从第一个成员所占的字节数一直累加到最后一个成员(根据平台或编译设置的不同还会有大小不一样的对齐字节),实际上并不包含任何类型信息,这样求出的大小就大概等于字节流中对象的数据的大小,假设该对象的成员比较多,特别是还有成员引用其他对象的情况,那么序列化后对应的非数据信息,也就是元数据也会很多,某些情况下,该部分甚至超过了对象数据的本身。另外,我们再来看一种情况,如果我们需要连续的更新一个大对象,并且还要存储该对象上一次的状态(历史数据),换句话说我们更新n次,就会存储n个字节流,每个字节流的大小都会有差不多的大小,但实际上每次更新对象只是改变了很少的几个成员。如果应用场景对存储空间有比较严格的要求,那么在上述的两种情况下,字节流将会占用很大的磁盘存储空间。
因此,需要一种对象存储方式,来解决大对象占用很大存储空间的问题,将大对象持久化,节省时间和存储成本。
发明内容
鉴于以上,本发明的技术方案所要解决的技术问题在于,提供一种对象存储方法和系统,来解决大对象占用很大存储空间的问题,将大对象持久化,节省时间和存储成本。
本发明提供了一种对象存储方法,包括:步骤102,对对象的多个实例进行序列化处理,获得每个实例的字节流;步骤104,将所述多个实例中的第一个实例的字节流依次与其他实例的字节流进行比较,获得多个差异流;步骤106,将所述第一个实例的字节流和所述多个差异流进行存储,以用于表示所述对象的多个实例。通过该技术方案,将大对象处理为一个字节流和多个体积更小的差异流,就可以减少大对象的存储空间。
在上述技术方案中,优选地,包括:步骤101,预置字节流格式;在所述步骤102中,根据所述字节流格式,对所述对象的多个实例进行序列化处理,获得每个实例的字节流。
在上述技术方案中,优选地,在所述步骤101中,还预置对象表和字符串表,其中,所述对象表中记录每个对象的对象代码,所述字符串表用于对每个对象的实例的字符串成员进行哈希处理以得到索引值;在所述步骤102中,对所述每个实例进行序列化处理时,对于所述每个实例中的值类型成员,将所述值类型成员的值写入到所述每个实例的字节流中,对于所述每个实例中的引用类型成员,在所述对象表中存在所述引用类型成员的引用对象的对象代码,将所述引用对象的对象代码写入所述每个实例的字节流,在所述对象表中不存在所述引用对象的信息时,将所述引用对象写入到所述每个实例的字节流中,并在所述对象表生成所述引用对象的代码,对于所述每个实例中的字符串类型成员,根据所述字符串表对所述字符串成员进行哈希处理,在所述字符串表不存在该成员时,将得到的所述字符串成员的哈希索引值及字符串成员写入所述每个实例的字节流中,反之则只在字节流中写入哈希索引值。通过该技术方案,可以将大对象按照预先设置的字节流格式对每一部分作相应的处理,得到所需的字节流,避免了重复记录。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于用友软件股份有限公司,未经用友软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010504185.1/2.html,转载请声明来源钻瓜专利网。