具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
考虑到现有的列表数据的处理方法大多可以分为两种。其中,一种方法是直接将列表数据不作处理按照行进行存储。由于列表数据本身就是行为单位所生成的数据,在对上述列表数据进行修改等操作处理时,可以直接仅对该数据进行相应的修改处理。因此,按照上述方法处理得到的列表数据相对来说,更适于进行例如插入数据、删除数据等针对列表数据的写入类处理。但用户具体查询列表数据的内容时,往往是针对列表数据中的某一个或几个列的数据进行的。例如,可以参阅图1所示的一种关于员工收入的列表数据。通常用户可能只想查询Id为10001的Salary这一列的数据。但由于按照上述方法,列表数据是按行进行存储的,在响应用户查询请求读取Salary列数据时,必须先读取Id为1001所在行中所包括的所有列的数据(即需要同时读取该行的Dept_Id、First_Name、Last_Name和Salary共四列的数据),再从上述所有列的数据进一步筛选以确定出所要查询的列的数据,即Salary列的数据10000,反馈给用户。可见基于上述方法处理后的列表数据在进行例如数据查询等针列表数据的读取类处理时,效率相对较低,尤其当列表数据结构比较复杂,例如每一行数据中包括有数量较多的列数据时,进行一次读取类处理对资源的消耗,以及对时间的占用会更加明显,即出现读取效率相对低、资源消耗较大的问题。
而另一种方法,往往需要先将列表数据拆分为多个数据块,再将多个数据块分别进行保存。按照这种方法处理后的列表数据相对更适用于进行例如数据查询等读取类处理。因为,这时可以只读取对应列所在的数据块中的一个或几个列的数据,而不需要读取所有列的数据,可以减少工作量,提高工作效率。但是在进行插入数据或删除数据时相对就比较麻烦。例如,如果要增加一行的数据,往往需要对所述多个数据块分别进行处理。势必会增加工作量,增加对资源的消耗和时间的占用,进而导致出现写入效率相对较低、资源消耗相对较大的问题。
而通常人们希望针对列表数据的包括诸如写入、读取等多种不同类型的处理都可以高效地实现完成。但现有的两种处理方法显然无法满足上述需求。即,现有方法具体实施时,往往存在无法同时兼顾针对列表数据的修改、查询等多种不同类型处理的处理效率的技术问题。
针对产生上述问题的根本原因,本说明书进一步分析了不同处理方法在进行不同类型处理时的处理特点和优势,考虑可以综合多种处理方的处理优势,即可以现根据完整的列表数据生成适于写入类处理的第一数据;同时按列拆分列表数据得到多个分区数据,再根据上述多个分区数据生成适于读取类处理的第二数据。进而可以利用对应上述两种类型数据,以及适宜两种数据处理的方式分别存储两组数据。再在具体对列表数据进行处理时,可以充分利用两种数据不同的处理特点和处理优势,根据上述第一数据和第二数据来高效地完成多种类型的数据处理。从而解决现有方法中存在的无法同时兼顾针对列表数据的修改、查询等多种不同种类处理的处理效率的技术问题,达到既能高效地完成针对列表数据的诸如修改等写入类处理,又能高效地完成针对列表数据的诸如查询等读取类处理,提高了用户体验的效果。
本说明书实施例提供了一种列表数据的处理方法,该方法具体可以应用于包含有服务器和客户端的系统架构中。其中,上述客户端位于用户一侧,上述服务器位于后台数据处理系统一侧,所述客户端和服务器通过有线或无线的方式进行耦合以便相互之间可以进行数据交互。
在本实施例中,具体实施时用户可以通过客户端向服务器发送需要保存的列表数据。服务器在获取列表数据后,可以先按照以下方式对列表数据进行处理,得到一个第一数据和多个第二数据:按列将所述列表数据拆分为多个数据分区;根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据;再根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列。用户需要对上述列表数据进行例如查询、修改等不同类型处理时,可以向服务器发送对应类型的处理请求。服务器可以响应对应的处理请求,根据所述第一数据和所述多个第二数据,高效地进行与所述列表数据相关的不同类型的数据处理。
在本实施例中,所述服务器可以是一种应用于后台处理系统一侧,能够实现数据传输、数据处理等功能的后台业务服务器。具体的,所述服务器可以为一个具有数据运算、存储功能以及网络交互功能的电子设备;也可以为运行于该电子设备中,为数据处理、存储和网络交互提供支持的软件程序。在本实施方式中,并不具体限定所述服务器的数量。所述服务器具体可以为一个服务器,也可以为几个服务器,或者,由若干服务器形成的服务器集群。
在本实施例中,所述客户端可以是一种应用于用户一侧,能够实现数据输入、数据传输等功能的前端设备。具体地,所述客户端例如可以为台式电脑、平板电脑、笔记本电脑、智能手机、数字助理、智能可穿戴设备、导购终端、具有网络访问功能的电视机等。或者,所述客户端也可以为能够运行于上述电子设备中的软件应用。例如,可以是在手机上运行的某APP等。
在一个场景示例中,可以参阅图2所示,应用本说明书实施例提供的列表数据的处理方法对用户上传的列表数据进行具体的处理和保存,并响应用户的处理请求,根据所处理和保存的数据进行具体的数据处理。
在本实施例中,用户想要将图1所示的列表数据先存储在后台处理系统的服务器中以便后续的处理,可以先通过客户端将上述列表数据发送至服务器。
服务器在接收到上述列表数据处理后,为了方便后续能够高效地进行多种针对该列表数据的不同种类的数据处理,可以先对所获取的列表数据进行相应的预处理,得到适用于不同类型处理的不同类型的第一数据和第二数据来表征该列表数据,再按照第一数据和第二数据这两不同类型数据的使用特点,采用对应的方式进行存储。
具体的,服务器在接收到上述列表数据后,可以先根据不作拆分的完整的列表数据生成第一数据。即,第一数据中会同时包含有列表数据中出现的Dept_Id、First_Name、Last_Name、Salary,以及Emp_Id所有列的数据。并且该类数据实际上还是以行为单位进行保存和处理的,适宜用于后续进行诸如插入、删除、修改等写入类的处理。
同时,服务器还可以按照列,将所述列表数据拆分成多个数据分区,再根据所述多个数据分区生成对应的多个第二数据。
具体的,可以参阅图3所示,可以按照列,先将原列表数据中的Dept_Id、First_Name、Last_Name,以及Emp_Id这几列数据拆分成一个数据分区,记为S1。再将列表数据中剩余的Salary,以及Emp_Id拆分成另一个数据分区,记为S2。这样可以得到两个不同数据分区。其中,上述两个不同的数据分区包含有一个共有的相同的列,即Emp_Id列。当然,需要说明的是,上述所列举的数据分区的拆分方式只是为了更好地说明本说明书实施例。具体实施时,根据具体的应用场景和处理要求,也可以将上述列表数据按照其他的列的组合方式进行拆分,例如,也可以将Dept_Id、First_Name,以及Emp_Id这几列数据拆分成一个数据分区,将Last_Name、Salary,以及Emp_Id这几列数据拆分成另一个数据分区。此外,还可以根据具体需要,将上述列表数据拆分成3个甚至更多数量的数据分区。对此,本说明书不作限定。
在拆分得到两个不同的数据分区后,服务器可以进一步根据上述两个数据分区分别生成对应的两个不同的第二数据(即数据分区S1和S2所分别对应的第一个第二数据和第二个第二数据)。其中,上述第一数据和上述两个不同的第二数据都包含有相同的一个数据列,即Emp_Id列,该数据列可以称为上述第一数据和两个第二数据所分别包含的特征数据列,也可以称为主键列,后续处理时可以根据主键列将在不同的第二数据之间,以及在第一数据和第二数据之间建立对应关系。此外,上述特征数据列中的每一行数据具体还可以用于指示对应所在的行。例如,列表数据中的某一行数据的特征数据为Y,为了便于后续处理,可以认为该行数据为Y行数据,或者Y所在行的数据。
服务器在按照上述方式得到了一个第一数据和两个第二数据后,为了便于后续能够适宜于进行不同类型的数据处理,进一步提高应对不同类型数据处理的处理效率,还可以根据预设的存储规则,采用与数据类型对应的存储方式分别存储上述第一数据和第二数据。
具体的,服务器可以根据基于LSM-Tree(Log Structured Merged Tree,一种数据存储结构)结构的存储规则,将第一数据存储于MemTable(LSM-Tree中的一种支持数据插入、删除、修改等写入处理的存储结构)中,而将第二数据存储于SSTable(中的一种支持数据读取等读取处理的存储结构)中。从而完成了对列表数据的预处理和存储。
进而服务器可以接收并响应用户不同类型的处理请求,才与用户的处理请求对应的处理方式,综合利用上述两种不同类型的数据(即第一数据和第二数据)高效地进行与列表数据相关的数据处理。
在另一个场景示例中,可以参阅图4所示,用户想要对上述列表数据进行修改处理,例如,在图1所示的列表数据的基础上插入以下所示的一行新的数据:[Emp_Id:1004,Dept_Id:2,First_Name:Eric,Last_Name:Wang,Salary:12000]。用户可以通过客户端向服务器发送针对该列表数据的修改请求。其中,上述修改请求具体可以理解为一种请求在列表数据中插入一行新的数据的请求数据,即是向列表数据中插入行数据请求,该修改请求中具体还可以携带有上述待插入的一行新的数据。
服务器在接收到上述修改请求后,可以先确定该修改请求为向列表数据中插入行数据请求,该修改请求所请求的数据处理是针对列表数据的修改处理,并确定该修改处理属于一种写入类处理,进而响应并根据该修改请求,选择并确定适宜于写入类处理的第一数据作为待修改的数据对象;再根据与LSM-Tree结构对应的修改规则,对存储于MemTable中的第一数据进行相应修改。例如,参阅图4所示,通过插入指令(Insert)在MemTable中针对第一数据直接插入一行新的数据:Insert(10004,2,Eric,Wang,13000),从而对第一数据进行了修改写入,得到修改后的第一数据。其中,上述修改后的第一数据相对于原来未修改的第一数据增加一行Emp_Id为10004的数据。
在完成上述修改后,服务器会确定当前时间与上一次更新时间之间的时间间隔是否已经达到的预设的时间间隔,在此当前时间与上一次更新时间之间达到了预设的时间间隔时,可以根据上述修改后的第一数据,按照与LSM-Tree结构对应的修改规则,对存储于SSTable中的两个第二数据进行更新。具体的,可以按照与LSM-Tree结构对应的修改规则,将修改后的第一数据所包含的数据合并到上述两个第二数据中,使得存储于SSTable中更新后的两个第二数据都可以包含有新增加的Emp_Id为10004行中对应列的数据。即,在存储于SSTable中的第一个第二数据增加了以下列的数据:Emp_Id:10004,Dept_Id:2,First_Name:Eric。第二个第二数据增加了以下列的数据:Emp_Id:10004,Salary:13000。从而完成了对第二数据的对应更新,后续可以使用更新后的第二数据进行诸如查询等读取类处理。其中,上述预设的时间间隔具体可以根据精度要求和服务器的处理性能灵活设定。对此,本说明书不作限定。
需要说明的是,由于上述更新并不是实时进行的,也不需要重新生成新的第二数据,而是按照预设的时间间隔,根据最新的第一数据(可能是最近修改后的第一数据,也可能是最近没有被修改的第一数据)在之前已经获得多个第二数据的基础上,对存储于SSTable中的多个第二数据进行合并更新实现的,因此,更新多个第二数据的过程对资源的消耗相对更少,效率也相对更高。
上述所列举的是修改请求为向列表数据中插入行数据请求。此外,如果用户想要删除列表数据中的某一行数据,例如,删除上述列表数据中Emp_Id为10001所在行的行数据。类似的,用户可以通过客户端向服务器发送删除列表数据中的行数据请求,其中该修改请求中还可以携带有待删除行的行数据中特征数据列的数据作为指示信息,即:Emp_Id:10001。
服务器在接收到该修改请求后,在确定该修改请求为删除列表数据中的行数据请求,并确定所请求的处理为一种写入类处理后,选中并确定第一数据作为待修改的数据对象,再根据与LSM-Tree结构对应的修改规则,对存储于MemTable中的第一数据进行相应修改。例如,参阅图4所示,通过插入指令(Delete)在MemTable中直接删除列表数据中Emp_Id为10001所在行的数据:Delete(10001),完成了对第一数据的修改,得到修改后的第一数据。其中,上述修改后的第一数据相对于原来未修改的第一数据减少了Emp_Id为10001所在行的数据。
如果用户想要针对列表数据中的原有的某行某列的数据的参数值进行修改,例如,将原列表数据中Emp_Id为10003所在行,Salary列的数据由12000修改为15000。类似的,用户还可以通过客户端向服务器发送修改列表数据中具体数据的参数值的修改请求,其中该修改请求中还可以携带有指示待修改的数据的所在行和所在列的数据,以及该数据的修改值,即:Emp_Id:10003(指示所在行的信息)和Salary(指示所在列的信息):15000(对应的修改值)。
服务器在接收到该修改请求后,在确定该修改请求为针对该列表数据中具体数据的参数值的修改请求,并确定所请求的处理为一种写入类处理后,选中并确定第一数据作为待修改的数据对象,再根据与LSM-Tree结构对应的修改规则,对存储于MemTable中的第一数据进行相应修改。例如,参阅图4所示,通过插入指令(Update)在MemTable中根据修改请求中所携带的行指示信息(Emp_Id:10003)和列指示信息(Salary)确定出列表数据中的待修该的具体数据是Emp_Id:10003所在行,Salary列上的数据,即12000;再根据修改请求中所携带的修改值(15000),将上述数据的数值由12000修改成15000。完成了对第一数据的修改,得到修改后的第一数据。其中,上述修改后的第一数据相对于原来未修改的第一数据0003所在行,Salary列上的数据的参数值被修改成了15000。
当然需要说明的是,上述所列举的多种修改请求,以及响应多个修改请求对应修改第一数据的修改方式都是为了更好地说明本说明书实施例。具体实施时,根据具体情况和使用需要,还可以引入其他类型的修改请求,例如,向列表数据中插入列数据请求或者删除列表数据中的列数据请求等,以及对应的修改方式。当然,还可以在一个修改请求中同时包含上述统一类型的多个修改请求的组合或者不同类型的多个修改请求的组合。可以参阅图4所示。对此,本说明书不作限定。
在另一个场景示例中,当用户想要查询列表数据中的某个数据(可以称为目标数据)的具体参数值时,还可以通过客户端设备向服务器发送查询请求。例如,用户想要查询图1所示的列表数据中Sam Zhang的收入值时,可以向服务器发送针对该列表数据中所要查询的目标数据的查询请求。其中,该查询请求中具体还可以携带有用于指示待查询的目标数据在列表数据中的行信息(例如,Emp_Id)和列信息(例如,Salary)。
服务器在接收到上述查询请求后,可以解析并根据查询请求中所携带的关于待查询的目标数据的行信息和列信息,利用第一数据和多个第二数据进行预设处理,得到用于具体查询处理的处理后的第二数据。
具体的,服务器可以先根据查询请求中所携带的待查询的目标数据的列信息,从存储于SSTable中的多个第二数据中确定出包含有对应列数据的目标第二数据(即与目标数据相关的第二数据)。例如,根据查询请求中所携带的列信息Salary确定出包含有该列数据的第二个第二数据作为目标第二数据。
又由于第一数据是根据修改请求实时修改更新的,而为了减少工作量、提高效率,对于第二数据的更新往往是需要间隔预设的时间间隔,才能够根据最新的第一数据对第二数据进行更新的。因此,在接收到查询请求的时候,所确定出的目标第二数据可能是没有更新的第二数据。例如,此时可能第一数据中Emp_Id:10003所在行,Salary列上的数据的参数值已经由12000修改为了15000,但是由于还没有打预设的时间间隔,目标第二数据中,对应的数据的参数值仍然为12000,即,此时目标第二数据可能有些数据与最新的第一数据不一致,目标第二数据可能不是目前最新最准确的数据。
正是考虑到了上述情况,在确定出目标第二数据后,不会直接利用目标第二数据进行目标数据的查询,而是先以最新的完整的第一数据作为参照依据,对目标第二数据进行修正,作为预设处理,得到处理后的第二数据。其中,处理后的第二数据所记载的数据的参数值与最新的第一数据中数据的参数值一致。
具体的,可以根据第一数据、第一数据所包含的特征数据列、目标第二数据所包含的特征数据列,利用特征数据列为第一数据和目标第二数据建立关联对应关系,进而可以根据上述所建立的关联对应关系,将第一数据和目标第二数据中关联对应的两个数据进行比较,如果发现两个关联对应的数据不一致,则以第一数据中的数据的参数值为准,利用第一数据中的数据的参数值替换掉第二数据中关联对应的数据的参数值,从而完成了对目标第二数据的修正处理,得到了处理后的第二数据。例如,可以根据第一数据,将目标第二数据中Emp_Id:10003所在行,Salary列上的数据的参数值已经由12000修改为了15000。由于读取的处理过程主要是针对存储于SSTable中的分区后第二数据,而不是针对存储于MemTable中完整的第一数据进行的,因此,处理效率会相对较高。
在得到了最新、准确的处理后的第二数据后,可以根据查询请求中所携带的目标数据的列信息和行信息,对存储于SSTable中的处理后的第二数据中对应位置处进行检索,并读取对应位置处的数据的参数值,例如15000,并将该数据作为目标数据再发送给客户端。
客户端在接收到上述目标数据后,可以通过显示屏等显示装置向用户展示出该目标数据的具体参数值,以便用户可以高效、准确地了解到列表数据中Sam Zhang的最新收入值为15000。
由上述场景示例可见,本说明书提供的列表数据的处理方法,由于通过先根据完整的列表数据生成适于写入类处理的第一数据,根据按列拆分出的多个分区数据生成适于读取类处理的多个第二数据,再按照对应的存储方式分别对上述两种数据进行存储,进而可以综合上述两种数据在不同类型的数据处理上的处理优势,进行具体的数据处理,从而解决了现有方法中存在的无法同时兼顾针对列表数据的修改、查询等多种不同种类处理的处理效率的技术问题,达到既能高效地完成针对列表数据的诸如修改等写入类处理,又能高效地完成针对列表数据的诸如查询等读取类处理,提高了用户体验。
参阅图5所示,本说明书实施例提供了一种列表数据的处理方法,其中,该方法具体应用于服务器一侧。具体实施时,该方法可以包括以下内容:
S51:获取列表数据;
S53:按列将所述列表数据拆分为多个数据分区;
S55:根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据,并根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列;
S57:根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理。
在本说明书实施例中,上述列表数据具体可以是一种包含有多个数据列和多个数据行的数据。例如,具体可以是关于用户收入的列表数据,其中,每一行数据对应一个用户的数据信息,在每一行数据中具体又可以包括有与该用户的多种属性对应的多个列数据。例如,参阅图1所示,第一行数据是与Sam Zhang的收入相关的数据,该行数据中又具体包含有多个列数据,其中,上述多个列数据中的每一个列数据分别与Sam Zhang的一个属性对应。例如,Salary列为与Sam Zhang的收入属性对应的数据,First_Name列为与Sam Zhang的名属性对应的数据等。当然,需要说明的是,上述所列举的列表数据只是一种示意性说明。具体实施时,根据具体情况还可以引入其他形式或内容的数据作为上述列表数据。例如,还可以引入关于居民的身高统计数据作为列表数据等等。对此,本说明书不作限定。
在本实施例中,具体实施时,用户可以通过客户端向服务器发送列表数据,服务器通过客户端获取列表数据。
在本实施例中,为了便于后续对列表数据进行诸如数据查询等读取类处理,可以先按列将完整、数据量较大的列表数据拆分成多个数据分区,其中,每一个数据分区中分别可以包含有两个或多个列数据。具体可以参阅图3所示,将完整的列表数据拆分成两个数据分区,其中,一个数据分区包含有的4个列数据,另一个数据分区包含有2个列数据。
在本实施例中,在具体拆分时,可以先从列表数据所包含的多个列数据中确定出一列所包含的各个数据互不相同的列数据作为特征数据列。参阅图3所示,由于第一列,即Emp_Id列所包含的各个数据都互不相同,因此,可以将该列数据确定为特征数据列。当然,具体实施时,根据具体情况也可以选择其他合适的列数据作为上述特征数据列。对此,本说明书不作限定。
在确定出特征数据列后,进一步,可以将列表数据中除特征数据列以外的剩余的多个数据列根据预设规则进行拆分,分成多个部分。例如,可以根据第一个字符进行拆分,也可以根据各个数据列所对应的属性的相似性进行拆分等等。对于拆分的具体方式和依据,本说明书不作限定。
在完成将列表数据中除特征数据列以外的剩余的多个数据列拆分成多个部分后,再在每个部分中分别加入特征数据列,与各个部分中拆分的数据列进行拼接,从而可以得到多个数据分区。这样可以使得多个不同的数据分区中都包含有相同的特征数据列。后续处理时,可以依据各个数据分区所包含的特征数据列,建立各关联对应关系。当然,上述列举的数据分区的拆分方法只是一种示意性说明。具体实施时,根据具体情况和处理要求,还可以采用其他合适的拆分方法对列表数据进行数据分区的拆分。对此,本说明书不作限定。
在本实施例中,为了能够适于后续进行诸如插入行数据、删除行数据、修改数据等写入类处理,提高针对列表数据的写入类处理的处理效率,可以先根据完整的、没有被拆分的列表数据生成第一数据,其中,第一数据具体可以是一种以行为单位编写的数据。同时,为了进一步适宜于写入类处理,还可以根据预设的存储规则,将第一数据以适于写入类处理的存储方式进行存储。
同时,为了能够适于后续进行诸如数据查询等读取类处理,提高针对列表数据的读取类处理的处理效率,可以再根据上述按列拆分得到的多个分区数据生成对应的多个第二数据,其中,由于上述多个第二数据基于多个分区数据生成的,因此多个第二数据中的各个第二数据也分别包含有相同的特征数据列。同时,为了进一步适宜于读取类处理,还可以根据预设的存储规则,将第二数据以适于读取类处理的存储方式进行存储。
在本实施例中,上述预设的存储规则具体可以是一种LSM-Tree结构的存储规则。其中,上述LSM-Tree结构具体可以理解为一种数据库中的数据存储结构。当然,需要说明的是,具体实施时根据所采用的数据存储结构的类型,也可以选择使用其他对应的规则作为上述存储规则。对此,本说明书不作限定。
在本实施例中,在所使用的预设的存储规则为LSM-Tree结构的存储规则的情况下,具体实施时,可以根据上述LSM-Tree结构的存储规则,将第一数据存储于数据结构中适于写入处理的MemTable(LSM-Tree结构中的一种存储结构)中,将第二数据存储于数据结构中适于读取类处理的SSTable(LSM-Tree结构中的另一种存储结构)中。当然,上述所列举的存储方式只是一种示意性说明。具体实施时,根据具体情况也可以采用其他合适的存储方式分别存储上述两种不同类型的数据。对此,本说明书不作限定。
在本实施例中,上述与所述列表数据相关的数据处理具体可以是一种针对列表数据的修改处理,例如:向列表数据中插入行数据的处理、向列表数据中插入列数据的处理、删除列表数据中的行数据的处理、删除列表数据中的列数据的处理等等。其中,上述所列举的修改处理为写入类处理。上述与所述列表数据相关的数据处理具体还可以是一种针对列表数据的查询处理,例如:查询列表数据中的行数据的处理、查询列表数据中的列数据的处理、查询列表数据中某行某列位置处的目标数据的处理等等。其中,上述所列举的查询处理为读取类处理。
在本实施例中,在按照上述方式得到并存储第一数据和第二数据后,可以利用上述第一数据和第二数据表征列表数据;进而可以根据所要求的进行的与所述列表数据相关的数据处理的处理类型(包括:读取类处理和写入类处理),综合利用两种数据的对于不同处理类型的处理优势,选择合适的使用方式,利用上述第一数据和第二数据来高效地进行与列表数据相关的数据处理。
在本实施例中,具体的,在与所述列表数据相关的数据处理为写入类处理的情况下,可以主要利用适用于写入类处理的第一数据进行与所述列表数据相关的数据处理。在与所述列表数据相关的数据处理为读取类处理的情况下,可以主要利用适用于读取类处理的第二数据,参考第一数据,共同进行与所述列表数据相关的数据处理。
由上可见,本说明书实施例提供的列表数据的处理方法,由于通过先根据完整的列表数据生成适于写入类处理的第一数据,根据按列拆分出的多个分区数据生成适于读取类处理的多个第二数据,再按照对应的存储方式分别对上述两种数据进行存储,进而可以综合上述两种数据在不同类型的数据处理上的处理优势,进行具体的数据处理,从而解决了现有方法中存在的无法同时兼顾针对列表数据的修改、查询等多种不同种类处理的处理效率的技术问题,达到既能高效地完成针对列表数据的诸如修改等写入类处理,又能高效地完成针对列表数据的诸如查询等读取类处理,提高了用户体验。
在一个实施例中,所述预设的存储规则具体可以包括基于LSM-Tree结构的存储规则等。当然,需要说明的是,上述所列举的预设的存储规则只是一种示意性说明。具体实施时,根据具体情况,以及所使用的数据存储结构,还可以选择其他合适的存储规则作为上述预设的存储规则。对此,本说明书不作限定。
在一个实施例中,在所述预设的存储规则包括基于LSM-Tree结构的存储规则的情况下,根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据,具体实施时,可以包括以下内容:将所述第一数据存储于MemTable中,将所述多个第二数据分别存储于对应的SSTable中。
在本实施例中,上述MemTable具体可以理解为LSM-Tree结构中的一种适用于进行写入类处理的存储结构,上述SSTable具体可以理解为LSM-Tree结构中的一种适用于进行读取类处理的存储结构。
需要说明的是,上述所列举的第一数据和第二数据的存储方式只是一种示意性说明。具体实施时,根据具体情况,以及所采用的具体的预设的存储规则,还可以采用其他合适的存储方式来分别存储第一数据和第二数据。对此,本说明书不作限定。
在一个实施例中,上述根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理,具体实施时,可以包括以下内容:接收针对所述列表数据的修改请求;响应并根据所述修改请求,修改所述第一数据,得到修改后的第一数据;按照预设的时间间隔,根据所述修改后的第一数据,更新所述多个第二数据。
在本实施例中,上述针对所述列表数据的修改请求具体可以理解为一种对列表数据所包含的行数据、列数据或者某行某列位置处的数据进行插入、删除、更改等处理的请求数据。具体的,上述修改请求可以包括以下至少之一:向列表数据中插入行数据请求、向列表数据中插入列数据请求、删除列表数据中的行数据请求、删除列表数据中的列数据请求等。当然,需要说明的是,上述所列举的修改请求只是为了更好地说明本说明书实施例。具体实施时,根据具体情况还可以引入除上述所列举的类型的数据请求外其他类型的数据请求作为上述修改请求。对此,本说明书不作限定。
在本实施例中,需要说明的是,上述修改请求所请求的与所述列表数据相关的数据处理可以归类为一种针对列表数据的写入类处理。为了提高针对该类型处理的处理效率,具体实施时,可以响应并根据所述修改请求对之前根据预设的存储规则存储的第一数据进行相应的修改,得到修改后的第一数据。
具体的,例如,可以根据修改请求,对存储于MemTable中的第一数据进行插入行数据、删除行数据,或者修改第i行第j列数据的参数值等修改处理,得到修改后的第一数据。
在本实施例中,上述修改后的第一数据可以理解为一种当前最新、最准确的列表数据。由于第一数据和第二数据是相对独立、分开保存的,因此,第二数据并没有自动随第一数据进行相应修改。即,第二数据中可能会存在与修改后的第一数据不一致的数据。同时,也为了兼顾处理效率,减少数据处理量,服务器可以不选择实时根据修改后的第一数据来更新第二数据,而可以按照预设的时间间隔,每隔预设的时间间隔,根据修改后的第一数据来更新多个第二数据,使得第二数据与修改后的第一数据所包含的数据一致。其中,上述预设的时间间隔具体可以根据精度要求,以及服务器的处理性能灵活设置。例如,可以设为0.25S,即每隔0.25秒根据修改后的第一数据来更新第二数据等。对此,本说明书不作限定。
当然,还需要说明的是,在服务器性能允许的情况,也可以实时地根据修改后的第一数据来更新多个第二数据。
在本实施例中,上述按照预设的时间间隔,根据所述修改后的第一数据,更新所述多个第二数据,具体实施时,可以包括以下内容:按照预设的时间间隔,根据所述修改后的第一数据,从所述多个第二数据中确定出待更新的第二数据;根据所述修改后的第一数据、所述修改后的第一数据所包含的特征数据列、所述待更新的第二数据所包含的特征数据列,对所述待更新的第二数据进行对应更新。
在本实施例中,为了进一步提高更新过程中的处理效率,可以先根据修改后的第一数据确定第一数据中发生修改的数据列;再根据上述发生修改的数据列,从按照预设的存储规则存储的多个第二数据中筛选出包含有发生修改的数据列的第二数据作为待更新的第二数据。进而可以根据修改后的第一数据所包含的特征数据列,以及待更新的第二数据所包含的特征数据列建立修改后的第一数据和待更新的第二数据中数据的关联对应关系,再基于上述关联对应关系,利用修改后的第一数据对待更新的第二数据中对应位置处的数据进行相应的修改和更新,从而完成了对第二数据的更新。其中,上述多个第二数据中除待更新的第二数据以外的其他第二数据由于所包含的数据列在修改后的第一数据中没有发生改变,因此,可以对这些第二数据不作修改,只将原存储的待更新的第二数据替换为更新后的数据。通过上说处理,可以高效地完成对多个第二数据的更新,使得更新后的第二数据与修改后的第一数据一致。
在一个实施例中,所述修改请求具体可以包括以下至少之一:向列表数据中插入行数据请求、向列表数据中插入列数据请求、删除列表数据中的行数据请求、删除列表数据中的列数据请求等等。
在一个实施例中,上述按照预设的时间间隔,根据所述修改后的第一数据,更新所述多个第二数据,具体实施时,可以包括以下内容:按照预设的时间间隔,根据所述修改后的第一数据,从所述多个第二数据中确定出待更新的第二数据;根据所述修改后的第一数据、所述修改后的第一数据所包含的特征数据列、所述待更新的第二数据所包含的特征数据列,对所述待更新的第二数据进行对应更新。
在一个实施例中,上述根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理,具体实施时,还可以包括以下内容:接收针对所述列表数据的查询请求;响应并根据所述查询请求,利用所述第一数据和所述多个第二数据进行预设处理,得到处理后的第二数据;根据所述处理后的第二数据,获取目标数据,其中,所述目标数据为所述查询请求所请求查询的数据。
在本实施例中,上述针对所述列表数据的查询请求具体可以理解为一种对列表数据所包含的行数据、列数据或者某行某列位置处的数据进行查询等处理的请求数据。在本说明书实施例中,仅以所要查询的为某行某列位置处的目标数据为例,说明具体如何利用第一数据和第二数据进行针对列表数据的查询处理。对于其他类型列表数据的查询,可以参照针对目标数据的查询。本说明书不作赘述。
在本实施例中,需要说明的是,上述查询请求所请求的与所述列表数据相关的数据处理可以归类为一种针对列表数据的读取类处理。为了提高针对该类型处理的处理效率,具体实施时,可以响应并根据所述查询请求,主要针对之前根据预设的存储规则存储的第二数据进行相应的查询处理,再具体查询之前,又考虑到所存储的第二数据不是实时更新的,因此,可以先结合第一数据,通过预设处理,得到较为准确的处理后的第二数据,再针对处理后的第二数据进行相关的查询处理,以高效地得到所要查询的目标数据。
在本实施例中,为了进一步提高处理效率,减少工作量,具体实施时,可以先根据查询请求所定出目标数据在所述列表数据中的列信息;再根据目标数据的列信息,以列信息作为索引,从按照预设的存储规则存储的多个第二数据中筛选出包含有所述列信息所指示的列数据的第二数据作为目标数据。进一步,为了保证后续查询所基于的目标数据是最新、准确的数据,可以根据第一数据所包含的特征数据列,以及目标第二数据所包含的特征数据建立第一数据和目标第二数据中数据的关联对应关系,再以第一数据中数据为参照标准,检测第二数据中的各个数据是否相同,在检测到第二数据中存在与第一数据中不同的参数值时,可以利用第一数据中关联对应的数据的参数值来替换第二数据中的数据的参数值,从而可以完成对目标第二数据的修正处理,得到准确的处理后的目标第二数据,即处理后的第二数据。
在得到上述处理后的第二数据中,可以根据查询请求中所携带的目标数据的列信息和行信息在处理后的第二数据检索出对应位置处的数据的参数值,获取并将该参数值作为目标数据发送给客户端,以便客户端将该数据作为查询结果展示给用户。
在一个实施例中,在根据所述处理后的第二数据,获取目标数据后,所述方法具体实施时,还可以包括以下内容:发送所述目标数据。
在本实施例中,服务器在按照上述方式高效地确定出目标数据后,可以通过有线或无线的方式将该目标数据发送至客户端。客户端在获取得到上述目标数据后,可以通过客户端的显示装置将该目标数据作为查询结果展示给用户。这样用户就可以方便高效地得到所要查询的数据信息了。
在一个实施例中,上述响应并根据所述查询请求,利用所述第一数据和所述多个第二数据进行预设处理,得到处理后的第二数据,具体实施时,可以包括以下内容:根据所述查询请求,确定所述目标数据在所述列表数据中的列信息;根据所述目标数据的列信息,从所述多个第二数据中确定出目标第二数据;根据所述第一数据、所述第一数据所包含的特征数据列、所述目标第二数据所包含的特征数据列,对所述目标第二数据进行修正处理,得到处理后的第二数据。
由上可见,本说明书实施例提供的列表数据的处理方法,由于通过先根据完整的列表数据生成适于写入类处理的第一数据,根据按列拆分出的多个分区数据生成适于读取类处理的多个第二数据,再按照对应的存储方式分别对上述两种数据进行存储,进而可以综合上述两种数据在不同类型的数据处理上的处理优势,进行具体的数据处理,从而解决了现有方法中存在的无法同时兼顾针对列表数据的修改、查询等多种不同种类处理的处理效率的技术问题,达到既能高效地完成针对列表数据的诸如修改等写入类处理,又能高效地完成针对列表数据的诸如查询等读取类处理,提高了用户体验;还通过根据基于LSM-Tree结构的存储规则将第一数据和第二数据分别存储于对应的MemTable中和SSTable中,达到进一步提高数据处理效率,减少用户等待时间的技术效果。
本说明书实施例还提供一种服务器,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器具体实施时可以根据指令执行以下步骤:获取列表数据;按列将所述列表数据拆分为多个数据分区;根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据,并根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列;根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理。
为了能够更加准确地完成上述指令,参阅图6所示,本说明书实施例还提供了另一种具体的服务器,其中,所述服务器包括网络通信端口601、处理器602以及存储器603,上述结构通过内部线缆相连,以便各个结构可以进行具体的数据交互。
其中,所述网络通信端口601,具体可以用于获取列表数据。
所述处理器602,具体可以用于按列将所述列表数据拆分为多个数据分区;根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据,并根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列;根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理。
所述存储器603,具体可以用于存储处理器602所基于的相应的指令程序。
在本实施例中,所述网络通信端口601可以是与不同的通信协议进行绑定,从而可以发送或接收不同数据的虚拟端口。例如,所述网络通信端口可以是负责进行web数据通信的80号端口,也可以是负责进行FTP数据通信的21号端口,还可以是负责进行邮件数据通信的25号端口。此外,所述网络通信端口还可以是实体的通信接口或者通信芯片。例如,其可以为无线移动网络通信芯片,如GSM、CDMA等;其还可以为Wifi芯片;其还可以为蓝牙芯片。
在本实施例中,所述处理器602可以按任何适当的方式实现。例如,处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。本说明书并不作限定。
在本实施例中,所述存储器603可以包括多个层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。
本说明书实施例还提供了一种基于上述列表数据的处理方法的计算机存储介质,所述计算机存储介质存储有计算机程序指令,在所述计算机程序指令被执行时实现:获取列表数据;按列将所述列表数据拆分为多个数据分区;根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据,并根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列;根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理。
在本实施例中,上述存储介质包括但不限于随机存取存储器(Random AccessMemory,RAM)、只读存储器(Read-Only Memory,ROM)、缓存(Cache)、硬盘(Hard DiskDrive,HDD)或者存储卡(Memory Card)。所述存储器可以用于存储计算机程序指令。网络通信单元可以是依照通信协议规定的标准设置的,用于进行网络连接通信的接口。
在本实施例中,该计算机存储介质存储的程序指令具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
参阅图7所示,在软件层面上,本说明书实施例还提供了一种XX装置,该装置具体可以包括以下的结构模块:
获取模块701,具体可以用于获取列表数据;
拆分模块702,具体可以用于按列将所述列表数据拆分为多个数据分区;
生成模块703,具体可以用于根据所述列表数据生成第一数据,根据所述多个数据分区生成对应的多个第二数据,并根据预设的存储规则,分别以对应的存储方式存储所述第一数据和所述多个第二数据;其中,所述第一数据和所述多个第二数据分别包含有相同的特征数据列;
处理模块704,具体可以用于根据所述第一数据和所述多个第二数据,进行与所述列表数据相关的数据处理。
在一个实施例中,所述预设的存储规则具体可以包括基于LSM-Tree结构的存储规则等待。
在一个实施例中,在所述预设的存储规则包括基于LSM-Tree结构的存储规则的情况下,所述生成模块703具体可以用于将所述第一数据存储于MemTable中,将所述多个第二数据分别存储于对应的SSTable中。
在一个实施例中,所述处理模块704具体可以包括以下结构单元:
第一接收单元,具体可以用于接收针对所述列表数据的修改请求;
修改单元,具体可以用于响应并根据所述修改请求,修改所述第一数据,得到修改后的第一数据;
更新单元,具体可以用于按照预设的时间间隔,根据所述修改后的第一数据,更新所述多个第二数据。
在一个实施例中,所述修改请求具体可以包括以下至少之一:向列表数据中插入行数据请求、向列表数据中插入列数据请求、删除列表数据中的行数据请求、删除列表数据中的列数据请求等等。
在一个实施例中,所述更新单元具体可以包括以下结构子单元:
第一确定子单元,具体可以用于按照预设的时间间隔,根据所述修改后的第一数据,从所述多个第二数据中确定出待更新的第二数据;
更新子单元,具体可以用于根据所述修改后的第一数据、所述修改后的第一数据所包含的特征数据列、所述待更新的第二数据所包含的特征数据列,对所述待更新的第二数据进行对应更新。
在一个实施例中,所述处理模块704具体可以包括以下结构单元:
第二接收单元,具体可以用于接收针对所述列表数据的查询请求;
处理单元,具体可以用于响应并根据所述查询请求,利用所述第一数据和所述多个第二数据进行预设处理,得到处理后的第二数据;
获取单元,具体可以用于根据所述处理后的第二数据,获取目标数据,其中,所述目标数据为所述查询请求所请求查询的数据。
在一个实施例中,所述处理模块704具体还可以包括发送单元,具体可以用于发送所述目标数据。
在一个实施例中,所述处理单元,具体可以包括以下结构子单元:
第二确定子单元,具体可以用于根据所述查询请求,确定所述目标数据在所述列表数据中的列信息;
第三确定子单元,具体可以用于根据所述目标数据的列信息,从所述多个第二数据中确定出目标第二数据;
修正处理子单元,具体可以用于根据所述第一数据、所述第一数据所包含的特征数据列、所述目标第二数据所包含的特征数据列,对所述目标第二数据进行修正处理,得到处理后的第二数据。
需要说明的是,上述实施例阐明的单元、装置或模块等,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
由上可见,本说明书实施例提供的列表数据的处理装置,由于通过生成模块先根据完整的列表数据生成适于写入类处理的第一数据,根据按列拆分出的多个分区数据生成适于读取类处理的多个第二数据,再按照对应的存储方式分别对上述两种数据进行存储,进而可以通过处理模块综合上述两种数据在不同类型的数据处理上的处理优势,进行具体的数据处理,从而解决了现有方法中存在的无法同时兼顾针对列表数据的修改、查询等多种不同种类处理的处理效率的技术问题,达到既能高效地完成针对列表数据的诸如修改等写入类处理,又能高效地完成针对列表数据的诸如查询等读取类处理,提高了用户体验。
虽然本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施例的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。