CN110874358B - 多属性列的存储、检索方法和装置以及电子设备 - Google Patents
多属性列的存储、检索方法和装置以及电子设备 Download PDFInfo
- Publication number
- CN110874358B CN110874358B CN201811004784.XA CN201811004784A CN110874358B CN 110874358 B CN110874358 B CN 110874358B CN 201811004784 A CN201811004784 A CN 201811004784A CN 110874358 B CN110874358 B CN 110874358B
- Authority
- CN
- China
- Prior art keywords
- attribute
- column
- sub
- data
- columns
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种多属性列的存储、检索方法和装置以及电子设备。该存储方法包括:将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成;将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列;为每个所述子列建立索引;存储所述子列。本发明实施例将多属性列中的属性及属性值按列组成子列,通过为各子列建立索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,并且针对属性稀疏的情况,能够提高存储空间的利用率,避免存储资源浪费。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种多属性列的存储、检索方法和装置以及电子设备。
背景技术
在面向列式存储(Column Store)中,当某一列数据具有多个不同属性的属性值(例如,某个学生的成绩包括:数学90、语文80、英语90等,其中,数学、语文、英语为成绩列的不同属性,其对应的属性值分别为90、80、90)时,则将该列定义为多属性列。
在现有技术中,针对多属性列,一般有两种存储方式:第一种存储方式是,将多属性列中的所有数据作为一列进行存储,这种存储方式在存储数据时比较灵活,也能够更好地利用存储空间;第二种存储方式是,将多属性列中属于同一个属性的数据(属性值)单独存储为一列,这种存储方式在数据检索时较为方便。
发明人在实现本发明的过程中,发现现有技术至少存在如下问题:若按照第一种存储方式进行存储,在对多属性列进行检索时,需要扫描整个列的所有属性记录,从而使得检索时间增大,降低了检索效率;而对于第二种存储方式,在存储方面仅适用于多属性列中的属性数目(即,多属性列的列数目)固定的情形,如果不断变化的表数据中某多属性列中的属性数目不固定,则无法预先设置列的存储结构,从而无法存储数据,另一方面,如果多属性列中的某个或某些属性比较稀疏(即,该属性所对应的属性值的个数较少),则,单独为该属性设置的存储空间的利用率较低,从而造成了存储资源浪费。
发明内容
本发明实施例提供一种多属性列的存储、检索方法和装置以及电子设备,以解决现有技术中多属性列的存储结构固定、存储空间利用率低以及检索效率低的缺陷。
为达到上述目的,本发明实施例提供了一种多属性列的存储方法,包括:
将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成;
将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
为每个所述子列建立索引;
存储所述子列。
本发明实施例还提供了一种针对上述存储方法所存储的多属性列的检索方法,包括:
读取所述多属性列中各子列的索引;
在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识;
根据获取到的所述行标识,读取所述行标识所标识的数据。
本发明实施例还提供了一种多属性列的存储装置,包括:
排序模块,用于将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成;
子列形成模块,用于将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
索引建立模块,用于为每个所述子列建立索引;
存储模块,用于存储所述子列。
本发明实施例还提供了一种针对上述存储装置所存储的多属性列的检索装置,包括:
索引读取模块,用于读取所述多属性列中各子列的索引;
行标识获取模块,用于在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识;
数据读取模块,用于根据获取到的所述行标识,读取所述行标识所标识的数据。
本发明实施例还提供了一种电子设备,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,以用于:
将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成;
将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
为每个所述子列建立索引;
存储所述子列。
本发明实施例还提供了一种电子设备,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,以用于:
读取多属性列中各子列的索引;
在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识;
根据获取到的所述行标识,读取所述行标识所标识的数据。
本发明实施例还提供了一种数据存储方法,包括:
预设含有多属性列的表;
在数据写入时,根据所述表的定义,将多属性及对应的属性值组成字符串写入所述预设表;
根据所述预设表中存储的所述字符串,为所述字符串的多属性列的每个子列,分别建立索引。
本发明实施例提供的多属性列的存储、检索方法和装置以及电子设备,将多属性列中的属性及属性值按列组成子列,通过为各子列建立索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例提供的业务系统的系统框图;
图2为本发明提供的多属性列的存储方法一个实施例的流程图;
图3a为本发明提供的多属性列的存储方法另一个实施例的流程图;
图3b为本发明提供的数据存储方法实施例的流程图;
图4为本发明提供的多属性列的检索方法一个实施例的流程图;
图5为本发明提供的多属性列的检索方法另一个实施例的流程图;
图6为本发明提供的多属性列的存储装置一个实施例的结构示意图;
图7为本发明提供的多属性列的存储装置另一个实施例的结构示意图;
图8为本发明提供的多属性列的检索装置一个实施例的结构示意图;
图9为本发明提供的多属性列的检索装置另一个实施例的结构示意图;
图10为本发明提供的电子设备一个实施例的结构示意图;
图11为本发明提供的电子设备另一个实施例的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
针对现有技术中,将多属性列中属于同一个属性的数据(属性值)单独存储为一列的存储方式中,多属性列的存储结构固定、无法扩展,当某个或某些属性比较稀疏(该属性所对应的属性值的个数较少)时,存储空间利用率低的缺陷;以及将多属性列中的所有数据作为一列进行存储的方式,检索效率低的缺陷。本申请提出了一种多属性列的存储方案,其主要原理是:针对一个多属性列,将一次写入(对应于一个insert指令)的各属性及其对应的属性值顺序排成一行(例如,以“属性1,属性值1,属性2,属性值2,…”的方式排成一行,组成多个属性及属性值由分隔符分隔的一个字符串);针对多属性列中的多行数据(通过多次insert指令写入),按列组成多个子列,这些子列中,包括由属性组成的属性子列和由相应的属性值组成的属性值子列;然后,为多属性列中的每个子列建立索引,并将各子列进行存储(例如,可以将各子列按列进行存储)。举例说明,假设某包含多属性列的数据表如下表1所示,在该表中,字段tags所标识的列为多属性列,其中包括属性X、Y、Z和W,及相应的属性值。
表1
采用本发明的方案,首先,将一次写入的各属性及其对应的属性值排成一行,则针对上表所提供的例子,得到3行数据,分别为:
1,HZ,X,80,Y,70;
2,BJ,X,50,Z,90,W,60;
3,SH,X,90。
然后,针对多属性列中的3行数据,按列组成多个子列,这些子列中,包括由属性(X、Y、Z和W)组成的属性子列和由相应的属性值(80、70、50等)组成的属性值子列。具体参见下述表2。
表2
如表2所示,各子列中的数据分别为:
子列0:X,X,X;
子列1:80,50,90;
子列2:Y,Z;
子列3:70,90;
子列4:W;
子列5:60。
然后,为每个子列单独建立索引(在本示例中,采用的是倒排索引),并将各子列按列进行存储。建立的索引具体可以如下所示:
子列0--X:1,2,3
子列1--80:1
50:2
90:3
子列2--Y:1
Z:2
子列3--70:1
90:2
子列4--W:2
子列5--60:2
当针对上述多属性列进行检索时,假设检索条件为:查找X的取值大于80的city。则在属性子列及对应的属性值子列的索引中获取符合条件的行标识(rowId,在本示例中为,user_id),也就是说,查找在子列0中数据为X且在子列1(与子列0对应)中数据>80的rowId,并在子列2和子列3(与子列2对应)、子列4和子列5(与子列4对应)中进行同样的查找操作,最终得到符合条件的rowId为1和3。然后根据rowId获取city的值,即,HZ和SH。
通过上述存储方式存储的多属性列,能够克服现有技术的缺陷。与第一种存储方式相比,在数据检索时,极大地提高了检索效率及速度。与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加;由于在同一个子列中可以存储多个不同的属性(如上述示例中,子列2中存储了属性Y和Z),因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间利用率,避免了存储资源浪费。
本发明实施例提供的方法可应用于任何具有数据处理功能的业务系统。图1为本发明实施例提供的业务系统的系统框图,图1所示的结构仅仅是本发明的技术方案可以应用的业务系统的示例之一。如图1所示,业务系统中包括存储装置。该存储装置包括:排序模块、子列形成模块、索引建立模块和存储模块,可以用来执行下述图2和图3a所示的处理流程。在该业务系统中,首先,将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,其中,每个数据对由一个属性及其对应的属性值组成;然后,将多属性列中至少一次写入的至少一行数据对,按列组成数个子列,这些子列中包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列;最后,为每个子列建立索引,并将各子列进行存储。另一方面,该业务系统中还可包括检索装置,以对上述存储装置所存储的多属性列进行检索。该检索装置包括:索引读取模块、行标识获取模块和数据读取模块,可以用来执行下述图4和图5所示的处理流程。在该业务系统进行检索时,首先,读取多属性列中各子列的索引;然后,在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识;最后,根据获取到的行标识,读取该行标识所标识的数据。该业务系统能够克服现有技术的缺陷,提高数据检索效率及速度;尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
上述实施例是对本发明实施例的技术原理和示例性的应用框架的说明,下面通过多个实施例来进一步对本发明实施例具体技术方案进行详细描述。
实施例一
图2为本发明提供的多属性列的存储方法一个实施例的流程图,该方法的执行主体可以为上述业务系统,也可以为具有数据处理功能的各种服务器设备,也可以为集成在这些服务器设备上的装置或芯片。如图2所示,该多属性列的存储方法包括如下步骤:
S201,将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行。
在本发明实施例中,每个数据对由一个属性及其对应的属性值组成。例如,在上述表1所示的数据表中,多属性列tags中,insert指令第一次写入的数据对包括:(X,80)和(Y,70);第二次写入的数据对包括:(X,50)、(Z,90)和(W,60);第三次写入的数据对为:(X,90)。分别将这些数据对按写入顺序排成一行,如表2所示。
S202,将多属性列中至少一次写入的至少一行数据对,按列组成数个子列。
在本发明实施例中,多属性列中的子列包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列。例如,在表1所示的示例中,子列0、子列2和子列4为属性子列,子列1、子列3和子列5为属性值子列。
S203,为每个子列建立索引。
S204,存储子列。
在对多属性列中的数据进行操作,形成子列后,为每个子列建立索引,以用于针对该多属性列的数据检索,并将该多属性列的各子列进行存储(例如,可以将各子列按列进行存储)。
本发明实施例提供的多属性列的存储方法,将多属性列中的属性及属性值按列组成子列,通过为各子列建立索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
实施例二
图3a为本发明提供的多属性列的存储方法另一个实施例的流程图。如图3a所示,在上述图2所示实施例的基础上,本实施例提供的多属性列的存储方法还可以包括以下步骤:
S301,将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行。
S302,将多属性列中至少一次写入的至少一行数据对,按列组成数个子列。
在本发明实施例中,步骤S301至S302与上述图2所示实施例中的步骤S201至S202相同,参见上述描述,在此不再赘述。
S303,将子列中的数据实时存储于缓冲器。
S304,当存入缓冲器的数据的数据量达到预设阈值时,读取存入缓冲器的数据,并为每个子列建立索引。
在本发明实施例中,可以先将各子列中的数据存储于缓冲器(Buffer),当存入缓冲器的数据达到一定量(例如,达到二十万条记录数)时,再读取存入缓冲器的数据,以建立索引。当然,也可以设置时间阈值,定时读取存入缓冲器的数据,并为每个子列建立索引。
具体地,在为每个子列建立索引时,可以建立子列中的数据与行标识(rowId)的对应关系,形成倒排索引,以提高检索性能。在这里,上述子列中的数据为属性或属性值。
另外,在本发明的实施例中,如果数据表中除了多属性列还包含其它普通列(例如,表1中所示的city列),也可以对普通列建立索引,以用于数据检索。
S305,将子列中的数据,以数据块的形式进行存储。
在本发明实施例中,子列中的数据可以以数据块(block)的形式存储。例如,对于每个子列中的数据,可以按固定行数的block来切分,默认为32760行,超过这个行数后,将新的数据写入至下一个block中,并且将上一个block持久化至磁盘中。另外,对于字符串这种不固定的类型值,如果某一行的值超过一定大小,则将其写至磁盘中,而block上只记录其在磁盘上的偏移位置。
本发明实施例提供的多属性列的存储方法,将多属性列中的属性及属性值按列组成子列,通过为各子列建立倒排索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
实施例三
图3b为本发明提供的数据存储方法实施例的流程图。如图3b所示,本发明实施例提出的数据存储方法可以包括以下步骤:
S311,预设含有多属性列的表。
S312,在数据写入时,根据表的定义,将多属性及对应的属性值组成字符串写入预设表。
S313,根据预设表中存储的字符串,为该字符串的多属性列的每个子列,分别建立索引。
在本发明实施例中,可以预先定义一个含有多属性列的表。然后,在数据写入时,向系统发送Insert语句,根据表定义时的分隔符将多个属性及对应的属性值组合成一个字符串,并写入预设的表中。然后,根据预设表中存储的字符串,为多属性列的各子列分别建立索引。
本发明实施例提供的数据存储方法,将多属性列中的属性及属性值按列组成子列,通过为各子列建立倒排索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
实施例四
图4为本发明提供的多属性列的检索方法一个实施例的流程图,该方法的执行主体可以为上述业务系统,也可以为具有数据处理功能的各种服务器设备,也可以为集成在这些服务器设备上的装置或芯片。如图4所示,针对上述图2或图3a所示实施例所提供的存储方法所存储的多属性列,本发明实施例提出一种多属性列的检索方法包括以下步骤:
S401,读取多属性列中各子列的索引。
在本发明实施例中,当针对多属性列进行检索时,首先,读取多属性列中各子列的索引。在该多属性列中,各子列包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列。例如,在表1所示的示例中,子列0、子列2和子列4为属性子列,子列1、子列3和子列5为属性值子列。
S402,在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识。
在本发明实施例中,需要在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识。具体地,多属性列中的属性组成的属性子列与这些属性所对应的属性值组成的属性值子列相对应。例如,在如表2所示的示例中,子列0与子列1相对应,子列2与子列3相对应,子列4与子列5相对应。假设检索条件为:查找X的取值大于80的city。则,查找在子列0中数据为X且在子列1中数据>80的行标识(rowId),并在子列2和子列3、子列4和子列5中进行同样的查找操作,最终得到符合条件的rowId为1和3。
S403,根据获取到的行标识,读取行标识所标识的数据。
最后,根据获取到的行标识,读取行标识所标识的数据。例如,如表2所示,根据rowId为1和3,获取到city的值,为HZ和SH。
本发明实施例提供的多属性列的检索方法,根据为多属性列中各子列建立的索引对该多属性列进行数据检索,能够极大地提高检索效率及速度。
实施例五
图5为本发明提供的多属性列的检索方法另一个实施例的流程图。如图5所示,在上述图4所示实施例的基础上,本实施例提供的多属性列的检索方法还可以包括以下步骤:
S501,读取多属性列中各子列的索引。
S502,在属性子列及对应的属性值子列的索引中,查找符合子条件的行标识,生成位图。
S503,将生成的位图按照各子条件的和/或关系,进行和/或操作,获取符合检索条件的行标识。
在本发明实施例中,检索条件包括数条具有和/或关系的子条件。此时,需要查找符合各子条件的行标识,并生成位图(Bitmap),然后,对各位图进行和/或操作,从而获取到符合检索条件的行标识。
S504,查找行标识所在的数据块的存储位置。
在本发明实施例中,当获取到符合检索条件的行标识后,可以查找这些行标识所在的数据块(Block)的存储位置。判断其是否存储在缓存(cache)中,如果cache中没有该数据块,则将该数据块的数据加载至缓存中,然后从缓存中获取上述行标识所标识的数据。具体地,如下述步骤S505和S506所示。
S505,若数据块存储于缓存中,从缓存中读取上述行标识所标识的数据。
S506,若数据块存储于磁盘中,从磁盘读取该数据块并将其存储于缓存中,并从缓存中读取上述行标识所标识的数据。
本发明实施例提供的多属性列的检索方法,根据为多属性列中各子列建立的索引对该多属性列进行数据检索,能够极大地提高检索效率及速度;同时,将热点的数据存储于缓存,可以加速数据的读取速度,从而更进一步提高检索效率。
实施例六
图6为本发明提供的多属性列的存储装置一个实施例的结构示意图,可用于执行如图2所示的方法步骤。如图6所示,该装置可以包括:排序模块61、子列形成模块62、索引建立模块63和存储模块64。
其中,排序模块61用于将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个数据对由一个属性及其对应的属性值组成;子列形成模块62用于将多属性列中至少一次写入的至少一行数据对,按列组成数个子列,这些子列包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列;索引建立模块63用于为每个子列建立索引;存储模块64用于存储各子列。
在本发明实施例中,每个数据对由一个属性及其对应的属性值组成。例如,在上述表1所示的数据表中,多属性列tags中,insert指令第一次写入的数据对包括:(X,80)和(Y,70)。排序模块61将这些数据对按写入顺序排成一行X,80,Y,70),如表2所示。子列形成模块62形成的子列中,包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列。例如,在表1所示的示例中,子列0、子列2和子列4为属性子列,子列1、子列3和子列5为属性值子列。在子列形成模块62形成子列后,索引建立模块63为每个子列建立索引,以用于针对该多属性列的数据检索,存储模块64将该多属性列的各子列进行存储。
本发明实施例提供的多属性列的存储装置,将多属性列中的属性及属性值按列组成子列,通过为各子列建立索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
实施例七
图7为本发明提供的多属性列的存储装置另一个实施例的结构示意图,可用于执行如图3a所示的方法步骤。如图7所示,在上述图6所示实施例的基础上,本发明实施例提供的多属性列的存储装置中,索引建立模块63可以具体用于在每个子列中,建立该子列中的数据与行标识的对应关系,形成倒排索引,以提高检索性能,其中,子列中的数据为属性或属性值。
另外,在本发明的实施例中,如果数据表中除了多属性列还包含其它普通列(例如,表1中所示的city列),索引建立模块63也可以对普通列建立索引,以用于数据检索。
本发明实施例中,存储模块64具体用于将各子列按列进行存储。
进一步地,本发明实施例提供的多属性列的存储装置还可以包括:实时存储模块71。该实时存储模块71可以用于将子列中的数据实时存储于缓冲器。
此时,索引建立模块63可以包括:第一建立单元631,该第一建立单元631可以用于当存入缓冲器的数据的数据量达到预设阈值时,读取存入缓冲器的数据,并为每个子列建立索引。
更进一步地,索引建立模块63还可以包括:第二建立单元632,该第二建立单元632可以用于定时读取存入缓冲器的数据,并为每个子列建立索引。
在本发明实施例中,实时存储模块71可以先将各子列中的数据存储于缓冲器(Buffer),当存入缓冲器的数据达到一定量(例如,达到二十万条记录数)时,第一建立单元631再读取存入缓冲器的数据,以建立索引。当然,也可以设置时间阈值,由第二建立单元632定时读取存入缓冲器的数据,并为每个子列建立索引。
另外,本发明实施例中的存储模块64可以具体用于将子列中的数据,以数据块的形式进行存储。
在本发明实施例中,存储模块64可以将子列中的数据可以以数据块(block)的形式存储。例如,对于每个子列中的数据,可以按固定行数的block来切分,默认为32760行,超过这个行数后,将新的数据写入至下一个block中,并且将上一个block持久化至磁盘中。另外,对于字符串这种不固定的类型值,如果某一行的值超过一定大小,则将其写至磁盘中,而block上只记录其在磁盘上的偏移位置。
本发明实施例提供的多属性列的存储装置,将多属性列中的属性及属性值按列组成子列,通过为各子列建立倒排索引并存储,能够克服现有技术的缺陷,与第一种存储方式相比,便于在数据检索时提高检索效率及速度;与第二种存储方式相比,尤其适用于属性数目不固定的多属性列,多属性列的属性可以任意添加,并且由于在同一个子列中可以存储多个不同的属性,因此,能够克服属性稀疏造成存储空间利用率低的缺陷,提高了存储空间的利用率,避免了存储资源浪费。
实施例八
图8为本发明提供的多属性列的检索装置一个实施例的结构示意图,可用于执行如图4所示的方法步骤。如图8所示,该装置可以包括:索引读取模块81、行标识获取模块82和数据读取模块83。
其中,索引读取模块81用于读取多属性列中各子列的索引;行标识获取模块82用于在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识;数据读取模块83用于根据获取到的行标识,读取该行标识所标识的数据。
在本发明实施例中,当针对多属性列进行检索时,首先,索引读取模块81读取多属性列中各子列的索引。在该多属性列中,各子列包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列。例如,在表1所示的示例中,子列0、子列2和子列4为属性子列,子列1、子列3和子列5为属性值子列。然后,行标识获取模块82在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识。具体地,多属性列中的属性组成的属性子列与这些属性所对应的属性值组成的属性值子列相对应。例如,在如表2所示的示例中,子列0与子列1相对应,子列2与子列3相对应,子列4与子列5相对应。假设检索条件为:查找X的取值大于80的city。则,行标识获取模块82查找在子列0中数据为X且在子列1中数据>80的行标识(rowId),并在子列2和子列3、子列4和子列5中进行同样的查找操作,最终得到符合条件的rowId为1和3。最后,数据读取模块83根据获取到的行标识,读取行标识所标识的数据。例如,如表2所示,数据读取模块83根据rowId为1和3,获取到city的值,为HZ和SH。
本发明实施例提供的多属性列的检索装置,根据为多属性列中各子列建立的索引对该多属性列进行数据检索,能够极大地提高检索效率及速度。
实施例九
图9为本发明提供的多属性列的检索装置另一个实施例的结构示意图,可用于执行如图5所示的方法步骤。如图9所示,在该装置中,行标识获取模块82可以包括:位图生成单元821和操作单元822。
其中,位图生成单元821可以用于在属性子列及对应的属性值子列的索引中,查找符合子条件的行标识,生成位图;操作单元822可以用于将位图生成单元821生成的位图按照各子条件的和/或关系,进行和/或操作,获取符合检索条件的行标识。
在本发明实施例中,检索条件包括数条具有和/或关系的子条件。此时,位图生成单元821需要查找符合各子条件的行标识,并生成位图(Bitmap),然后,由操作单元822对各位图进行和/或操作,从而获取到符合检索条件的行标识。
进一步地,数据读取模块83可以包括:位置查找单元831、第一读取单元832和第二读取单元833。
其中,位置查找单元831可以用于查找行标识所在的数据块的存储位置;第一读取单元832可以用于当数据块存储于缓存中时,从缓存中读取上述行标识所标识的数据;第二读取单元833可以用于当数据块存储于磁盘中时,从磁盘读取数据块并将其存储于缓存中,并从缓存中读取上述行标识所标识的数据。
本发明实施例提供的多属性列的检索装置,根据为多属性列中各子列建立的索引对该多属性列进行数据检索,能够极大地提高检索效率及速度;同时,将热点的数据存储于缓存,可以加速数据的读取速度,从而更进一步提高检索效率。
实施例十
以上描述了多属性列的存储装置的内部功能和结构,该装置可实现为一种电子设备。图10为本发明提供的电子设备一个实施例的结构示意图。如图10所示,该电子设备包括存储器101和处理器102。
存储器101,用于存储程序。除上述程序之外,存储器101还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器102,与存储器101耦合,执行存储器101所存储的程序,以用于:
将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个数据对由一个属性及其对应的属性值组成;
将多属性列中至少一次写入的至少一行数据对,按列组成数个子列,该子列包括由属性组成的属性子列和由与属性对应的属性值组成的属性值子列;
为每个子列建立索引;
存储各子列。
进一步,如图10所示,电子设备还可以包括:通信组件103、电源组件104、音频组件105、显示器106等其它组件。图10中仅示意性给出部分组件,并不意味着电子设备只包括图10所示组件。
通信组件103被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件103经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件103还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
电源组件104,为电子设备的各种组件提供电力。电源组件104可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
音频组件105被配置为输出和/或输入音频信号。例如,音频组件105包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器101或经由通信组件103发送。在一些实施例中,音频组件105还包括一个扬声器,用于输出音频信号。
显示器106包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
实施例十一
以上描述了多属性列的存储装置的内部功能和结构,该装置可实现为一种电子设备。图11为本发明提供的电子设备另一个实施例的结构示意图。如图11所示,该电子设备包括存储器111和处理器112。
存储器111,用于存储程序。除上述程序之外,存储器111还可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器111可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器112,与存储器111耦合,执行存储器111所存储的程序,以用于:
读取多属性列中各子列的索引;
在属性子列及对应的属性值子列的索引中,获取符合检索条件的行标识;
根据获取到的行标识,读取该行标识所标识的数据。
进一步,如图11所示,电子设备还可以包括:通信组件113、电源组件114、音频组件115、显示器116等其它组件。图11中仅示意性给出部分组件,并不意味着电子设备只包括图11所示组件。
通信组件113被配置为便于电子设备和其他设备之间有线或无线方式的通信。电子设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件113经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件113还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
电源组件114,为电子设备的各种组件提供电力。电源组件114可以包括电源管理系统,一个或多个电源,及其他与为电子设备生成、管理和分配电力相关联的组件。
音频组件115被配置为输出和/或输入音频信号。例如,音频组件115包括一个麦克风(MIC),当电子设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器111或经由通信组件113发送。在一些实施例中,音频组件115还包括一个扬声器,用于输出音频信号。
显示器116包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (11)
1.一种多属性列的存储方法,其特征在于,包括:
将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成,其中,所述多属性列的属性可以任意添加;
将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
为每个所述子列建立索引;
存储所述子列;
其中,所述为每个所述子列建立索引,包括:
在每个所述子列中,建立所述子列中的数据与行标识的对应关系,形成倒排索引,所述子列中的数据为所述属性或所述属性值;
其中,所述存储所述子列,包括:
将所述子列按列进行存储。
2.根据权利要求1所述的多属性列的存储方法,其特征在于,在所述为每个所述子列建立索引之前,还包括:
将所述子列中的数据实时存储于缓冲器;
所述为每个所述子列建立索引,包括:
当存入所述缓冲器的数据的数据量达到预设阈值时,读取存入所述缓冲器的数据,并为每个所述子列建立索引;或者,定时读取存入所述缓冲器的数据,并为每个所述子列建立索引。
3.一种针对权利要求1至2中任一权利要求所述的存储方法所存储的多属性列的检索方法,其特征在于,包括:
读取所述多属性列中各子列的索引;
在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识;
根据获取到的所述行标识,读取所述行标识所标识的数据。
4.根据权利要求3所述的多属性列的检索方法,其特征在于,所述检索条件包括数条具有和/或关系的子条件,所述在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识,包括:
在所述属性子列及对应的所述属性值子列的索引中,查找符合所述子条件的行标识,生成位图;
将生成的所述位图按照所述子条件的和/或关系,进行和/或操作,获取符合所述检索条件的行标识。
5.根据权利要求3或4所述的多属性列的检索方法,其特征在于,所述根据获取到的所述行标识,读取所述行标识所标识的数据,包括:
查找所述行标识所在的数据块的存储位置;
若所述数据块存储于缓存中,从所述缓存中读取所述行标识所标识的数据;
若所述数据块存储于磁盘中,从所述磁盘读取所述数据块并存储于缓存中,并从所述缓存中读取所述行标识所标识的数据。
6.一种多属性列的存储装置,其特征在于,包括:
排序模块,用于将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成,其中,所述多属性列的属性可以任意添加;
子列形成模块,用于将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
索引建立模块,用于为每个所述子列建立索引;
存储模块,用于存储所述子列;
其中,所述索引建立模块具体用于,在每个所述子列中,建立所述子列中的数据与行标识的对应关系,形成倒排索引,所述子列中的数据为所述属性或所述属性值;
其中,所述存储模块具体用于,将所述子列按列进行存储。
7.根据权利要求6所述的多属性列的存储装置,其特征在于,还包括:
实时存储模块,用于将所述子列中的数据实时存储于缓冲器;
所述索引建立模块包括:
第一建立单元,用于当存入所述缓冲器的数据的数据量达到预设阈值时,读取存入所述缓冲器的数据,并为每个所述子列建立索引;
第二建立单元,用于定时读取存入所述缓冲器的数据,并为每个所述子列建立索引。
8.一种针对权利要求6至7中任一权利要求所述的存储装置所存储的多属性列的检索装置,其特征在于,包括:
索引读取模块,用于读取所述多属性列中各子列的索引;
行标识获取模块,用于在所述属性子列及对应的所述属性值子列的索引中,获取符合检索条件的行标识;
数据读取模块,用于根据获取到的所述行标识,读取所述行标识所标识的数据。
9.根据权利要求8所述的多属性列的检索装置,其特征在于,所述检索条件包括数条具有和/或关系的子条件,所述行标识获取模块包括:
位图生成单元,用于在所述属性子列及对应的所述属性值子列的索引中,查找符合所述子条件的行标识,生成位图;
操作单元,用于将生成的所述位图按照所述子条件的和/或关系,进行和/或操作,获取符合所述检索条件的行标识。
10.根据权利要求8或9所述的多属性列的检索装置,其特征在于,所述数据读取模块包括:
位置查找单元,用于查找所述行标识所在的数据块的存储位置;
第一读取单元,用于当所述数据块存储于缓存中时,从所述缓存中读取所述行标识所标识的数据;
第二读取单元,用于当所述数据块存储于磁盘中时,从所述磁盘读取所述数据块并存储于缓存中,并从所述缓存中读取所述行标识所标识的数据。
11.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于运行所述存储器中存储的所述程序,以用于:
将多属性列中每一次写入的至少一个数据对,按写入顺序排成一行,每个所述数据对由一个属性及其对应的属性值组成,其中,所述多属性列的属性可以任意添加;
将所述多属性列中至少一次写入的至少一行数据对,按列组成数个子列,所述子列包括由所述属性组成的属性子列和由与所述属性对应的所述属性值组成的属性值子列;
为每个所述子列建立索引;
存储所述子列;
其中,所述为每个所述子列建立索引,包括:
在每个所述子列中,建立所述子列中的数据与行标识的对应关系,形成倒排索引,所述子列中的数据为所述属性或所述属性值;
其中,所述存储所述子列,包括:
将所述子列按列进行存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811004784.XA CN110874358B (zh) | 2018-08-30 | 2018-08-30 | 多属性列的存储、检索方法和装置以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811004784.XA CN110874358B (zh) | 2018-08-30 | 2018-08-30 | 多属性列的存储、检索方法和装置以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110874358A CN110874358A (zh) | 2020-03-10 |
CN110874358B true CN110874358B (zh) | 2023-05-05 |
Family
ID=69714992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811004784.XA Active CN110874358B (zh) | 2018-08-30 | 2018-08-30 | 多属性列的存储、检索方法和装置以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110874358B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112364033B (zh) * | 2021-01-13 | 2021-04-13 | 北京云真信科技有限公司 | 一种数据检索系统 |
CN114443670B (zh) * | 2022-04-07 | 2022-07-08 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN115951842A (zh) * | 2023-02-23 | 2023-04-11 | 摩尔线程智能科技(北京)有限责任公司 | 基于单路输入的数据处理装置、方法和计算机设备 |
CN116069260B (zh) * | 2023-02-23 | 2024-03-22 | 摩尔线程智能科技(北京)有限责任公司 | 数据处理装置、方法、计算机设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6374232B1 (en) * | 1996-08-29 | 2002-04-16 | Oracle Corp. | Method and mechanism for retrieving values from a database |
CN103218365A (zh) * | 2012-01-20 | 2013-07-24 | 阿里巴巴集团控股有限公司 | 一种SSTable文件数据处理方法及其系统 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110264667A1 (en) * | 2010-04-27 | 2011-10-27 | Stavros Harizopoulos | Column-oriented storage in a row-oriented database management system |
US9390115B2 (en) * | 2013-10-11 | 2016-07-12 | Oracle International Corporation | Tables with unlimited number of sparse columns and techniques for an efficient implementation |
CN106815260B (zh) * | 2015-12-01 | 2021-05-04 | 阿里巴巴集团控股有限公司 | 一种索引建立方法及设备 |
-
2018
- 2018-08-30 CN CN201811004784.XA patent/CN110874358B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6374232B1 (en) * | 1996-08-29 | 2002-04-16 | Oracle Corp. | Method and mechanism for retrieving values from a database |
CN103218365A (zh) * | 2012-01-20 | 2013-07-24 | 阿里巴巴集团控股有限公司 | 一种SSTable文件数据处理方法及其系统 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110874358A (zh) | 2020-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110874358B (zh) | 多属性列的存储、检索方法和装置以及电子设备 | |
US20100067867A1 (en) | System and method for searching video scenes | |
CN108572789B (zh) | 磁盘存储方法和装置、消息推送方法和装置及电子设备 | |
CN108255958A (zh) | 数据查询方法、装置和存储介质 | |
CN102902763B (zh) | 关联、检索信息处理数据和处理信息任务的方法及装置 | |
US20210294865A1 (en) | System and method for updating a search index | |
JP2017174161A (ja) | 情報処理装置、情報処理方法およびプログラム | |
CN106970958A (zh) | 一种流文件的查询与存储方法和装置 | |
CN105138649A (zh) | 数据的搜索方法、装置及终端 | |
CN107145538B (zh) | 表格数据查询方法、装置与系统 | |
CN108319608A (zh) | 访问日志存储查询的方法、装置及系统 | |
CN105468644B (zh) | 一种用于在数据库中进行查询的方法与设备 | |
CN112905587B (zh) | 数据库的数据管理方法、装置及电子设备 | |
CN111914020A (zh) | 数据同步方法及装置、数据查询方法及装置 | |
CN113849499A (zh) | 数据的查询方法、装置、存储介质及电子装置 | |
CN109739854A (zh) | 一种数据存储方法及装置 | |
US20240211483A1 (en) | Log data query method, electronic device, and storage medium | |
CN116662327B (zh) | 一种用于数据库的数据融合清理方法 | |
CN111858581B (zh) | 一种分页查询的方法、装置、存储介质和电子设备 | |
CN103646039A (zh) | 一种网页搜索方法及装置 | |
CN117235069A (zh) | 索引创建方法、数据查询方法、装置、设备及存储介质 | |
CN109542912B (zh) | 区间数据存储方法、装置、服务器及存储介质 | |
CN107450859B (zh) | 一种读取文件数据的方法和装置 | |
CN102915324B (zh) | 数据存储与检索装置和数据存储与检索方法 | |
CN114372071A (zh) | 一种表数据删除方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |