一种数据操作方法及系统与流程

文档序号:26050403发布日期:2021-07-27 15:25阅读:112来源:国知局
一种数据操作方法及系统与流程

本发明涉及一种数据操作方法及系统,属于数据处理技术领域。



背景技术:

现有技术中的数据存储时,需要安装特定的数据库软件,引入外部程序会一定程度上增加开发周期和门槛,同时也增加了项目整体的不确定性。

关系型数据库在存储大量数据时,需要具有一定专业知识才能够妥善使用,否则会导致数据的存储不合理的状况,从而影响查询性能,且这类标准设计不可理导致的问题在项目上线后几乎无从改善。

开源软件虽然源码可读,但它的书写语言不一定是谁都能读懂的,再加上数据库的开源产品一般都有足量的代码量,这对于通过底层排查问题带来了困难,增加了维护成本。

此外,现有的数据组件之间的互通难以完成,需要再一步引入互通工具(如datax),并且这也意味着对于新工具的学习成本也要增加,毕竟再简单的命令行工具(甚至很多图形化界面工具)也都需要依靠文档说明书来使用。

因此,对现有技术中的存储方法进行改进,以解决上述问题,是当前迫切需要解决的技术问题。



技术实现要素:

以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。

本发明主要的目的是解决现有技术中所存在的上述的技术问题,提供了一种数据操作方法。该方法及系统在确保速度的同时,不引入外部软件,就可以便捷地完成对单用户本地数据的增删改查的功能。

为解决上述问题,本发明的方案是:

一种数据操作方法,包括:

文件编排步骤,用于按照预设的文件命名格式生成用于存储数据的元数据文件;

内容编排步骤,将待存储内容按照预设的内容编排模式编排后按行存储于所述元数据文件中;

数据读取步骤,按照文件命名格式和内容编排模式读取待更新的元数据文件中的目标部分。

优选的,上述的一种数据操作方法,所述文件命名格式包括:

时间字段,用于记录文件内信息的生效时刻;

前缀和/或后缀,用于作为文件筛选的依据;

序号,根据用户输入信息转换得到,用于表示文件所存储信的属性;

文件哈希值,用于验证文件所存数据的可靠性。

优选的,上述的一种数据操作方法,所述,所述时间字段通过unix系统的awk工具和unix系统的日期格式转换工具获得毫秒时间戳后生成。

优选的,上述的一种数据操作方法,所述内容编排步骤,按照内容编排模式规定的分隔符在元数据文件的每行中区分字段,其中,元数据文件中每行的第一个字段是元数据的局部数字id,第二个字段是元数据的唯一标识。

优选的,上述的一种数据操作方法,所述分隔符为逗号。

优选的,上述的一种数据操作方法,

所述数据读取步骤中通过linux中统一的信息传递接口,用脚本的方式实现读取数据在各种工具、组件、框架中的传递。

优选的,上述的一种数据操作方法,所述数据读取步骤中,通过unix系统的awk工具的正则匹配功能获取元数据文件中特定行的特定列数据。

一种数据操作系统,包括:

文件编排模块,用于按照预设的文件命名格式生成用于存储数据的元数据文件;

内容编排模块,将待存储内容按照预设的内容编排模式编排后按行存储于所述元数据文件中;

数据读取模块,按照文件命名格式和内容编排模式读取待更新的元数据文件中的目标部分。

优选的,上述的一种数据操作系统,所述数据读取步骤中通过linux中统一的信息传递接口,用脚本的方式实现读取数据在各种工具、组件、框架中的传递;其中,所述信息传递接口是文件或者句柄。

根据权利要求1所述的一种数据操作方法,所述数据读取步骤中,通过unix系统的awk工具的正则匹配功能获取元数据文件中特定行的特定列数据。

因此,相对于现有技术,本发明具备以下优点:本发明能够在确保速度的同时,不引入外部软件,就可以便捷地完成对单用户本地数据的增删改查的功能。并且,由于是shell上的操作,因此可以通过统一的文本流接口实现向系统内任何软件或工具的信息传递。

附图说明

并入本文并形成说明书的一部分的附图例示了本发明的实施例,并且附图与说明书一起进一步用于解释本发明的原理以及使得所属领域技术人员能够制作和使用本公开。

图1例示了本发明实施例中的文件名格式示例;

图2例示了本发明实施例中的文件内容格式;

图3例示了本发明实施例中的整体逻辑流程图;

将参照附图描述本发明的实施例。

具体实施方式

实施例

本实施例,首先提供了一种数据操作方法。该方法包括:

文件编排步骤,用于按照预设的文件命名格式生成用于存储数据的元数据文件;

内容编排步骤,将待存储内容按照预设的内容编排模式编排后按行存储于所述元数据文件中;

数据更新步骤,按照文件命名格式和内容编排模式命中待更新的元数据文件中的待更新部分并进行数据更新;

数据读取步骤,按照文件命名格式和内容编排模式读取待更新的元数据文件中的目标部分。

作为一种优选实施方式,文件命名格式包括:

时间字段,用于记录文件最后的更新时间;

前缀和/或后缀,用于作为文件筛选的依据;

序号,根据用户输入信息转换得到,用于表示文件所存储信的属性;

文件哈希值,用于验证文件所存数据的可靠性。

本实施例所针对的场景是数据来源的表几乎不更新、但一有更新就会大批变化的场景;这个数据来源表不保存历史信息,但现在需要保存,却又不能改变原有架构。

本方案用于在不改变原有表结构的前提下,进行「可记录历史」的功能的扩充。本实施例中,文件是如同历史快照,其名中时间字段的作用就是,对本文件内信息的生效时刻予以记录。失效时刻通过相同前缀与序号的更晚时间的文件的文件名中时间字段表示,不需要记录在文件本身。

如图2所示,为依据上述实施例的一种文件命名格式。文件名格式:<统一的前缀>_<表的序号>_<统一的后缀>_<表示时间的字段>_<文件哈希>。

其中,序号和时间的表示是必选项,一个文件就相当于数据库中的一张表,时间是新变更生成的时间,此处精确到了毫秒。

作为一种优选方式,时间字段通过unix系统的awk工具和unix系统的日期格式转换工具获得毫秒时间戳后生成。通过awk(unix工具)和系统自带的日期格式转换工具可以转换成标准的毫秒时间戳,在转换后去除所有比指定时间更大的,并将其作为排序依据,便可取得距离所选指定日期最近的前一次更新,其中内容便是从更新日期到当前时刻都正确生效的元数据信息。

作为一种优选方式,所述内容编排步骤,按照内容编排模式规定的分隔符在元数据文件的每行中区分字段,其中,元数据文件中每行的第一个字段是元数据的局部数字id,第二个字段是元数据的唯一标识。

以下为本实施例给出的示例文件名:

yishusheng_mingdan_class_2013-02.pset.20161112_132234999__d2fa698c_dfae_452a_98c6_ad3aaac459b

本实施例的文件名在查询时,其中各个字段用于做为查询时定位文件的依据。在存储时,可用于表明文件内容中,数据的来源。

作为一个实施例,在这个案例中,假设数据源是某学校数据库,其中每个具体班都有一个独立的数据库(如「class_2013-02」),数据库中有「成绩」表,有「名单」表,等等;

名单中有所有本班人名以及每个人各项信息,其中有一项信息是学生类型:分文化生、艺术生、体育生,等等。这个名单表,由于初期设计不周等因素,被设计成了不会保存历史的表。

现在,本实施例的这一功能的扩充要以用于解决以上问题。

本示例假如,这个学校里,学号被硬性要求要按照入学时成绩(或者要求了按照学生地域来源)来排序学号。这样就导致,每一次转学,都有可能导致本班内其他人的学号的变化。只是在这种情况下,本方案才具有资源占用上的合理性。

每当有转学,在相应班级名单表中信息有了变化后,都要在下一次变化前,对当前本班的全部或某类学生(这个根据需要,示例文件名文件是只存艺术生的快照)的信息,作为快照保存为文件。

在保存的时候,必须要指定变化(比如全班中一部分人学号的变化)发生的时间。示例文件名里这个时间精度是到了毫秒,实际情况仍然可以自行选择精度。

精度选择的原则:比如若决定精度到小时,就必须事先确保,这个表一个小时内是不会再变一次的。

更新操作要不要执行,取决于被扩充历史保存功能的那个数据源表,有没有发生实际的变更,以及这是否被视为值得被保存为历史的一次变更。

在这一保存的过程中,示例文件名的各个部分的来源如下:

-「yishusheng」是「前缀」的一部分。它意味着,数据源的「名单」表里,在某一列是「yishusheng」的所有条目,都会被存在这个文件里。

-「mingdan」是「前缀」的一部分。它表示,这个文件里的内容来自某个库的「名单」表,而不是别的什么表。

-「class_2013-02」整体是「序号」。在这里,「序号」直接取来源的库名,是因为在这里,各个班级的不同点在库名上而非在表名上。如果学校原本组织数据的结构是,有库叫「名单」且其中一班一个表,那么序号就要用表名了。总之,序号要按照业务场景指定。(当然,你也可以把「class_」当作前缀。这里怎么定义是自由的,因为可能有的业务场景里就是只需要用不同数字区分不同的表/库的来源。)

-「.pset」这个就是「后缀」,作用就是了类似于「扩展名」一样的东西,用来表示这是一类文件。它的内容不见得一定要「.pset」,也完全可以叫「.classmateset」或「.yishushengjihe」等。

-「20161112_132234999」这个是「时间戳」,用于表示本文件(快照)中内容的生效时刻。

-「d2fa698c_dfae_452a_98c6_ad3aaac459b」这个是「哈希」。哈希是根据文件内容算出的,可以用于校验文件内容是否有被改动。任何一个文件的哈希都可以根据文件内容通过哈希算法得出,只要内容一样哈希就一定一样。一般来说压缩软件(如7-zip)就有这一功能。示例的哈希是由名为「datax」的开源的数据导出工具,根据其默认算法自动得出。

其中,「前缀」是可有多个部分的,且多部分的前后顺序没有硬性要求,建议根据业务环境怎么方便怎么来。如果本方案在业务中应用范围不广的话,甚至完全可以没有「前缀」。

查询的原理就是通过linux(centos)自带的工具,完成对输入信息的读取、转化、输入信息与存储信息匹配、提取目标信息并转化为目标格式标准输出,这些工作。

linux的「一切皆文本流」的设计,使得文件成了一种统一的接口。

输入信息(比如「我要看艺术生里在2013年的时候的2000级3班的所有在六岁开始接受义务教育的学生的名单」这样的信息)可以来自各种程序对指定shell脚本的传参调用(比如「2013时候」和「2000级3班」和「在六岁开始接受义务教育」就都可以成为一个艺术生管理老师的传入参数,老师完全可以通过如网页下拉框选择的方式完成参数传入);

结果的输出可以是控制台,可以是写入文件、可以是通过管道直接传递给调用程序从而在比如网页这样的界面显示。

以上是查询的整体过程。文件名各个部分在其中的具体作用如下:

-前缀「yishusheng_mingdan」:可以作为可选的筛选文件依据。(如,命令lsyishusheng_mingdan*的执行,就可以只是列出「yishusheng_mingdan」开头的所有文件名。)

-序号「class_2013-02」:根据用户输入信息转换得到。(如,用户输入含义「2000级3班」,则它可以被转换为字符串「class_2000-03」。)

-后缀的作用和前缀类似,用于只是列出具有共同后缀的文件名。

-时间戳「20161112_132234999」:当用户选定了「我要查某某表在2015年5月1日0点时刻是什么内容」的话,根据这个输入得到时间戳「20150501000000000」后,把所有前面筛选到的文件的时间戳里的「_」去掉并从大到小排序后,只留下比「20150501000000000」小的那些,并只取其中最大的那个,其内容即是在用户所选时刻的时候这个表的当时的内容。

-哈希可以用于证明文件的纯洁性,即用于证明其自生成开始没被篡改过,或者用于证明它的内容可能被误操作篡改过,但是又正确地改了回去。

如图2所示,为根据上述实施方式确定的一种文件内容编排示例。该示例中,根据英文逗号分隔字段,第一个字段是元数据的局部数字id,第二个字段是元数据的唯一标识。可以继续增加字段,用于存放与对象相关的各项信息。

其中,分隔符的统一标准,不一定要用逗号,但必须统一。字段数目不受限制。

作为一种优选方式,数据读取步骤中,通过unix系统的awk工具的正则匹配功能获取元数据文件中特定行的特定列数据。

如图3所示,为本发明实施例的一种优选的数据读取方式。在确定了需要查看的文件名的序号和时间戳后的文件,通过awk命令可以得到指定的所有行的某列数据,而使用awk的正则匹配功能还可以指定获取某些行的某(几)列数据,从而实现查询功能。更新数据就是用导出工具从元数据提供方取得数据,命名格式和命名原则同文件编排部分,内容格式要与文件内容编排部分统一。

作为一种优选方式,数据读取步骤中通过linux中统一的信息传递接口,用脚本的方式实现读取数据在各种工具、组件、框架中的传递。

具体步骤包括:

步骤1:用户请求信息传入后台程序

步骤2:后台程序根据信息:要么生成导出自数据源的文件,要么确定指定要查询的文件和文件中的哪些行列;

步骤3:如果是查询动作,查询的结果信息则通过后台程序返回至用户端。

在上述的步骤中,用户端具体形式无所谓。视使用场景可以是命令行界面,可以是另外的脚本,也可以是有图形界面的web等等。允许根据具体应用场景可以灵活变通(否则就不能叫接口了),并且这样的变通不需要安装另外的东西(除非比如界面显示这样的不属于本发明范畴的功能它本身的功能实现需要另外安装东西)。后台程序可以在不安装另外软件的情况下实现,如使用bash与awk就可以实现,但也可选用别的工具来实现,共同点就在于只需要能从文本文件中筛选出需要的那个,并还能对其内容进行筛选。只要是有字符处理功能的工具都可以作为实现手段。获取正确的历史副本的步骤是:在做完其余文件名筛选后,先只取时间小于等于用户指定的文件,再取其中时间戳最大的那个。

本实施例还提供了一种数据操作系统,包括:

文件编排模块,用于按照预设的文件命名格式生成用于存储数据的元数据文件;

内容编排模块,将待存储内容按照预设的内容编排模式编排后按行存储于所述元数据文件中;

数据更新模块,按照文件命名格式和内容编排模式命中待更新的元数据文件中的待更新部分并进行数据更新;

数据读取模块,按照文件命名格式和内容编排模式读取待更新的元数据文件中的目标部分。

其中,文件编排模块、内容编排模块、数据更新模块、数据读取模块执行的方法与数据操作方法中各步骤操作的方法相同。

文件内容可以有多个字段,其中为首的字段应该是局部唯一键(学号是只在班内唯一的),其余字段并没有硬性要求,比如「身份证号」字段就是全局唯一字段。

如果只是想要存储学号对于一个自然人的变化历史的话,只需要存「学号」和「身份证号」这两个字段就够了,学生的别的信息可以专门通过身份证号找到。

出于节约空间的考虑,也可以将第一个字段设置为局部唯一第不在乎空间占用,或者别的原因比如想要保存完整快照而不是只是「学号-人」这个对应关系的历史快照)的话,就没必要只是存这两个字段。

本实施例中,尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。

注意到,说明书中对“一个实施例”、“实施例”、“示例实施例”、“一些实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以不必包括所述特定特征、结构或特性。而且,这样的短语不必指代同一实施例。此外,当结合实施例描述特定特征、结构或特性时,无论是否明确描述,结合其他实施例来实现这样的特征、结构或特性将在所属领域的技术人员的知识范围内。

提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1