发明内容
本发明提供一种数据管理方法及数据存储系统,解决了用户需要自行根据数据类型调用多种API接口,而且用户一般要学习如何使用数据库,无法使用统一的API达到对不同数据类型的统一管理的难题。
本发明一种数据管理方法,包括:
S10数据存入方法;包括步骤:
S110通过统一接口获取所述数据的存储指令,解析所述存储指令,获取所述存储指令中的容器的名称及对象的名称;
S120将所述数据进行序列化操作,变换成可存储的状态;
S130根据所述容器的名称,查找所述容器是否已存在;
S140当所述容器已存在时,根据所述存储指令中的对象的名称,在所述容器中查找是否存在所述存储指令中的对象;
S145当所述容器中不存在所述存储指令中的对象时,根据所述存储指令中的对象的名称,在所述容器中建立一个对象,所述对象包括元数据部分和数据部分,随后进入步骤S160;
S150当所述容器不存在时,根据所述存储指令中的容器的名称,建立一个新容器;
S155根据所述存储指令中的对象的名称,在所述新容器中建立一个对象,所述对象包括元数据部分和数据部分;
S160将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分;
S170存储成功后,返回所述数据存储的数据块编号,并存储于相应的对象的元数据部分。
目前行业的方案是针对不同的数据类型,分别提供不同的存储数据模型,从而进行分类型的存储。用户需要自行根据数据类型调用多种API接口,而且用户一般要学习如何使用数据库,无法使用统一的API达到对不同数据类型的统一存储。而本方案不区分数据文件的类型,通过同一接口统一存储,最大程度简化用户设计数据存储模型和熟悉并学习操作数据库的过程,而且达到使其他不同的语言都可以调用的目的。本方案中的数据管理均使用同一个接口,即统一的接口来获取管理指令,进行后续的管理。
进一步的,所述步骤S160包括步骤:
S161判断所述数据的大小是否大于预设的数据块大小,若是,则进入步骤S162;否则进入步骤S163;
S162将所述数据分割成若干数据块,并依次对所述数据块进行编号,将所述带编号的数据块存储于所述对象的数据部分;将所述数据的描述信息存储于所述对象的元数据部分;
S163将所述数据存入一个数据块,所述数据块编号后存储于对象的数据部分;将所述数据的描述信息存储于对象的元数据部分。
进一步的,包括方法S20数据删除方法,包括步骤:
S210通过统一接口获取所述数据的删除指令,解析所述删除指令,获取所述删除指令中的容器的名称及对象的名称;
S220根据所述删除指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S230查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;
S240根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
同样的,通过统一接口统一删除数据,由于容器和对象的名称唯一性,查找简单,删除操作易简单可行。保留空位可尽可能的不影响同一容器中其他对象的数据块编号。
进一步的,所述S20还包括步骤:
S250判断所述容器中存在的空位是否超过预设的数值,若是,则去除所有空位,并将所有剩余的数据部分的数据块重新编号;
S260同步更改所述容器中所述对象的元数据部分存储的所述对象的编号信息。
对于容器中空位过多时,为增强容器的利用率,可适时统一进行调整,去除空位,重新编号。
进一步的,包括S30数据更新方法,包括步骤:
S310通过统一接口获取所述数据的更新指令;解析所述更新指令,获取所述更新指令中的容器的名称及对象的名称;
S320将所述数据进行序列化操作,变换成可存储的状态;
S330根据所述更新指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S340执行步骤S230、S240,判断所述数据所需的数据块数量是否比查找到的对象对应的数据块数量多,若是,则进入步骤S350,否则,进入步骤S360;
S350重新建立一个新对象,将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分;
S360将所述数据存储在所述保留的空位上。
同样的,通过统一接口更新数据,方便管理。
进一步的,包括步骤:
S142当所述容器中存在所述存储指令中的对象时,推送是否继续存储的确认界面,所述确认界面包含查找到的已存储的所述对象、及待存储的数据的对比信息;
S143当用户确认继续存储所述数据且保留原对象时,在同一容器中创建新对象;
S144当用户确认继续存储且删除原对象时,进入步骤S340;
S145当用户确认取消存储所述数据时,结束操作。
若存储过程中,发现已存在同样的数据,则需与用户确认后续的操作,避免用户的误操作或者重复存储。
进一步的,包括:
S40数据读取方法,包括步骤:
S410通过统一接口获取所述数据的读取指令,解析所述读取指令,获取所述读取指令中的容器的名称及对象的名称;
S420根据所述读取指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S430查看所述对象的元数据部分,获取所述数据部分的数据块编号,进而找到对应的数据部分;
S440根据所述数据块编号,将所述查询到的对应的数据部分进行排序,依次读取所述数据部分存储的对象内容。
通过统一接口读取数据,根据容器名和对象名,查找到对象,再根据存储的数据块编号排序读取。
进一步的,还包括S00权限管理方法,包括步骤:
S010设置所述容器的读写权限;
S020当执行所述数据存储方法或所述数据读取方法时,判断用户是否具备对待存储或读取的容器的读写权限;
S030根据所述权限执行或驳回所述用户的请求。
设置权限,保护用户数据的隐私性及数据的安全性。
进一步的,所述对象的名称是根据指用户指定的名称或系统生成的所述对象的名称,所述对象的名称在所在的容器中唯一存在;
所述容器的名称是根据用户指定的名称或系统生成的所述容器的名称,所述容器的名称在所在的存储系统中唯一存在;
所述数据的描述信息包括:对象的名称、创建时间、大小、文件类型、及所述对象的数据部分对应的数据块编号。
容器名和对象名的唯一性,相当于一个数据的身份标识,用户可通过这个身份标识,方便快捷的查找到对应的数据。另外,由于存储数据繁多,而对象的元数据部分,就相当于目录大纲,在该大纲中查找,能迅速查找到对应的数据块存储的数据内容。
进一步的,所述统一接口为rest接口。Rest接口是一种基于HTTP协议的软件架构接口,其全称是Representational State Transfer,即表象状态转移接口。基于rest接口的设计,具有高度的可扩展性,且支持多种程序语言的客户端。
本发明还提供了一种数据存储系统,包括接口模块、与所述接口模块相连的服务管理模块、及与所述服务管理装置相连的存储模块,所述服务管理模块包括解析单元、及与所述解析单元分别相连的序列化单元、查找单元、创建单元,所述创建单元还与所述查找单元相连;所述存储模块中含有容器,用于存储对象,其中:
所述数据存储系统将数据存入包括:
通过所述接口模块获取所述数据的存储指令后,所述服务管理模块的解析单元解析所述存储指令,获取所述存储指令中的容器名称及对象的名称;
所述序列化单元将所述数据进行序列化操作,变换成可存储的状态;
所述查找单元根据所述解析单元解析获取的所述容器的名称,在所述存储模块的中查找所述容器是否已存在;
当所述查找单元查找到所述容器时,所述查找单元进一步在所述容器中查找是否存在所述解析单元解析所述存储指令获取的对象;当所述查找单元在所述容器中查找不到所述解析单元解析所述存储指令获取的对象时,所述创建单元根据所述解析单元解析获取的对象的名称,在所述容器中建立一个对象,所述对象包括元数据部分和数据部分;
当所述查找单元查找不到所述容器时,所述创建单元根据所述解析单元解析所述存储指令获取的容器的名称,在所述存储模块中建立一个新容器;所述创建单元根据所述解析单元解析所述存储指令中获取的对象的名称,在所述新容器中建立一个对象,所述对象包括元数据部分和数据部分;
所述存储模块将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分;
所述存储模块存储成功后,返回所述数据存储的数据块编号,并存储于相应的对象的元数据部分。
本方案的存储系统,不区分数据文件的类型,通过同一接口统一存储,最大程度简化用户设计数据存储模型和熟悉并学习操作数据库的过程,而且达到使其他不同的语言都可以调用的目的。本方案中的数据存储系统使用同一个接口,即统一的接口来获取管理指令,进行后续的管理。
进一步的,所述存储模块包括判断单元、及与所述判断单元相连的操作单元,其中:
所述存储模块将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分包括:
所述存储模块的判断单元判断所述数据的大小是否大于预设的数据块大小,若是,则通过所述操作单元将所述数据分割成若干数据块,且所述操作单元依次对所述数据块进行编号,将所述带编号的数据块存储于所述对象的数据部分;将所述数据的描述信息存储于所述对象的元数据部分;否则所述操作单元将所述数据存入一个数据块,将所述数据块编号后存储于对象的数据部分;将所述数据的描述信息存储于对象的元数据部分。
进一步的,所述服务管理模块还包括与所述查找单元相连的删除单元,其中:
所述数据存储系统将数据删除包括:
通过所述接口模块获取所述数据的删除指令后,所述服务管理模块的解析单元解析所述删除指令,获取所述删除指令中的容器的名称及对象的名称;
所述查找单元根据所述解析单元解析所述删除指令获取的所述容器的名称和对象的名称,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述查找单元查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;
所述删除单元根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
进一步的,所述存储模块的判断单元判断所述容器中存在的空位是否超过预设的数值,若是,则通过所述操作单元去除所有空位,且所述操作单元将所有剩余的数据部分的数据块重新编号;
所述操作单元同步更改所述容器中所述对象的元数据部分存储的所述对象的编号信息。
进一步的,所述存储系统将数据进行更新包括:
通过所述接口模块获取所述数据的更新指令;所述服务管理模块的解析单元解析所述更新指令,获取所述更新指令中的容器的名称及对象的名称;
所述序列化单元将所述数据进行序列化操作,变换成可存储的状态;
所述查找单元根据所述解析单元解析所述更新指令获取的所述容器的名称和对象的名称,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述查找单元查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;所述删除单元根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
所述存储模块的判断单元判断所述数据所需的数据块数量是否比查找到的对象对应的数据块数量多,若是,则所述服务管理模块的创建单元重新建立一个新对象,所述存储模块的操作单元将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分,否则,所述存储模块的操作单元将所述数据存储在所述保留的空位上。
进一步的,所述服务管理模块还包括与所述查找单元相连的推送反馈单元,所述推送反馈单元还与所述删除单元、创建单元相连,其中:
当所述查找单元根据所述解析单元解析获取的容器名称和对象名称,在所述存储模块中查找到相应的容器及对象时,所述推送反馈单元推送是否继续存储的确认界面,所述确认界面包含查找到的已存储的所述对象、及待存储的数据的对比信息;
当所述推送反馈单元接收到用户确认继续存储所述数据且保留原对象时,所述创建单元在同一容器中创建新对象;
当所述推送反馈单元接收到用户确认继续存储且删除原对象时,则所述删除单元删除所述查找单元查找到的对象,所述存储模块的判断单元判断所述数据所需的数据块数量是否比所述服务管理模块的查找单元查找到的对象对应的数据块数量多,若是,则所述服务管理模块的创建单元重新建立一个新对象,所述存储模块的操作单元将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分,否则,所述存储模块的操作单元将所述数据存储在所述保留的空位上;
当所述推送反馈单元接收到用户确认取消存储所述数据时,结束操作。
当存储的数据在存储系统中已存在相同的名称时,这时,需用户确认后续如何操作,如果是用户已存储过了只是已忘记,则此时则可结束操作,取消存储。如果是有存储过相同名称,比如数据更新,则可根据用户确认信息去覆盖原数据、或者保留原数据重命名存储新数据。
进一步的,还包括与所述查找单元相连的读取单元,其中:
所述数据存储系统读取数据包括:
通过所述接口模块获取所述数据的读取指令,所述服务管理模块的解析单元解析所述读取指令,获取所述读取指令中的容器的名称及对象的名称;
所述查找单元根据所述解析单元解析所述读取指令获得的容器名称及对象的名称,在所述存储模块中查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述读取单元查看所述对象的元数据部分,获取所述数据部分的数据块编号,进而找到对应的数据部分;
所述读取单元根据所述数据块编号,将所述查询到的对应的数据部分进行排序,依次读取所述数据部分存储的对象内容。
进一步的,还包括权限管理模块,所述权限管理模块分别与所述服务管理模块和存储模块相连;其中:
所述存储系统进行权限管理包括:
所述权限管理模块设置所述容器的读写权限;
当执行所述数据存储方法或所述数据读取方法时,所述权限管理模块判断用户是否具备对待存储或读取的容器的读写权限;
所述权限管理模块根据所述权限执行或驳回所述用户的请求。
设定权限管理,只有有读写权限的用户方可进行相应的读写操作,保护了用户的隐私,也从另一个方面,保护了数据的安全性,避免了其它用户的随意或无意对数据的改动。
进一步的,所述对象的名称是根据指用户指定的名称或系统生成的所述对象的名称,所述对象的名称在所在的容器中唯一存在;
所述容器的名称是根据用户指定的名称或系统生成的所述容器的名称,所述容器的名称在所在的存储系统中唯一存在;
所述数据的描述信息包括:对象的名称、创建时间、大小、文件类型、及所述对象的数据部分对应的数据块编号。
容器名称的唯一性及在同一个容器下的对象的唯一性存在,使得每一个对象都有了标识符,对于后续的查找即为便利。
进一步的,所述接口模块可为rest接口。将不同的数据类型通过统一的接口,提供高度的可扩展性,在无需修改现有系统的情况下,添加对新的数据类型的支持。而且,基于rest接口的设计,支持多种程序语言的客户端。
本发明的有益效果如下:
本发明提供一种基于统一接口的对象存储设计方案,该方法/系统使用面向对象的思想,将不同的数据类型抽象成一个对象,而向用户提供统一接口进行存储、删除、更新、读取等,最大程度简化用户设计数据存储模型和熟悉并学习操作数据库的过程,而且达到使其他不同的语言都可以调用的目的。另外,该系统具有优良的可扩展性,在无需修改现有系统的情况下,添加对新的数据类型的支持,最大程度上满足用户在数据管理方面的需求。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明一种数据管理方法的实施例一,如图1所示,包括:
S10数据存入方法;包括步骤:
S110通过统一接口获取所述数据的存储指令,解析所述存储指令,获取所述存储指令中的容器的名称及对象的名称;
S120将所述数据进行序列化操作,变换成可存储的状态;
S130根据所述容器的名称,查找所述容器是否已存在;
S140当所述容器已存在时,根据所述存储指令中的对象的名称,在所述容器中查找是否存在所述存储指令中的对象;
S145当所述容器中不存在所述存储指令中的对象时,根据所述存储指令中的对象的名称,在所述容器中建立一个对象,所述对象包括元数据部分和数据部分,随后进入步骤S160;
S150当所述容器不存在时,根据所述存储指令中的容器的名称,建立一个新容器;
S155根据所述存储指令中的对象的名称,在所述新容器中建立一个对象,所述对象包括元数据部分和数据部分;
S160将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分;
S170存储成功后,返回所述数据存储的数据块编号,并存储于相应的对象的元数据部分。
本实施例介绍了数据的存入方法,用户存储数据,只需要通过统一的接口来存储,通过这个接口获取到存储指令后,会先对这个存储指令进行解析,获得存储的位置,即指令中想要存储的容器和对象名称;待存储的数据也会先进行一个序列化操作,将该数据转换成可存储的状态。在获取到容器名和指令名后,先要在这个存储系统中查询这个容器是否已存在,如果存在的话就进一步查看该容器中是否存在解析出的对象,如果不存在的话,则就需要创建一个对象,将待存储的数据作为一个对象,存储在该容器中,且该对象的名称即为解析出的对象名称。该对象包括两部分,一部分是元数据部分,用来存储数据的描述信息,另一部分是数据部分,用来存储自身数据,即数据内容。数据部分存储的数据内容,是以数据块的形式存储的,且每一个数据块均有相应的编号,存储完成后,会将数据块的编号返回,存储在相应的元数据部分。数据编号的返回和存储,可以只返回该对象的数据部分存储的首个数据块的编号、或者末尾数据块的编号、或者首尾数据块编号、或者该对象所有的数据块编号。每一个对象的数据块是连续的,且该对象的元数据部分也存储了数据的描述信息,包括数据大小、创建时间等等,因此,即使只返回存储了该对象的首个数据块编号或者末尾数据块编号,也可以根据该对象的数据大小,推算出该对象所包含的所有数据块及其编号。
如果在数据存储系统中查找不到存储指令中解析出来的容器名称,那么也就是说该存储系统中暂时不存在该容器,那么我们就需要新创建一个容器,用来存储待存储的数据对象。该容器的命名即根据解析出来的存储指令中的容器名称,创建好容器后再在该容器中新增对象,待存储的数据作为一个对象存储在该容器中。
一个数据存储系统,可以有多个容器,容器中也可以存储多个对象。本实施例在数据存储过程中,不区分数据的类型,使用面向对象的思想,将不同的数据类型抽象成一个对象,而向用户提供统一接口进行存储,最大程度简化用户设计数据存储模型和熟悉并学习操作数据库的过程,而且达到使其他不同的语言都可以调用的目的。
本发明的一种数据管理方法另一实施例,如图2所示,包括步骤:
S10数据存入方法;包括步骤:
S110通过统一接口获取所述数据的存储指令,解析所述存储指令,获取所述存储指令中的容器的名称及对象的名称;
S120将所述数据进行序列化操作,变换成可存储的状态;
S130根据所述容器的名称,查找所述容器是否已存在;
S140当所述容器已存在时,根据所述存储指令中的对象的名称,在所述容器中查找是否存在所述存储指令中的对象;
S145当所述容器中不存在所述存储指令中的对象时,根据所述存储指令中的对象的名称,在所述容器中建立一个对象,所述对象包括元数据部分和数据部分,随后进入步骤S160;
S150当所述容器不存在时,根据所述存储指令中的容器的名称,建立一个新容器;
S155根据所述存储指令中的对象的名称,在所述新容器中建立一个对象,所述对象包括元数据部分和数据部分;
S161判断所述数据的大小是否大于预设的数据块大小,若是,则进入步骤S162;否则进入步骤S163;
S162将所述数据分割成若干数据块,并依次对所述数据块进行编号,将所述带编号的数据块存储于所述对象的数据部分;将所述数据的描述信息存储于所述对象的元数据部分;
S163将所述数据存入一个数据块,所述数据块编号后存储于对象的数据部分;将所述数据的描述信息存储于对象的元数据部分。
S170存储成功后,返回所述数据存储的数据块编号,并存储于相应的对象的元数据部分。
本实施例在上述实施例的基础上,细叙了对象的数据部分存储过程。如果一个文件大小比预设的数据块要大,那么就需要把这个文件分割成多个数据块存储,在这个容器中,每个数据块系统都会分配编号,存储成功后,编号会返回到相应的对象的元数据部分存储。
本发明的一种数据管理方法另一实施例,在实施例1的基础上,还增加了数据删除方法,如图3所示,S20数据删除方法,包括步骤:
S210通过统一接口获取所述数据的删除指令,解析所述删除指令,获取所述删除指令中的容器的名称及对象的名称;
S220根据所述删除指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S230查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;
S240根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
当获取到删除指令后,同样的,解析该删除指令,获取指令中需要删除的数据所处的位置,即需要删除的数据是哪个容器中的哪个存储对象。解析完后即开始查找,先根据容器名称找到那个容器,然后再这个容器中查找到目标对象。在查找对象时,由于数据的描述信息存储在对象的元数据部分,所以,先在元数据部分查找查找到合适的记录,获取到目标对象对象的数据部分的数据块编号,然后执行删除指令,将目标对象的元数据部分及对应的数据块均删除掉,删除后,为了不影响其它对象,保留这个对象的元数据和数据块占用的空位。本实施例,同样的,通过统一的接口来管理数据,执行删除操作。
较佳的,所述S20还包括步骤:
S250判断所述容器中存在的空位是否超过预设的数值,若是,则去除所有空位,并将所有剩余的数据部分的数据块重新编号;
S260同步更改所述容器中所述对象的元数据部分存储的所述对象的编号信息。
如果容器中删除的对象较多时,那么空位也会越来越多,因此,当空位的数量达到了预设的值的时候,会采取统一调整的方法,将所有的空位挤掉,数据块的编号也会发生调整,数据块重新编号后,当然该对应的元数据部分也需要更改数据块的编号。当然,较好的,这里的空位指数据块的空位。
本发明方法的另一实施例,在上述实施例的基础上,增加了数据更新方法,如图4所示,S30数据更新方法,包括步骤:
S310通过统一接口获取所述数据的更新指令;解析所述更新指令,获取所述更新指令中的容器的名称及对象的名称;
S320将所述数据进行序列化操作,变换成可存储的状态;
S330根据所述更新指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S340执行步骤S230、S240,判断所述数据所需的数据块数量是否比查找到的对象对应的数据块数量多,若是,则进入步骤S350,否则,进入步骤S360;
S350重新建立一个新对象,将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分;
S360将所述数据存储在所述保留的空位上。
本实施例中的数据更新,相当于把原数据删除,新数据存储的一个过程,因此在通过统一接口获取到更新指令后,同样先解析指令获取需要更新的对象名,及该对象所处在哪个容器。然后根据解析出的容器名查找到相应的容器,再在该容器中查找到相应的需要更新的对象。删除该对象的元数据部分和数据部分,该对象删除后,保留删除后的空位,主要指该对象的数据部分的数据块内存储数据内容删除后,保留空的数据块。然后看新数据的大小,需要存几个数据块,如果需要的数据块数量小于或等于已删除对象的数据块数量,那么就可以将这个新数据存储在已删除对象的空位上,如果需要的数据块数量比原来的已删除对象要多的话,那么就在该容器重新创建一个对象,用来存储新数据。
同样的,在本发明方法删除数据的实施例的基础上,还包括步骤:
S142当所述容器中存在所述存储指令中的对象时,推送是否继续存储的确认界面,所述确认界面包含查找到的已存储的所述对象、及待存储的数据的对比信息;
S143当用户确认继续存储所述数据且保留原对象时,在同一容器中创建新对象;
S144当用户确认继续存储且删除原对象时,进入步骤S340;
S145当用户确认取消存储所述数据时,结束操作。
实施例一种讲到根据解析出的存储指令查找容器和对象,当我们未查找到指令中的容器或对象时,后面进行的则是一个数据的存储过程,而如果我们找到了指令中的容器和对象,那么则有可能是需要数据更新,或者只是一个误操作等,这时候,则需要给用户对比信息,由用户来选择后续如何做,再根据用户的选择执行相应的操作。步骤S143中,创建了新对象,新对象的名称可以是系统根据原对象的名称来生成,比如在原对象名称上增加序号或版本号,或者在原对象名称上增加副本X等;当然也可以由用户再另行命名。
本发明方法的另一个实施例,在上述任一实施例的基础上,增加数据的读取方法,如图5所示,包括:
S40数据读取方法,包括步骤:
S410通过统一接口获取所述数据的读取指令,解析所述读取指令,获取所述读取指令中的容器的名称及对象的名称;
S420根据所述读取指令,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
S430查看所述对象的元数据部分,获取所述数据部分的数据块编号,进而找到对应的数据部分;
S440根据所述数据块编号,将所述查询到的对应的数据部分进行排序,依次读取所述数据部分存储的对象内容。
本实施例通过统一接口获取读取指令后,解析该指令,获取需要读取的对象名称,及该对象所处的容器名称。然后在存储系统中查询到该容器,进而在容器中查询到对象。我们在对象的元数据部分查找到该对象对应的数据部分的数据块编号,然后找到相应的数据块,将数据块按编号次序读取数据块上存储的内容。当然如果查询条件没有给出对象的名称,而给出了对象的数据部分的数据块的编号,也同样可以查找到该对象,读取该对象的内容。
本发明方法的另一个实施例,在上述任一实施例的基础上,增加了权限管理方法,如图6所示,S00权限管理方法,包括步骤:
S010设置所述容器的读写权限;
S020当执行所述数据存储方法或所述数据读取方法时,判断用户是否具备对待存储或读取的容器的读写权限;
S030根据所述权限执行或驳回所述用户的请求。
设置了容器的读写权限,那么在数据的存储或读取之前,会先判断下该用户是否具备读写的权限。具体的,执行读取操作前,先判断该用户对该容器是否有读取的权限,如果有的话则继续执行后面操作,否则驳回用户的读取请求。执行写操作前,先判断该用户是否对该容器有写的权限,如果有的话则执行后续的存储操作,没有的话则驳回用户的存储请求。
同样的,也可以设置容器的读写属性;对象的读写权限和读写属性等。
通过权限管理,一方面可以保护用户的隐私,另一方面,可以增加数据的安全性能,避免数据被其他人随意或无意改动。
上述所有实施例中,所述对象的名称是根据指用户指定的名称或系统生成的所述对象的名称,所述对象的名称在所在的容器中唯一存在;
所述容器的名称是根据用户指定的名称或系统生成的所述容器的名称,所述容器的名称在所在的存储系统中唯一存在;
所述数据的描述信息包括:对象的名称、创建时间、大小、文件类型、及所述对象的数据部分对应的数据块编号。
上述所有实施例中,所述统一接口可以是rest接口。Rest接口是一种基于HTTP协议的软件架构接口,其全称是Representational State Transfer,即表象状态转移接口。在具体实施时,例如,通过HTTP协议利用所述REST接口获取对存储对象的读取指令,如果把存储系统的服务器中存储的所有的数据都看作是资源(Resource),那么呈现在用户面前(即客户端)的就是资源的表象(Representation),每一个资源都有自己唯一的标注,即统一资源标识符(URL,Uniform Resource Identifier),相当于以HTML的形式通过http协议获取(容器名)容器里面的(对象名称)对象;表象状态转移所述的状态(State),指的是客户端的状态,而不是服务器端的状态,在Rest中,服务器端应该是无状态的。表象状态(Representational State)即:每一个资源(Resource)在客户端的表象(Representation)就是客户端的一个状态(State)。表象状态转移所述的转移(Transfer),指的是当用户通过不同的URL访问不同的资源时,客户端的表象(Representation)也会随着变化,也就意味着客户端的状态转移
(Transfer)了。本发明的接口在软件的架构下实现对象的存储系统,添加新功能或者新接口会变得非常容易,只需要将新接口的代码逻辑添加到制定的接口函数中,并不需要修改原有的代码逻辑即可,也不需要对硬件设备作出任何改动,具有很好的灵活性和低成本可扩展性。
基于同样的思想,本发明还提供了一种数据存储系统,该系统可采用上述数据管理方法,如图7所示,本发明数据存储系统的实施例一包括接口模块10、与所述接口模块10相连的服务管理模块20、及与所述服务管理装置相连的存储模块30,所述服务管理模块20包括解析单元21、及与所述解析单元21分别相连的序列化单元22、查找单元23、创建单元24,所述创建单元24还与所述查找单元23相连;所述存储模块30中含有容器,用于存储对象,其中:
所述数据存储系统将数据存入包括:
通过所述接口模块10获取所述数据的存储指令后,所述服务管理模块20的解析单元21解析所述存储指令,获取所述存储指令中的容器名称及对象的名称;
所述序列化单元22将所述数据进行序列化操作,变换成可存储的状态;
所述查找单元23根据所述解析单元21解析获取的所述容器的名称,在所述存储模块30的中查找所述容器是否已存在;
当所述查找单元23查找到所述容器时,所述查找单元23进一步在所述容器中查找是否存在所述解析单元21解析所述存储指令获取的对象;当所述查找单元23在所述容器中查找不到所述解析单元21解析所述存储指令获取的对象时,所述创建单元24根据所述解析单元21解析获取的对象的名称,在所述容器中建立一个对象,所述对象包括元数据部分和数据部分;
当所述查找单元23查找不到所述容器时,所述创建单元24根据所述解析单元21解析所述存储指令获取的容器的名称,在所述存储模块30中建立一个新容器;所述创建单元24根据所述解析单元21解析所述存储指令中获取的对象的名称,在所述新容器中建立一个对象,所述对象包括元数据部分和数据部分;
所述存储模块30将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分;
所述存储模块30存储成功后,返回所述数据存储的数据块编号,并存储于相应的对象的元数据部分。
较佳的,所述存储模块30包括判断单元31、及与所述判断单元31相连的操作单元32,其中:
所述存储模块30将所述数据的描述信息存储在所述对象的元数据中;将所述数据内容以数据块的形式存储在所述对象的数据部分包括:
所述存储模块30的判断单元31判断所述数据的大小是否大于预设的数据块大小,若是,则通过所述操作单元32将所述数据分割成若干数据块,并依次对所述数据块进行编号,将所述带编号的数据块存储于所述对象的数据部分;将所述数据的描述信息存储于所述对象的元数据部分;否则所述操作单元32将所述数据存入一个数据块,将所述数据块编号后存储于对象的数据部分;将所述数据的描述信息存储于对象的元数据部分。
该数据存储系统在数据的存储过程中,不区分数据的类型,不管是图片、视频、音频还是文档,通过统一的入口进行存储及处理。该系统使用面向对象的思想,将不同的数据类型抽象成一个对象,而向用户提供统一接口进行存储,最大程度简化用户设计数据存储模型和熟悉并学习操作数据库的过程,而且达到使其他不同的语言都可以调用的目的。此外,将不同的数据类型通过统一的接口,提供高度的可扩展性,在无需修改现有系统的情况下,添加对新的数据类型的支持,最大程度上满足用户在数据存储方面的需求。
本发明数据存储系统的另一实施例,在上述实施例的基础上,所述服务管理模块20还包括与所述查找单元23相连的删除单元25,其中:
所述数据存储系统将数据删除包括:
通过所述接口模块10获取所述数据的删除指令后,所述服务管理模块20的解析单元21解析所述删除指令,获取所述删除指令中的容器的名称及对象的名称;
所述查找单元23根据所述解析单元21解析所述删除指令获取的所述容器的名称和对象的名称,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述查找单元23查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;
所述删除单元25根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
较佳的,所述存储模块30的判断单元31判断所述容器中存在的空位是否超过预设的数值,若是,则通过所述操作单元32去除所有空位,并将所有剩余的数据部分的数据块重新编号;
所述操作单元32同步更改所述容器中所述对象的元数据部分存储的所述对象的编号信息。
同样的,本发明数据存储系统的另一实施例,在上述实施例基础上,所述存储系统将数据进行更新包括:
通过所述接口模块10获取所述数据的更新指令;所述服务管理模块20的解析单元21解析所述更新指令,获取所述更新指令中的容器的名称及对象的名称;
所述序列化单元22将所述数据进行序列化操作,变换成可存储的状态;
所述查找单元23根据所述解析单元21解析所述更新指令获取的所述容器的名称和对象的名称,查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述查找单元23查看所述对象的元数据部分,进而找到对应的数据部分,并获取所述数据部分的数据块编号;所述删除单元25根据所述数据块编号,删除所述对象的数据部分的数据块及所述对象的元数据,保留所述对象删除后的空位。
所述存储模块30的判断单元31判断所述数据所需的数据块数量是否比查找到的对象对应的数据块数量多,若是,则所述服务管理模块20的创建单元24重新建立一个新对象,所述存储模块30的操作单元32将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分,否则,所述存储模块30的操作单元32将所述数据存储在所述保留的空位上。
本发明数据存储系统的另一实施例,在上述实施例基础上,所述服务管理模块20还包括与所述查找单元23相连的推送反馈单元27,所述推送反馈单元27还与所述删除单元25、创建单元24相连,其中:
当所述查找单元23根据所述解析单元21解析获取的容器名称和对象名称,在所述存储模块30中查找到相应的容器及对象时,所述推送反馈单元27推送是否继续存储的确认界面,所述确认界面包含查找到的已存储的所述对象、及待存储的数据的对比信息;
当所述推送反馈单元27接收到用户确认继续存储所述数据且保留原对象时,所述创建单元24在同一容器中创建新对象;
当所述推送反馈单元27接收到用户确认继续存储且删除原对象时,则所述删除单元25删除所述查找单元23查找到的对象,所述存储模块30的判断单元31判断所述数据所需的数据块数量是否比所述服务管理模块20的查找单元23查找到的对象对应的数据块数量多,若是,则所述服务管理模块20的创建单元24重新建立一个新对象,所述存储模块30的操作单元32将所述数据存储在所述对象的数据部分,将所述数据的描述信息存储在所述对象的元数据部分,否则,所述存储模块30的操作单元32将所述数据存储在所述保留的空位上;
当所述推送反馈单元27接收到用户确认取消存储所述数据时,结束操作。
本发明数据存储系统的另一实施例,在上述任一实施例的基础上,还包括与所述查找单元23相连的读取单元26,其中:
所述数据存储系统读取数据包括:
通过所述接口模块10获取所述数据的读取指令,所述服务管理模块20的解析单元21解析所述读取指令,获取所述读取指令中的容器的名称及对象的名称;
所述查找单元23根据所述解析单元21解析所述读取指令获得的容器名称及对象的名称,在所述存储模块30中查找到相应的容器;并进一步在所述容器中查找到相应的对象;
所述读取单元26查看所述对象的元数据部分,获取所述数据部分的数据块编号,进而找到对应的数据部分;
所述读取单元26根据所述数据块编号,将所述查询到的对应的数据部分进行排序,依次读取所述数据部分存储的对象内容。
本发明存储系统的另一个实施例,在上述任一实施例的基础上,还包括权限管理模块40,所述权限管理模块40分别与所述服务管理模块20和存储模块30相连;其中:
所述存储系统进行权限管理包括:
所述权限管理模块40设置所述容器的读写权限;
当执行所述数据存储方法或所述数据读取方法时,所述权限管理模块40判断用户是否具备对待存储或读取的容器的读写权限;
所述权限管理模块40根据所述权限执行或驳回所述用户的请求。
设置权限管理,包含用户的隐私和数据的安全性。
较佳的,上述任一实施例中,所述对象的名称是根据指用户指定的名称或系统生成的所述对象的名称,所述对象的名称在所在的容器中唯一存在;
所述容器的名称是根据用户指定的名称或系统生成的所述容器的名称,所述容器的名称在所在的存储系统中唯一存在;
所述数据的描述信息包括:对象的名称、创建时间、大小、文件类型、及所述对象的数据部分对应的数据块编号。
较佳的,本发明数据存储系统中所述接口模块为rest接口。
通过基于对象的存储系统的设计,将不同的数据类型通过统一的接口,并且提供高度的可扩展性,在无需修改现有系统的情况下,添加对新的数据类型的支持。而且,基于rest接口的设计,支持多种程序语言的客户端。
本发明最后一个实施例,本发明的存储系统,采用本发明的数据管理方法。具体的,参照图8,示出了数据库中存储对象的结构;相应的,图9是存储形式示意图,图10是系统整体架构图。该存储系统基于Collection(即容器),将每一个存储的文件数据当做是一个Object(即对象),每个Object由metadata(即元数据部分)和data(数据部分)组成。被存储的Object放入相应的Collection。
用户首先创建一个Collection,该CollectionName(容器名称)全局唯一,用户可以向这个Collection中POST Object,该系统中存储的Object是被序列化的,所以不区分文件的类型。存入Collection的每一个Object都有一个唯一的标识key(相当于对象名称)。这个key可以由用户设定,也可以系统生成,用户可以根据Object的key(id)获取、更新或者删除这个Object。
具体的,详细内容如下:
1)Collection:
用户创建的Collection的CollectionName必须是全局唯一的,该名字可以由用户提供,也可以由系统提供。
Object:
在一个Collection可以存放多个Object,在系统中存储的Object是被序列化的,系统并不能区分Object的类型,它可能是一个文本文件或者一个视频文件。MeataData里面存储的是Object创建时间、大小、文件类型等。系统中Object的Identifier由key来标识。
Key在Object被创建的时候由用户给定,若用户未指定由系统分配,要保证key在Collection内部是唯一的,不同的Collection可以由相同的key,如:有一个Collection的标识为fx,存储了一个Object的key为soho/user/email.txt(注:key可以是string类型或其他类型),那么用户就可以通过下面的地址来访问Object:http://host:port/fx/soho/user/email.txt.
此系统使用nosql数据库,该数据库使用ob.metadatas和ob.blocks进行文件存储。其中,ob.metadatas记录Object的信息Object metadata,ob.blocks记录Object的内容data。文件存入到数据库的过程中,如果文件大于blocksize,则把文件分割成多个block,再把这些block保存到ob.blocks中,最后再把文件信息存入到ob.metadatas中。
在读取文件的时候,先据查询的条件,在ob.metadatas中找到一个合适的记录,得到“id”(相当于数据块的编码)的值,再据这个值到ob.blocks中查找所有“metadata_id”为“id”的block,并按“n”排序,最后依次读取block中“data”对象的内容,还原成原来的文件。
该系统按照restful标准,支持的方法有POST,PUT,GET,DELETE,HEAD。例如:而对于用户来说,当调用rest接口POST一个Object文件时,用户可以指定该Object的name,而这个name必须是唯一的,这个name可以按照”a/b/test.txt”的形式进行命名,当存储成功,将返回object的id。用户可以根据之前命名的这个Object的name,也可以根据系统返回的id,Get到这个Object。
本实施例通过基于对象的存储系统的设计,将不同的数据类型通过统一的接口,并且提供高度的可扩展性,在无需修改现有系统的情况下,添加对新的数据类型的支持。而且,基于rest接口的设计,支持多种程序语言的客户端。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。