CN103678556B - 列式数据库处理的方法和处理设备 - Google Patents

列式数据库处理的方法和处理设备 Download PDF

Info

Publication number
CN103678556B
CN103678556B CN201310656482.1A CN201310656482A CN103678556B CN 103678556 B CN103678556 B CN 103678556B CN 201310656482 A CN201310656482 A CN 201310656482A CN 103678556 B CN103678556 B CN 103678556B
Authority
CN
China
Prior art keywords
column
query
condition
mark
bitmap
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
Application number
CN201310656482.1A
Other languages
English (en)
Other versions
CN103678556A (zh
Inventor
吴继敏
张庆
刘成华
邓勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201310656482.1A priority Critical patent/CN103678556B/zh
Publication of CN103678556A publication Critical patent/CN103678556A/zh
Priority to JP2016529436A priority patent/JP6244592B2/ja
Priority to EP14868508.4A priority patent/EP3007085A4/en
Priority to PCT/CN2014/090337 priority patent/WO2015081780A1/zh
Priority to US15/173,971 priority patent/US10303691B2/en
Application granted granted Critical
Publication of CN103678556B publication Critical patent/CN103678556B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/221Column-oriented storage; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24575Query processing with adaptation to user needs using context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2329Optimistic concurrency control using versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24557Efficient disk access during query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例提供一种列式数据库处理方法,列式数据库包含了标记列和一个以上的数据列,其中,数据列按照列存储的方式存储具体数据,标记列的每行标记位的值用于表示了与标记位处于同一行数据的有效性,方法包括:接收应用程序发送的查询请求,查询请求包含了查询条件;根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果;向应用程序发送查询结果。这样由于列式数据库是按照列式存储的,因此查询效率将会显著提升。

Description

列式数据库处理的方法和处理设备
技术领域
本发明实施例涉及数据库技术,尤其涉及一种列式数据库处理的方法和处理设备。
背景技术
列式数据库是以列相关存储架构进行数据存储的数据库,每个列的数据独立紧密存放,一行数据的不同列分别存放在不同的数据区。
列式数据库的存储分为两个区域:行区和列区。其中,列区存储原始数据;行区存储由数据操纵语言(Data Manipulation Language,DML)事务操作产生的新数据。虽然数据按列组织,但在实际要求数据是行一致的,因此在做数据修改时,涉及到不同列的修改,在这个过程中仍然需要在行区保证事务的ACID属性。
例如,列式数据库接收一个更新操作请求,其SQL语句如下:UPDATE TABLE1SET F2=10WHERE F3<20,则列式数据库将执行如下操作:
1、扫描TABLE1,记录满足F3<20条件所在的行号。
2、对该行号进行加排他锁,使之不能被其他session修改。
3、将此行号的所有字段读取出来,并将F2的值改为10,然后拼成行记录格式。
4、将该行记录格式保存到行存区,本次数据更新完成,释放该行号的排他锁。
由于列式数据库中,一些数据是存储在行区上的,因此当列式数据库接收到查询请求时,需要判断session的需要逐条判断此记录是否提交,例如:SELECT F2FROMTABLE1WHERE F3<20的步骤为:
1、扫描TABLE1列区,记录满足F3<20条件的所在的行号。
2、判断上述记录的行号是否已被修改,如果记录的行号没有被修改,则在列区读取F2的值,如果该记录的行号已经被修改,则需要到行区读取已经被修改的新记录;
3、在行区判断最新版本是否是本session修改的,是则返回最新版本,不是则返回上个已提交版本。
4、列区扫描完成之后,扫描行区部分新增数据,确定是否有满足F3<20条件,如果有,则输出F2的值。
从上述论述可知,目前的现有技术的列式数据库的事务处理必须同时涉及到行区和列区,当在列式数据库进行数据查询时,由于列式数据库有行区的存在,需要逐行扫描行区的数据,这样会导致列式数据库的查询效率降低,特别是大数据库容量情况,查询效率将下降的非常多。
发明内容
本发明实施例提供一种列式数据库处理的方法和处理设备,解决了上述现有技术中,列式数据库的事务处理必须涉及到行区的技术问题。
第一个方面,本发明提供了一种处理设备,包括:
接口模块,用于接收应用程序发送的查询请求,所述查询请求包含了对列式数据库的查询条件,并将所述查询请求发送给查询模块,其中所述数据列按照列存储的方式存储具体数据,所述列式数据库包含了标记列和一个以上的数据列,其中,标记列的每行标记位的值用于表示与所述标记位处于同一行数据的有效性;
查询模块,用于根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;并将所述查询结果发送给所述接口模块;
所述接口模块,还用于接收所述查询模块发送的查询结果,向所述应用程序发送所述查询结果。
在第一个方面的第一种可能的实现方式中,查询模块包括第一生成单元,第二生成单元和获取单元,其中,第一生成单元,用于根据查询条件,扫描查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,涉及到的数据列中满足查询条件的数据在条件位图相应行的值是有效的,涉及到的数据列中不满足查询条件的数据在条件位图相应行的值是无效的;第二生成单元,用于根据标记列和一个以上的条件位图,生成查询位图,其中,当复制的标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;获取单元,用于根据查询位图,获得满足查询条件的和标记列的标记位是有效的查询结果。
结合在第一个方面的第一种可能的实现方式中,第二种可能实现方式为:查询模块还包括确定单元,其中,确定单元,用于确定存在事务提交时标记列的待进行的修改,事务为查询请求所在的事务,在临时存储区域中存储标记列,将存储的标记列作为查询请求的私有标记列,并根据事务提交时标记列的待进行的修改,更新私有标记列,使得更新后的私有标记列的被修改的标记位的值表示了事务中当前标记位对应的数据的有效性;第二生成单元,具体用于根据更新后的私有标记列和一个以上的条件位图,生成查询位图,其中,当更新后的私有标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当更新后的私有标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;获取单元,具体用于根据查询位图,获得满足查询条件和更新后的私有标记列的标记位是有效的的查询结果。
结合在第一个方面的第一种可能的实现方式中,第三种可能的实现方式为:确定单元,还用于确定不存在事务提交时标记列的待进行的修改时,事务为查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将存储的标记列作为另一个共享标记列,并设置另一个共享标记列的版本号与查询请求的对应关系,如果已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置已存储的共享标记列的版本号与查询请求的对应关系;第二生成单元,具体用于根据共享标记列的版本号与查询请求的对应关系,在临时存储区域中确定查询请求对应的共享标记列,根据查询请求对应的共享标记列和一个以上的条件位图,生成查询位图,其中,当查询请求对应的共享的标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当查询请求对应的标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;获取单元,具体用于根据查询位图,获得满足查询条件和查询请求对应的标记列的标记位是有效的的查询结果。
第二个方面,本发明还提供了另一种处理设备,包括接口模块,修改模块,记录模块和提交模块,其中,接口模块,用于在一个事务中,接收应用程序发送的修改请求,修改请求包含了对列式数据库的修改条件,并将修改请求发送给修改模块,其中数据列按照列存储的方式存储具体数据,列式数据库包含了标记列和一个以上的数据列,其中,标记列的每行标记位的值用于表示与标记位处于同一行数据的有效性;修改模块,用于根据修改条件,对标记列和一个以上的数据列进行修改处理;记录模块,用于记录事务提交时标记列的待进行的修改;提交模块,用于提交事务时,按照记录的事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在修改处理后与标记位处于同一行的数据是否有效。
第三个方面,本发明还提供了一种列式数据库处理方法,列式数据库包含了标记列和一个以上的数据列,其中,数据列按照列存储的方式存储具体数据,标记列的每行标记位的值用于表示了与标记位处于同一行数据的有效性,方法包括:接收应用程序发送的查询请求,查询请求包含了查询条件;根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果;向应用程序发送查询结果。
在第三方面的第一种可能的实现方式中,根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果,具体包括:根据查询条件,扫描查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,涉及到的数据列中满足查询条件的数据在条件位图相应行的值是有效的,涉及到的数据列中不满足查询条件的数据在条件位图相应行的值是无效的;根据标记列和一个以上的条件位图,生成查询位图,其中,当标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和标记列的标记位是有效的查询结果。
结合第三方面的第一种可能的实现方式中,第二种可能的实现方式,在根据查询条件,扫描查询条件所涉及到的数据列之前,还包括:确定存在事务提交时标记列的待进行的修改,事务为查询请求所在的事务,在临时存储区域中存储标记列,将存储的标记列作为查询请求的私有标记列,并根据事务提交时标记列的待进行的修改,更新私有标记列,使得更新后的私有标记列的被修改的标记位的值表示了事务中当前标记位对应的数据的有效性;根据标记列和一个以上的条件位图,生成查询位图,其中,当标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和标记列的标记位是有效的的查询结果,具体为:根据更新后的私有标记列和一个以上的条件位图,生成查询位图,其中,当更新后的私有标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当更新后的私有标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和更新后的私有标记列的标记位是有效的的查询结果。
结合第三方面的第一种可能的实现方式中,第三种可能的实现方式为,在根据查询条件,扫描查询条件所涉及到的数据列之前,还包括:确定不存在事务提交时标记列的待进行的修改时,事务为查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将存储的标记列作为另一个共享标记列,并设置另一个共享标记列的版本号与查询请求的对应关系,如果已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置已存储的共享标记列的版本号与查询请求的对应关系;
根据标记列和一个以上的条件位图,生成查询位图,其中,当标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和标记列的标记位是有效的的查询结果,具体为:根据共享标记列的版本号与查询请求的对应关系,在临时存储区域中确定查询请求对应的共享标记列,根据查询请求对应的共享标记列和一个以上的条件位图,生成查询位图,其中,当查询请求对应的共享的标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当查询请求对应的标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和查询请求对应的标记列的标记位是有效的的查询结果。
第四个方面,一种列式数据库处理方法,列式数据库包含了标记列和一个以上的数据列,其中,数据列按照列存储的方式存储具体数据,标记列的每行标记位的值用于表示了与标记位处于同一行数据的有效性,方法包括:在一个事务中,接收应用程序发送的修改请求,修改请求包含了修改条件;根据修改条件,对标记列和一个以上的数据列进行修改处理,记录事务提交时标记列的待进行的修改;提交事务时,按照记录的事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在修改处理后与标记位处于同一行的数据是否有效。
第五个方面,本发明还提供了一种处理设备,包括收发器和处理器,其中,收发器用于接收应用程序发送的查询请求,查询请求包含了查询条件,并将查询请求发送给处理器,以及接收处理器发送的查询结果,其中列式数据库包含了标记列和一个以上的数据列,其中,数据列按照列存储的方式存储具体数据,标记列的每行标记位的值用于表示了与标记位处于同一行数据的有效性;处理器,用于接收收发器发送的查询请求,根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果,并将查询结果发送给收发器。
在第五方面的第一种可能的实现方式中,处理器,具体用于根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果,具体包括:根据查询条件,扫描查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,涉及到的数据列中满足查询条件的数据在条件位图相应行的值是有效的,涉及到的数据列中不满足查询条件的数据在条件位图相应行的值是无效的;根据标记列和一个以上的条件位图,生成查询位图,其中,当标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和标记列的标记位是有效的查询结果。
结合第五方面的第一种可能的实现方式中,第二种可能的实现方式,处理器,还用于在根据查询条件,扫描查询条件所涉及到的数据列之前,确定存在事务提交时标记列的待进行的修改,事务为查询请求所在的事务,在临时存储区域中存储标记列,将存储的标记列作为查询请求的私有标记列,并根据事务提交时标记列的待进行的修改,更新私有标记列,使得更新后的私有标记列的被修改的标记位的值表示了事务中当前标记位对应的数据的有效性;处理器进一步用于根据更新后的私有标记列和一个以上的条件位图,生成查询位图,其中,当更新后的私有标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当更新后的私有标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和更新后的私有标记列的标记位是有效的的查询结果。
结合第五方面的第一种可能的实现方式中,第三种可能的实现方式为,处理器,还用于在根据查询条件,扫描查询条件所涉及到的数据列之前,还包括:确定不存在事务提交时标记列的待进行的修改时,事务为查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将存储的标记列作为另一个共享标记列,并设置另一个共享标记列的版本号与查询请求的对应关系,如果已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置已存储的共享标记列的版本号与查询请求的对应关系;处理器进一步用于根据共享标记列的版本号与查询请求的对应关系,在临时存储区域中确定查询请求对应的共享标记列,根据查询请求对应的共享标记列和一个以上的条件位图,生成查询位图,其中,当查询请求对应的共享的标记列和条件位图的同一行的值均为有效值时,查询位图同一行的值是有效的,当查询请求对应的标记列和条件位图的同一行的值不全是有效值时,查询位图同一行的值是无效的;根据查询位图,获得满足查询条件和查询请求对应的标记列的标记位是有效的的查询结果。
第六个方面,一种处理设备,包括收发器和处理器,其中,收发器用于在一个事务中,接收应用程序发送的修改请求,修改请求包含了修改条件,并将修改请求发送给处理器,以及接收处理器发送的修改结果,其中列式数据库包含了标记列和一个以上的数据列,其中,数据列按照列存储的方式存储具体数据,标记列的每行标记位的值用于表示了与标记位处于同一行数据的有效性;处理器,用于接收收发器发送的修改请求,根据修改条件,对标记列和一个以上的数据列进行修改处理,记录事务提交时标记列的待进行的修改;提交事务时,按照记录的事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在修改处理后与标记位处于同一行的数据是否有效。
在本发明实施例中,在列式数据库中增加一列专门用于表示数据列各行数值的有效性的标记列,这样就可以通过标记列,可以实现所有的数据都被存储在列区,而无需一个专门的的行区存储数据修改时的数据,这样进行数据查询时,就可以完全在列区进行数据查询,而无需到行区中进行查询了,提高了数据查询的效率,特别在大数据的应用,查询效率有显著的提升。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1是根据本发明实施例的一个网络环境示意图;
图2是根据本发明实施例的另一个网络环境示意图;
图3是根据本发明实施例的另一个处理设备的示意性框图;
图4是根据本发明实施例的一个处理设备的示意性框图;
图5是根据本发明实施例的另一个处理设备的示意性框图;
图6是根据本发明实施例的另一个处理设备的结构示意性框图;
图7是根据本发明实施例的又一个处理设备的结构示意性框图;
图8是根据本发明实施例的一种列式数据库处理方法的流程图;
图9是根据本发明实施例的另一种列式数据库处理方法的流程图;
图10是根据本发明实施例的列式数据库查询方法的流程图;
图11是根据本发明实施例的条件位图与标记列与运算示意图;
图12是根据本发明实施例的列式数据库插入方法的流程图;
图13是根据本发明实施例的列式数据库更新方法的流程图;
图14是根据本发明实施例的列式数据库删除方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先介绍本发明实施例所提出的列式存储的架构,列式数据库中将数据和表头分开存储,表头中包括了各个列的属性和当前记录数,属性可以包括该列的名称,该列数值的字段类型和该列的起始地址等,如表1为一个表头,该表头的列名、字段属性和该列的起始地址,其中列名如行号,标记,F2和F3,各个列的数值字段属性为整型、字符型和长整型等,该列的起始地址,用于当进行数据扫描时,如:查询,更新和删除等,从该起始地址进行扫描读取数据,扫描至当前记录数为止。另外,在标记列中还记录当前标记列的版本号,当标记列每次更新一次,标记列的版本号都会更新一次,通常的标记列的版本号可以是连续递增的数字或字母加连续递增的数字,例如:当前标记列的版本是v1,当标记列被更新一次后,该标记列的版本号将被更新为v2。当前记录数记录当前表有多少行数的值,例如当前如表1所示,有4行数据,那么此时当前记录数即为4。
表1
如表2所示为本发明实施例所提供的一个表的列存储视图的示意表格。列式数据库可以包括了三类列,分别为:行号列,标记列和数据列。其中,行号列的每行的值是该行数据的唯一标识,当有事务对某行的数据进行修改时,通过对该行的行号进行加锁,在列式数据库中可以有一个加锁区,该加锁区记录了哪一行被加锁了,当事务需要修改列式数据库中的某行数据时,该事务需要到加锁区查询该行是否已经被加锁了,如果该行的数据已经被加锁了,那么该事务就不能对该行的数据进行修改了,因此防止了该行被修改的同时,又被另外一个事务修改,防止数据的冲突。当修改事务成功提交后,可以在加锁区释放该锁。标记列中各行的值表示了该行的各个数据的是否有效,例如,该标记列的各行的值可以是0,1,其中,0可以表示该行的数据当前是无效的,比如,该行的数据正在被修改,正在被删除等,1可以表示该行的数据当前是有效的,也就是说该行的数据当前没有被修改,表1的第二列是表2的第二列的属性,该属性为标记,即该标记列为表2的第二列。通常情况下,标记列是一个位图(bitmap),数据列是存储具体数据的,每列的数据是单独存放的,当然表2中只描述了两列数据列F2和F3,在实际数据库中,可能存在多个数据列。表1的第三列是表2的第三列的属性,该属性为F2,表1的第四列是表2的第四列的属性,该属性字段为F3。另外,表1第一列是表2的第一列的属性,该属性为行号。
表2
列式存储中的存储区域可以包含如下几个部分,数据存储区域,事务存储区域和临时存储区域。其中,数据存储区域存储了具体数据,如上述表1和表2的内容,临时存储区域,用于在进行事务处理时,临时存储数据,该存储区域也可以在数据存储区域之内,也可以单独为一个存储区域,例如:本发明实施例中,对数据的增删改查的中间过程的数据可以存储在临时存储区域,例如:复制的标记列,查询时过程生成的条件位图和查询位图等,在事务提交成功后,临时存储的数据将删除该事务相关的临时数据。事务存储区域存储了事务日志,事务日志记录了当前事务已经做了哪些操作和该事务提交时标记列的待进行的修改,这样当事务提交时,可以依据事务日志,对标记列执行修改处理。当一个事务成功提交后,该事务日志将会被删除。
数据库事务(Database Transaction),以下简称事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。一个事务中可以包含多个操作,但是各个操作是有时间顺序的,只有事务提交成功后,该事务包含的各个操作的结果才算生效。
图1为本发明实施例的一个网络环境示意图。应用程序102指可提供各种特定功能的计算机程序,包括不限于计费应用,互联网浏览器,多媒体播放器等。应用程序可通过通信网络103访问列式数据库105。列式数据库(column-oriented database)105包括接口模块104和查询模块106。接口模块104用于接收应用程序发送的查询请求,连接并访问查询模块106。查询模块106用于管理数据并执行接口模块104转发来的查询请求。进一步地,列式数据库主机105还与存储引擎108相连接。存储引擎108存储列式数据库中的数据,是结构化的数据集合。接口模块104或查询模块106可驱动存储引擎108,接收存储引擎返回的数据。举例来说,存储引擎108可以包含在查询模块106中,也可以位于查询模块106外部的存储器中。
图2为本发明另一个网络环境示意图中,应用程序202指可提供各种特定功能的计算机程序,包括不限于计费应用,互联网浏览器,多媒体播放器等。应用程序可通过通信网络203访问列式数据库205。列式数据库205中包括的是接口模块204,修改模块206,记录模块207,提交模块208。接口模块204用于接收应用程序发送的修改请求,连接并访问修改模块206。修改模块206用于管理数据并执行接口模块204转发来的修改请求,并在修改过程中,记录模块207记录事务提交时标记列的待进行的修改,当用户提交事务时,提交模块208,用于提交事务时,按照记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效。进一步地,列式数据库主机205还与存储引擎210相连接。存储引擎210存储列式数据库中的数据,是结构化的数据集合。接口模块204或修改模块206可驱动存储引擎210,接收存储引擎返回的数据。
图3是本发明实施例提供的处理设备的示意性框图。本实施例中,处理设备可以为一计算机主机,具体包括一基于处理器的计算机,如通用个人计算机(PC),便携式设备如平板计算机,或智能手机。如图3所示,处理设备300可包括总线310,处理器302,存储器304,输入输出接口306,网络接口308。总线310可包括一通路,在计算机各个部件之间传送信息。处理器302用于处理信息,执行指令或操作,具体可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路application-specific integrated circuit(ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。处理设备还包括一个或多个存储器304,用于存储信息和指令,存储器可以是只读存储器read-only memory(ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器random access memory(RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是磁盘存储器。这些存储器通过总线310与处理器302相连接。
输入输出接口306可包括输入装置或输出装置。输入装置用以接收用户输入的数据和信息,例如键盘,鼠标,摄像头,扫描仪,光笔,语音输入装置,触摸屏等。输出装置用以允许输出或显示信息给用户,包括显示屏,打印机,扬声器等。处理设备还包括一个网络接口308,该网络接口使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。处理器302也能通过总线310与输入输出接口306,网络接口308相连接。
存储器304保存有执行本发明方案的程序,包括:接收应用程序发送的查询请求,所述查询请求包含了对列式数据库的查询条件,其中,列式数据库包含了标记列和一个以上的数据列,所述数据列按照列存储的方式存储具体数据,所述标记列的每行标记位的值用于表示了与所述标记位处于同一行数据的有效性;根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;向所述应用程序发送所述查询结果。存储器304中还可以保存操作系统和其他应用程序。
在本发明的另一个实施例中,上述存储器304还包括:有执行本发明方案的程序,包括:在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了对列式数据库的修改条件,其中,列式数据库包含了标记列和一个以上的数据列,所述数据列按照列存储的方式存储具体数据,所述标记列的每行标记位的值用于表示了与所述标记位处于同一行数据的有效性;根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改;提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效;向所述应用程序发送所述修改响应。存储器304中还可以保存操作系统和其他应用程序。
本发明一个实施例提供的一种处理设备,如图4所示,包括:
接口模块41,用于接收应用程序发送的查询请求,所述查询请求包含了对列式数据库的查询条件,并将所述查询请求发送给查询模块,其中所述数据列按照列存储的方式存储具体数据,所述列式数据库包含了标记列和一个以上的数据列,其中,标记列的每行标记位的值用于表示与所述标记位处于同一行数据的有效性;
查询模块42,用于根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;并将所述查询结果发送给所述接口模块。
接口模块41,还用于接收所述查询模块发送的查询结果,向所述应用程序发送所述查询结果。
进一步的,如图5所示,查询模块42包括了第一生成单元421,第二生成单元422和获取单元423,其中,
第一生成单元421,用于根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据在所述条件位图相应行的值是无效的;
第二生成单元422,用于根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当复制的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
获取单元423,用于根据所述查询位图,获得满足所述查询条件的和所述标记列的标记位是有效的查询结果。
进一步的,第二生成单元422,具体用于根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据列在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据列在所述条件位图相应行的值是无效的。
进一步的,如图5所示,查询模块42还包括确定单元424,其中,
确定单元424,用于确定存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,在临时存储区域中存储所述标记列,将所述存储的标记列作为所述查询请求的私有标记列,并根据所述事务提交时标记列的待进行的修改,更新所述私有标记列,使得所述更新后的私有标记列的被修改的标记位的值表示了所述事务中当前所述标记位对应的数据的有效性;
此时第二生成单元422,具体用于根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
获取单元423,具体用于根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
另外,确定单元424,还用于确定不存在事务提交时标记列的待进行的修改时,所述事务为所述查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将所述存储的标记列作为另一个共享标记列,并设置所述另一个共享标记列的版本号与所述查询请求的对应关系,如果所述已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置所述已存储的共享标记列的版本号与所述查询请求的对应关系;
此时第二生成单元422,具体用于根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
获取单元423,具体用于根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
进一步的,如图5所示,查询模块42还包括锁处理单元425,用于在所述复制标记列之前,对所述标记列加排他锁,在所述复制标记列之后,对所述标记列解排他锁。
进一步的,如图5所示,该处理设备,还包括:修改模块43,记录模块44和提交模块45;其中,
该接口模块41,还用于在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了修改条件,并将修改请求发送给修改模块。
修改模块43,用于接收所述接口模块发送的修改请求,根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理。
记录模块44,用于记录所述事务提交时标记列的待进行的修改。
提交模块45,用于提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效。
接口模块41,还用于向所述应用程序发送所述修改响应。
进一步的,如图5所示,该处理设备的修改模块43包括更新单元431,用于当所述修改请求具体为更新请求,所述修改条件具体为更新条件时,在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;根据所述更新条件,在所述新增行中,将待更新的数据进行修改;
此时记录模块44,具体用于记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
进一步的,如图5所示,该处理设备的修改模块43包括行号处理单元432,用于当所述列式数据库还包括行号列,所述行号列存储了各行的行号时,将所述新增行的行号设置为所述满足更新条件的数据所在行的行号。
进一步的,如图5所示,该处理设备的修改模块43包括插入单元433,用于当修改请求具体为插入请求,所述修改条件具体为插入条件时,根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效。
记录模块44,具有用于记录所述事务提交时,需要将所述新增行的标记位的值修改为有效。
进一步的,如图5所示,该处理设备的修改模块43包括删除单元434,用于当所述修改请求具体为删除请求,所述修改条件具体为删除条件时,在所述一个以上的数据列中,查询到满足所述删除条件的数据。
此时记录模块44,用于记录所述事务提交时,需要将所述满足所述删除条件的数据所在行的标记位的值修改为无效。
如图6所示,本发明实施例提供的一种处理设备,包括接口模块61,修改模块62,记录模块63和提交模块64,其中,
接口模块61,用于在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了对列式数据库的修改条件,并将所述修改请求发送给修改模块,其中所述数据列按照列存储的方式存储具体数据,所述列式数据库包含了标记列和一个以上的数据列,其中,标记列的每行标记位的值用于表示与所述标记位处于同一行数据的有效性;
修改模块62,用于根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理;
记录模块63,用于记录所述事务提交时标记列的待进行的修改;
提交模块64,用于提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效;
接口模块61,还用于向所述应用程序发送所述修改响应。
进一步的,如图7所示,该修改模块62包括更新单元621,用于当所述修改请求具体为更新请求,所述修改条件具体为更新条件时,在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;根据所述更新条件,在所述新增行中,将待更新的数据进行修改;
该记录模块63,具体用于记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
进一步的,如图7所示,该修改模块62包括行号处理单元622,用于当所述列式数据库还包括行号列,所述行号列存储了各行的行号时,将所述新增行的行号设置为所述满足更新条件的数据所在行的行号。
进一步的,如图7所示,该修改模块62包括插入单元623,用于当修改请求具体为插入请求,所述修改条件具体为插入条件时,根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效;
此时记录模块63,具有用于记录所述事务提交时,需要将所述新增行的标记位的值修改为有效。
进一步的,如图7所示,该修改模块62包括删除单元624,用于当所述修改请求具体为删除请求,所述修改条件具体为删除条件时,在所述一个以上的数据列中,查询到满足所述删除条件的数据;
此时记录模块63,用于记录所述事务提交时,需要将所述满足所述删除条件的数据所在行的标记位的值修改为无效。
进一步的,如图7所示,该处理设备还包括:查询模块65,接口模块61,还用于接收应用程序发送的查询请求,所述查询请求包含了对列式数据库的查询条件,并将所述查询请求发送给所述查询模块,和接收所述查询模块发送的查询结果,向所述应用程序发送所述查询结果。
查询模块65,用于根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;并将所述查询结果发送给所述接口模块。
进一步的,如图7所示,查询模块65包括第一生成单元651,第二生成单元652和获取单元653,其中,
第一生成单元651,用于根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据在所述条件位图相应行的值是无效的;
第二生成单元652,用于根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述复制的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
获取单元653,用于根据所述查询位图,获得满足所述查询条件的和所述标记列的标记位是有效的查询结果。
进一步的,如图7所示,第二生成单元652,具体用于当所述标记列为位图,将所述标记列和所述一个以上的条件位图进行相与运算,生成查询位图,其中,所述标记列的标记位的值,条件位图的每行的值,以及查询位图每行的值为0或1。
进一步的,如图7所示,查询模块65还包括确定单元654,用于确定存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,在临时存储区域中存储所述标记列,将所述存储的标记列作为所述查询请求的私有标记列,并根据所述事务提交时标记列的待进行的修改,更新所述私有标记列,使得所述更新后的私有标记列的被修改的标记位的值表示了所述事务中当前所述标记位对应的数据的有效性。
此时第二生成单元652,具体用于根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的。
此时获取单元653,具体用于根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
进一步的,该确定单元,还用于确定不存在事务提交时标记列的待进行的修改时,所述事务为所述查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将所述存储的标记列作为另一个共享标记列,并设置所述另一个共享标记列的版本号与所述查询请求的对应关系,如果所述已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置所述已存储的共享标记列的版本号与所述查询请求的对应关系。
第二生成单元,具体还用于根据共享标记列的版本号与所述查询请求的对应关系,在临时存储区域中确定所述查询请求对应的共享标记列,根据所述查询请求对应的共享标记列和所述一个以上的条件位图,生成查询位图,其中,当所述查询请求对应的共享的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述查询请求对应的标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的。
获取单元,具体用于根据所述查询位图,获得满足所述查询条件和所述查询请求对应的标记列的标记位是有效的的查询结果。
进一步的,如图7所示,查询模块65还包括锁处理单元654,用于在所述复制标记列之前,对所述标记列加排他锁,在所述复制标记列之后,对所述标记列解排他锁。
在本发明实施例中,在列式数据库中增加一列专门用于表示数据列各行数值的有效性的标记列,这样就可以通过标记列,在列式数据库完全按照列式存储的方式实现的增,删,改的各种处理,进一步的,由于无需在一个专门的行区中进行增,删,改的处理,这样进行数据查询时,就可以完全在列区进行数据查询,而无需到行区中进行查询了,提高了数据查询的效率,特别在大数据的应用,查询效率将体现的更好。另外,由于通过标记列来表示数据列各行的有效性,也可以实现在数据查询时,无需对数据列各行加锁,这样就可以实现在查询的同时,也可以对数据进行增删改等操作。
本发明一个实施例提供的列式数据库处理方法,本发明实施例的列式数据库包含了标记列和一个以上的数据列,其中,所述数据列按照列存储的方式存储具体数据,标记列的每行的值用于表示了与所述标记位处于同一行所述每行数据的有效性,方法如图8所示。
步骤801,接收应用程序发送的查询请求,查询请求包含了查询条件。
步骤802,根据标记列和查询条件,在一个以上的数据列上进行查询,获得同时满足查询条件和标记列的标记位是有效的查询结果。
具体的,根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据在所述条件位图相应行的值是无效的;根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的查询结果。
这里的标记列为位图,那么此时根据所述标记列和所述一个以上的条件位图,生成查询位图,具体包括:将所述标记列和所述一个以上的条件位图进行相与运算,生成查询位图,其中,所述标记列的标记位的值,条件位图的每行的值,以及查询位图每行的值为0或1。
进一步的:在根据所述查询条件,扫描所述查询条件所涉及到的数据列之前,还需要判断是否存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,如果确定存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,在临时存储区域中存储所述标记列,将所述存储的标记列作为所述查询请求的私有标记列,并根据所述事务提交时标记列的待进行的修改,更新所述私有标记列,使得所述更新后的私有标记列的被修改的标记位的值表示了所述事务中当前所述标记位对应的数据的有效性。
此时,根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的的查询结果,具体为:根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
进一步的:在根据所述查询条件,当确定不存在事务提交时标记列的待进行的修改时,所述事务为所述查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将所述存储的标记列作为另一个共享标记列,并设置所述另一个共享标记列的版本号与所述查询请求的对应关系,如果所述已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置所述已存储的共享标记列的版本号与所述查询请求的对应关系。
此时,根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的的查询结果,具体为:根据共享标记列的版本号与所述查询请求的对应关系,在临时存储区域中确定所述查询请求对应的共享标记列,根据所述查询请求对应的共享标记列和所述一个以上的条件位图,生成查询位图,其中,当所述查询请求对应的共享的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述查询请求对应的标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述查询请求对应的标记列的标记位是有效的的查询结果。
进一步的,在所述复制标记列之前,还包括:对所述标记列加排他锁;在所述复制标记列之后,还包括:对所述标记列解排他锁。
步骤803,向应用程序发送查询结果。
上述方法还包括:在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了修改条件;该事务可以和上述查询过程在同一个事务中,此时修改请求可以在查询请求之前,也可以在查询请求之后;该事务可以和上述查询过程不在同一个事务中。根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改;提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效;向所述应用程序发送所述修改响应。
具体的:如果修改请求具体为更新请求,修改条件具体为更新条件时,根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改,具体包括:在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;根据所述更新条件,在所述新增行中,将待更新的数据进行修改;记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
如果列式数据库还包括行号列,所述行号列存储了各行的行号;方法还包括:将所述新增行的行号设置为所述满足更新条件的数据所在行的行号。
当修改请求具体为插入请求,所述修改条件具体为插入条件时,所述根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改,具体包括:根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效;记录所述事务提交时,需要将所述新增行的标记位的值修改为有效。
当修改请求具体为删除请求,所述修改条件具体为删除条件;根据所述修改条件,对所述标记列和所述一个以上的数据列进行操作处理,记录所述事务提交时标记列的待进行的修改,具体包括:在所述一个以上的数据列中,查询到满足所述删除条件的数据;记录所述事务提交时,需要将所述满足所述删除条件的数据所在行的标记位的值修改为无效。
发明一个实施例提供的列式数据库处理方法,本发明实施例的列式数据库包含了标记列和一个以上的数据列,其中,所述数据列按照列存储的方式存储具体数据,标记列的每行的值用于表示了与所述标记位处于同一行所述每行数据的有效性,方法如图9所示。
步骤901,在一个事务中,接收应用程序发送的修改请求,修改请求包含了修改条件;
该修改请求可以是插入请求和更新请求,相应的,修改条件分别为插入条件和更新条件。
步骤902,根据修改条件,对标记列和一个以上的数据列进行修改处理,记录事务提交时标记列的待进行的修改;
当该修改条件为更新条件时,在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;根据所述更新条件,在所述新增行中,将待更新的数据进行修改;记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
上述更新过程还包括:将所述新增行的行号设置为所述满足更新条件的数据所在行的行号。
当修改请求具体为插入请求时,根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效;
记录所述事务提交时,需要将所述新增行的标记位的值修改为有效
步骤903,提交事务时,按照记录的事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在修改处理后与标记位处于同一行的数据是否有效;
步骤904,向应用程序发送修改响应。
上述方案还包括查询过程,该查询过程与图8所示的实施例相同,这里不再赘述。
在本发明实施例中,在列式数据库中增加一列专门用于表示数据列各行数值的有效性的标记列,这样就可以通过标记列,在列式数据库完全按照列式存储的方式实现的增,删,改的各种处理,进一步的,由于无需在一个专门的行区中进行增,删,改的处理,这样进行数据查询时,就可以完全在列区进行数据查询,而无需到行区中进行查询了,提高了数据查询的效率,特别在大数据的应用,查询效率将体现的更好。另外,由于通过标记列来表示数据列各行的有效性,也可以实现在数据查询时,无需对数据列各行加锁,这样就可以实现在查询的同时,也可以对数据进行增删改等操作。
例如:在实际测试中扫描4000万数据,每行3个字段,每个字段8个字节,耗时2757us,每万行数据耗时0.68925us。而以行扫描方式扫描行存储的数据时,在相同表结构情况下,1000万数据行扫描需要3081376us,每万行数据耗时308.1376us。列扫描效率为行扫描效率的447倍。通过测试可以充分说明列式数据库在查询效率比行数据库的效率要高很多。并且本发明通过标记列来进行多版本的控制,非常简单方便,提高了数据库的增删改查的效率。
本发明一个实施例提供了一种列式数据库查询操作方法,如图10所示,包括。
步骤1001,在一个事务中,列式数据库接收应用程序发送的查询请求,该查询请求包含了查询条件。
例如该查询请求为一个SQL1,如:select F2from Table1where F3>15,以本发明实施例中的表1来表示这里的Table1。
步骤1002,列式数据库根据事务日志,判断该事务日志中是否记录了该事务提交时标记列的待进行的修改,如果事务日志中并未记录该事务提交时标记列的待进行的修改,此时确定临时存储区域中是否存储共享标记列,如果临时存储区域中没有存储共享标记列或者临时存储区域中存储的共享标记列的版本号与表头中共享标记列的版本号是不一样时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将该存储的标记列作为另一个共享标记列,并设置该另一个共享标记列的版本号与该查询请求的对应关系,例如:通过游标来关联该共享标记列的版本号和该查询请求的相应关系。如果已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置已存储的共享标记列的版本号与该查询请求的对应关系。所谓共享标记列是指的是同一个事务中其它的查询请求或者其它事务的查询请求可以直接使用该标记列进行查询请求。可以对标记列设置为公有,从而使得标记列为共享标记列,这里将标记列设置为公有的方式可以有多种,可以通过设置该标记列的属性为公有属性,也可以在临时存储区域中设置两个区域,一个区域为公共区域,一个为私有区域,然后将共享标记列存储在公共区域中。如果事务日志中记录了该事务提交时标记列的需要进行的修改,首先复制的一份标记列保存在临时存储区域,该复制的标记列作为私有标记列,并设置私有标记列是私有的,私有标记列只对本次查询请求有效,同一个事务中其它的查询请求或者其它事务的查询请求不能直接利用该标记列进行查询,这里设置私有标记列的方式可以有多种,可以通过设置该标记列的属性为公有属性,也可以在临时存储区域中设置两个区域,一个区域为公共区域,一个为私有区域,然后将私有标记列存储在私有区域中。根据事务提交时标记列的待进行的修改,更新该私有标记列,使得该更新后的私有标记列的被修改的标记位的值表示了该事务中当前所述标记位对应的数据的有效性。
具体的一个例子如下:由于当前事务还没有提交,此时需要确定当前事务是否已经存在对数据列的数据进行修改的处理。列式数据库将查询事务日志,如果当前的事务日志中并没有记录了当前事务将被提交时,需要修改某一行或某几行的标记位的值,则表示当前事务并没有对数据列的数据进行修改的处理,就意味着当前的标记列对于本次SQL1是准确的,因此读取当前的记录数,按照当前记录数的数目,扫描数据存储区域的标记列,并复制当前的标记列存储在临时存储区中,并将该当前的标记列作为私有标记列。对于本发明实施例的上述具体的SQL1而言,此时列式数据库复制了一份标记列,此时私有标记列如表3所示,
表3
如果该事务日志中记录了当前事务将被提交时,需要修改标记列的某一行或某几行的标记位的值,则表示当前事务已经存在了对数据列的数据进行修改的处理,此时意味着当前事务并没有提交,因此该私有标记列所体现的数据有效性对于本次SQL1并不是准确的,至此,列式数据库首先读取当前的记录数,按照当前记录数的数目,扫描当前的标记列,并复制当前的标记列存储在临时存储区中,并将该当前的标记列作为私有标记列;在复制一份当前的标记列后,在临时存储区域中,按照事务日志的记录,修改标记列的某一行或某几行的标记位的值,即更新了私有标记列。
在复制标记列之前,还需要对标记列加锁,这样防止在复制的过程中,其它事务对标记列进行更新,从而使得查询的结果不够准确,在复制标记列之后,还需要及时释放该锁,这样就不会影响其它事务对标记列的更新处理,使得事务能够得到并发处理。
假设此时当前事务已经处理但未提交如下的操作,delete from Table1 whereF2=b,此时事务日志中将包含如下记录:事务提交时,行号为2的标记位将修改为0,当然记录形式可以是多样的,比如,文字描述,XML语言描述和表格描述等。对于本发明实施例的上述具体的SQL1而言,此时列式数据库复制了如表3的一份标记列后,还需要按照事务日志的记录,将行号为2的标记列的值修改为0,并存储更新后的私有标记列作为复制的标记列,如表4所示。
1
0
1
1
表4
如果标记列是可以共享的,那么当确定临时存储区域中缓存的版本号不同于当前表头中的版本号,并且当前没有查询请求在用这个版本号,则可以删除临时存储区域中的标记列,而对于存储的标记列是私有时,当利用该标记列的查询请求完成后,就会直接删除该临时存储区域中的标记列。
步骤1003,根据复制的标记列和查询条件,在上述一个以上的数据列上,获得满足查询条件和复制的标记列的标记位是有效的的查询结果。
具体的:列式数据库根据接收到的查询条件,扫描查询条件所涉及的列,获得条件位图(bitmap),位图中满足条件的那一行的值为1,不满足条件那一行的值为0。对于本发明实施例的上述具体的SQL1而言,此时满足的条件的为F3=30的两行,即此时得到了条件位图如表5所示,
0
1
1
0
表5
如表4复制的标记列也是一个位图,此时列式数据库将缓存的标记列的位图和条件位图进行与运算,从而获得查询位图,这个查询位图可以表示哪些行是满足查询条件的。与运算的过程如图11所示,此时,如表4的缓存的标记列位图与表5的条件位图相与后,得到的查询位图如表6所示,
0
0
1
0
表6
根据上述查询位图和查询条件,可以获得最终的查询结果。也就是查询结果为第3行的数据,因此得到的查询结果为:c。
当查询请求完成之后,可以将临时存储区域中复制存储的标记列删除。
步骤1004,提交事务,并向应用程序发送该查询结果。这样一个查询请求过程就完成了。
如果标记列中全为0时,也就是说,当前的各行的数据都是无效的,因此可以无需查询了,直接输出查询结果,这个结果就是为无,如果标记列全为1时,也就是说,当前的各行的数据都是有效的,因此可以无需将条件位图与标记列进行相与了,该条件位图即为查询位图。
在上述查询过程后,在事务提交前,该事务可能还存在另外一个查询请求的过程,其过程包括:
步骤1005,列式数据库还接收应用程序发送的另一个查询请求,该查询请求包含了查询条件。
例如该查询请求为一个SQL2,如:select F3from Table1where(F2=b or F2=d)。
步骤1006,由于在步骤1002中已经确认了该事务日中已经记录了该事务提交时标记列的待进行的修改,则复制一份当前的标记列和当前标记列的版本号保存在临时存储区,并根据事务日志,在临时存储区中更新该复制的标记列。
如果此时在另外一个事务中,该标记列已经被修改,修改后的标记列的版本号为v4,修改后的标记列如表7所示。
0
1
1
1
表7
根据步骤1002中的假设,此时的事务日志记录了:事务提交时,行号为2的标记位将修改为0。因此根据事务日志,将表7中的行号为2的标记列的值修改为0,并存储更新后的标记列作为复制的标记列,如表8所示。
0
0
1
1
表8
步骤1007,根据复制的标记列和查询条件,在上述一个以上的数据列上,获得满足查询条件和复制的标记列的标记位是有效的的查询结果。
具体的:列式数据库根据接收到的查询条件,扫描查询条件所涉及的列,获得条件位图(bitmap),位图中满足条件的那一行的值为1,不满足条件那一行的值为0。对于本发明实施例的上述具体的SQL2而言,此时满足的条件的为F2=b或d的两行,即此时得到了条件位图如表9所示,
0
1
0
1
表9
如表8复制的标记列也是一个位图,此时列式数据库将复制的标记列的位图和条件位图进行与运算,从而获得查询位图,这个查询位图可以表示哪些行是满足查询条件的。如表8的缓存的标记列位图与表9的条件位图相与后,得到的查询位图如表10所示,
0
0
0
1
表10
根据上述查询位图和查询条件,可以获得最终的查询结果。也就是查询结果为第4行的数据,因此得到的查询结果为:10。
在本发明实施例的技术方案中,在进行数据查询时,通过标记列来表示数据列各个行的数据是否有效,这样就可以准确快速进行列式查询。
本发明还提供了一种列式数据库的插入处理的方案,如图12所示,包括:
步骤1201,在一个事务中,列式数据库接收应用程序发送的插入请求,该插入请求包含了插入条件。
步骤1202,列式数据库读取当前的记录数,根据当前记录数的数目和插入条件,在各个列中的当前记录数的数目的下一行增加一行数据,将标记列中新增的相应行的标记位设置为无效,例如该标记位的数值为0,并在事务日志中记录该事务提交时,将该新增的相应行的标记位修改为有效。在实现过程中,在事务日志中,可以通过记录该新增的相应行的地址来记录哪些行的标记位需要修改,而新增的相应行的地址可以通过位置号来实现,位置号指的是列式数据库的一行的位置序列。比如:列式存储了10行数据,那么可以依次从第1行到第10行的位置序列为0到9,这样只要知道第1行的起始位置和每行所占用的位置大小,就可以计算出任何一行的位置,这样就可以通过一个位置号来定位到一个具体的位置了。
当事务提交成功时,根据事务日志的记录,将该标记位的值改为1,此时表示插入请求处理成功。如果这里的插入请求包含了几条需要插入数据,比如是N条,那么列式数据库就可以在各个数据列中的当前记录数的数目的下一行开始依次增加插入N行数据,每个新增行的标记位的数值为0,每增加一行,将当前记录数相应加1,变成新的当前记录数。并向应用程序返回插入结果,即,插入成功的响应消息。
例如:该插入请求具体为一个SQL2,如:insert into Table1(F2,F3)values(e,15),则首先根据当前记录数的数目,获知当前记录数为4,则在表1各个数列的第4行之后均增加一行,该新增行的标记列的标记位的值为无效的,数据列F2和F3的值分别为e和15,并设置该新增一行的行号为5,通常情况下,新增一行的行号为新增前最大的行号加1,这样就保证了新增一行的行号是唯一的,并将当前记录数的值加1,变成为5,即此时如表11所示。
表11
在事务日志中记录当该事务提交时,需要对标记列的待进行的修改。
成功提交该事务,按照事务日志的记录,将新增的这一行的标记位的值改为1,这样插入操作就处理完成了,如表12所示。
表12
本发明还提供了一种列式数据库的更新处理的方案,如图13所示,包括:
步骤1301,在一个事务中,列式数据库接收应用程序发送的更新请求,该操作请求包含了更新条件。
步骤1302,列式数据库读取当前的记录数,根据当前记录数的数目和更新条件,在各个列中的当前记录数的数目的行中,查询到满足更新条件的数据,其中,满足更新条件的数据所在行的标记位的值是有效的,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将满足所述更新条件的数据所在行的各个数据列的数据分别依次复制到所述新增行中,并将所述新增行的所述标记位的值设置为无效,并设置新增行的行号为满足更新条件的数据所在行的行号。
具体如,该更新请求具体为SQL3,update table1set F3=20where F2=c,列式数据库扫描表table1,查询到F2列中值为c的记录。将该记录所在的这一行的各个数据列的值分别复制到table1表的尾部的各个数据列,形成了新增一行,并在这新增一行所在的标记列上,将该标记设置为0,将该新增一行的行号设置为3,该行的数据各个数据列的值是上述查询到F2列中值为c所在行的值,如表13所示。
表13
这里根据更新条件,读取符合更新条件的过程实际上是一个查询过程,该查询过程和图10的实施例的原理是相同的。
步骤1303,根据更新条件,在新增行中,将待更新的数据进行修改,并在事务日志中,记录事务提交时,需要将所述满足所述更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
具体如:列式数据库根据更新条件set F3=20where F2=c,将新增这一行的数据列F3的值由30更新为20,将当前最大记录数加1,变为5,此时各个列如表14所示,
表14
步骤1304,按照事务日志的记录,提交该事务,此时满足所述更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。并向应用程序返回更新结果,即,表示更新成功的响应消息。
例如:列式数据库提交该当前事务,在事务提交过程中,对标记列进行加排他锁处理,同时将事务日志记录的行号进行标记修改,即,将F2=c,F3=30这一行的标记改为0,将F2=c,F3=20这一行的标记改为1,提交成功之后,新数据生效,老数据失效。提交之后对标记列进行解排他锁。提交之后的数据如表11所示:
表15
本发明还提供了一种列式数据库的删除处理的方案,如图14所示,包括:
步骤1401,在一个事务中,列式数据库接收应用程序发送的删除请求,该删除请求包含了删除条件。
步骤1402,读取当前的记录数,在行数为当前记录数的数目的各个数据列中,读取到符合删除条件的行数,在事务日志中,记录所述事务提交时标记列的待进行的修改。
这里根据删除条件,读取待删除的行的过程实际上是一个查询过程,该查询过程和图10的实施例的原理是相同的。
步骤1403,按照事务日志的记录,提交事务,此时删除条件对应的数据所在行的标记位修改为无效。并向应用程序返回删除结果,即,表示删除成功的响应消息。
例如:该删除请求具体为SQL4,delete from table1where F2=c,则上述更新过程如下:当事务成功提交时,根据删除条件,在事务日志中记录将表1中的数据列F2的值为c的这一行的标记位修改为无效,提交事务时,按照事务日志的记录,进行删除处理,删除后的结果如表12所示。由于此时并没有新增一行数据,因此此时的当前记录数不变。
表16
在列式数据库进行查询,删除或者更新的处理过程中,都需要查询符合删除条件或者更新条件的数据列的过程,由于数据库中的标记列可能随时发生变化的,因此每一次查询,都需要复制一份标记列和该标记列的版本号到临时缓存区域中,具体的查询过程如图10对应的实施例。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (19)

1.一种处理设备,其特征在于,包括:
接口模块,用于接收应用程序发送的查询请求,所述查询请求包含了对列式数据库的查询条件,并将所述查询请求发送给查询模块,其中数据列按照列存储的方式存储具体数据,所述列式数据库包含了标记列和一个以上的数据列,其中,标记列的每行标记位的值用于表示与所述标记位处于同一行数据的有效性;
查询模块,用于根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;并将所述查询结果发送给所述接口模块;
所述接口模块,还用于接收所述查询模块发送的查询结果,向所述应用程序发送所述查询结果;所述查询模块包括第一生成单元,第二生成单元和获取单元,其中,
所述第一生成单元,用于根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据在所述条件位图相应行的值是无效的;
所述第二生成单元,用于根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当复制的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
所述获取单元,用于根据所述查询位图,获得满足所述查询条件的和所述标记列的标记位是有效的查询结果。
2.如权利要求1所述的处理设备,其特征在于,所述第二生成单元,具体用于当所述标记列为位图,将所述标记列和所述一个以上的条件位图进行相与运算,生成查询位图,其中,所述标记列的标记位的值,条件位图的每行的值,以及查询位图每行的值为0或1。
3.如权利要求1所述的处理设备,其特征在于,所述查询模块还包括确定单元,其中,
所述确定单元,用于确定存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,在临时存储区域中存储所述标记列,将所述存储的标记列作为所述查询请求的私有标记列,并根据所述事务提交时标记列的待进行的修改,更新所述私有标记列,所述更新后的私有标记列的被修改的标记位用于表示所述事务中当前所述标记位对应的数据是否有效;
所述第二生成单元,具体用于根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
所述获取单元,具体用于根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
4.如权利要求1所述的处理设备,其特征在于,所述查询模块还包括确定单元,其中,所述确定单元,还用于确定不存在事务提交时标记列的待进行的修改时,所述事务为所述查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将所述存储在临时存储区域中的标记列作为另一个共享标记列,并设置所述另一个共享标记列的版本号与所述查询请求的对应关系,如果所述已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置所述已存储的共享标记列的版本号与所述查询请求的对应关系;
所述第二生成单元,具体用于根据共享标记列的版本号与所述查询请求的对应关系,在临时存储区域中确定所述查询请求对应的共享标记列,根据所述查询请求对应的共享标记列和所述一个以上的条件位图,生成查询位图,其中,当所述查询请求对应的共享的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述查询请求对应的标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
所述获取单元,具体用于根据所述查询位图,获得满足所述查询条件和所述查询请求对应的标记列的标记位是有效的的查询结果。
5.如权利要求3或4所述的处理设备,其特征在于,所述查询模块还包括锁处理单元,用于在所述复制标记列之前,对所述标记列加排他锁,在所述复制标记列之后,对所述标记列解排他锁。
6.如权利要求1所述的处理设备,其特征在于,还包括:修改模块,记录模块和提交模块;其中,
所述接口模块,还用于在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了修改条件,并将修改请求发送给修改模块;
所述修改模块,用于接收所述接口模块发送的修改请求,根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理;
所述记录模块,用于记录所述事务提交时标记列的待进行的修改;
所述提交模块,用于提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效;
所述接口模块,还用于向所述应用程序发送修改响应。
7.如权利要求6所述的处理设备,其特征在于,所述修改模块包括更新单元,用于当所述修改请求具体为更新请求,所述修改条件具体为更新条件时,在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;根据所述更新条件,在所述新增行中,将待更新的数据进行修改;
所述记录模块,具体用于记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
8.如权利要求7所述的处理设备,其特征在于,所述修改模块包括行号处理单元,用于当所述列式数据库还包括行号列,所述行号列存储了各行的行号时,将所述新增行的行号设置为所述满足更新条件的数据所在行的行号。
9.如权利要求6所述的处理设备,其特征在于,所述修改模块包括插入单元,用于当修改请求具体为插入请求,所述修改条件具体为插入条件时,根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效;
所述记录模块,具有用于记录所述事务提交时,需要将所述新增行的标记位的值修改为有效。
10.如权利要求6所述的处理设备,其特征在于,所述修改模块包括删除单元,用于当所述修改请求具体为删除请求,所述修改条件具体为删除条件时,在所述一个以上的数据列中,查询到满足所述删除条件的数据;
所述记录模块,用于记录所述事务提交时,需要将所述满足所述删除条件的数据所在行的标记位的值修改为无效。
11.一种列式数据库处理方法,其特征在于,所述列式数据库包含了标记列和一个以上的数据列,其中,所述数据列按照列存储的方式存储具体数据,所述标记列的每行标记位的值用于表示与所述标记位处于同一行数据的有效性,所述方法包括:
接收应用程序发送的查询请求,所述查询请求包含了查询条件;
根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果;
向所述应用程序发送所述查询结果;所述根据所述标记列和所述查询条件,在所述一个以上的数据列上进行查询,获得同时满足所述查询条件和所述标记列的标记位是有效的查询结果,具体包括:
根据所述查询条件,扫描所述查询条件所涉及到的数据列,并生成一个以上的条件位图,其中,所述涉及到的数据列中满足查询条件的数据在所述条件位图相应行的值是有效的,所述涉及到的数据列中不满足查询条件的数据在所述条件位图相应行的值是无效的;
根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;
根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的查询结果。
12.如权利要求11所述的方法,其特征在于,所述标记列为位图,根据所述标记列和所述一个以上的条件位图,生成查询位图,具体包括:
将所述标记列和所述一个以上的条件位图进行相与运算,生成查询位图,其中,所述标记列的标记位的值,条件位图的每行的值,以及查询位图每行的值为0或1。
13.如权利要求11的所述的方法,其特征在于,在根据所述查询条件,扫描所述查询条件所涉及到的数据列之前,还包括:
确定存在事务提交时标记列的待进行的修改,所述事务为所述查询请求所在的事务,在临时存储区域中存储所述标记列,将所述存储的标记列作为所述查询请求的私有标记列,并根据所述事务提交时标记列的待进行的修改,更新所述私有标记列,使得所述更新后的私有标记列的被修改的标记位的值表示了所述事务中当前所述标记位对应的数据的有效性;
所述根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的的查询结果,具体为:
根据所述更新后的私有标记列和所述一个以上的条件位图,生成查询位图,其中,当所述更新后的私有标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述更新后的私有标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述更新后的私有标记列的标记位是有效的的查询结果。
14.如权利要求11的所述的方法,其特征在于,在根据所述查询条件,扫描所述查询条件所涉及到的数据列之前,还包括:
确定不存在事务提交时标记列的待进行的修改时,所述事务为所述查询请求所在的事务,当临时存储区域中未存储共享标记列或者当临时存储区域中已存储的共享标记列的版本号与表头中的标记列的版本号不相同时,将数据存储区域中的标记列版本号和标记列存储在临时存储区域中,将所述存储在临时存储区域中的标记列作为另一个共享标记列,并设置所述另一个共享标记列的版本号与所述查询请求的对应关系,如果所述已存储的共享标记列的版本号与表头中的标记列的版本号相同,设置所述已存储的共享标记列的版本号与所述查询请求的对应关系;
所述根据所述标记列和所述一个以上的条件位图,生成查询位图,其中,当所述标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述标记列的标记位是有效的的查询结果,具体为:
根据共享标记列的版本号与所述查询请求的对应关系,在临时存储区域中确定所述查询请求对应的共享标记列,根据所述查询请求对应的共享标记列和所述一个以上的条件位图,生成查询位图,其中,当所述查询请求对应的共享的标记列和所述条件位图的同一行的值均为有效值时,所述查询位图同一行的值是有效的,当所述查询请求对应的标记列和所述条件位图的同一行的值不全是有效值时,所述查询位图同一行的值是无效的;根据所述查询位图,获得满足所述查询条件和所述查询请求对应的标记列的标记位是有效的的查询结果。
15.如权利要求13所述的方法,其特征在于,在复制标记列之前,还包括:对所述标记列加排他锁;在所述复制标记列之后,还包括:对所述标记列解排他锁。
16.如权利要求11所述的方法,其特征在于,所述方法还包括:
在一个事务中,接收应用程序发送的修改请求,所述修改请求包含了修改条件;
根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改;
提交所述事务时,按照所述记录的所述事务提交时标记列的待进行的修改,对标记列进行相应修改,修改后的标记列每行标记位的值用于表示在所述修改处理后与所述标记位处于同一行的数据是否有效;
向所述应用程序发送修改响应。
17.如权利要求16所述的方法,其特征在于,所述修改请求具体为更新请求,所述修改条件具体为更新条件;
所述根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改,具体包括:
在所述一个以上的数据列中,查询到满足所述更新条件的数据,其中,所述满足所述更新条件的数据所在行的标记位的值是有效的;
在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述更新条件中需要更新的行数是相同的;
将在所述一个以上的数据列中,满足更新条件的数据所在行的数据,分别复制到所述新增行中,并将所述新增行的标记位的值设置为无效;
根据所述更新条件,在所述新增行中,将待更新的数据进行修改;
记录所述事务提交时,需要将所述满足更新条件的数据所在行的标记位的值修改为无效,将所述新增行的标记位的值修改为有效。
18.如权利要求16所述的方法,其特征在于,所述列式数据库还包括行号列,所述行号列存储了各行的行号;
所述方法还包括:将新增行的行号设置为所述满足更新条件的数据所在行的行号。
19.如权利要求16所述的方法,其特征在于,所述修改请求具体为插入请求,所述修改条件具体为插入条件;
所述根据所述修改条件,对所述标记列和所述一个以上的数据列进行修改处理,记录所述事务提交时标记列的待进行的修改,具体包括:
根据所述插入条件,在所述一个以上的数据列和所述标记列上添加新增行,所述新增行的行数与所述插入条件中需要插入的行数是相同的;在所述新增行中添加数据,并设置所述新增行的标记位为无效;
记录所述事务提交时,需要将所述新增行的标记位的值修改为有效。
CN201310656482.1A 2013-12-06 2013-12-06 列式数据库处理的方法和处理设备 Active CN103678556B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201310656482.1A CN103678556B (zh) 2013-12-06 2013-12-06 列式数据库处理的方法和处理设备
JP2016529436A JP6244592B2 (ja) 2013-12-06 2014-11-05 列指向データベース処理方法および処理デバイス
EP14868508.4A EP3007085A4 (en) 2013-12-06 2014-11-05 METHOD AND DEVICE FOR PROCESSING COLUMN DATA BASES
PCT/CN2014/090337 WO2015081780A1 (zh) 2013-12-06 2014-11-05 列式数据库处理的方法和处理设备
US15/173,971 US10303691B2 (en) 2013-12-06 2016-06-06 Column-oriented database processing method and processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310656482.1A CN103678556B (zh) 2013-12-06 2013-12-06 列式数据库处理的方法和处理设备

Publications (2)

Publication Number Publication Date
CN103678556A CN103678556A (zh) 2014-03-26
CN103678556B true CN103678556B (zh) 2017-10-10

Family

ID=50316101

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310656482.1A Active CN103678556B (zh) 2013-12-06 2013-12-06 列式数据库处理的方法和处理设备

Country Status (5)

Country Link
US (1) US10303691B2 (zh)
EP (1) EP3007085A4 (zh)
JP (1) JP6244592B2 (zh)
CN (1) CN103678556B (zh)
WO (1) WO2015081780A1 (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103678556B (zh) 2013-12-06 2017-10-10 华为技术有限公司 列式数据库处理的方法和处理设备
CN103970870A (zh) * 2014-05-12 2014-08-06 华为技术有限公司 数据库查询方法和服务器
CN103995676A (zh) * 2014-06-16 2014-08-20 国家电网公司 数据存储方法及装置和数据处理方法及装置
CN104216955B (zh) * 2014-08-20 2017-12-26 百度在线网络技术(北京)有限公司 一种操作数据及管理事务的方法、装置及分布式系统
CN104572933B (zh) * 2014-12-30 2018-02-23 北京像素软件科技股份有限公司 一种处理数据的方法
CN106682042B (zh) * 2015-11-11 2019-11-22 杭州海康威视数字技术股份有限公司 一种关系数据缓存及查询方法及装置
CN105589969A (zh) * 2015-12-23 2016-05-18 浙江大华技术股份有限公司 一种数据处理方法及装置
CN108140022B (zh) * 2015-12-24 2020-09-18 华为技术有限公司 数据查询方法和数据库系统
US10268636B2 (en) * 2016-09-16 2019-04-23 Oracle International Corporation Column level invalidation for in-memory database
CN106844541B (zh) * 2016-12-30 2020-05-29 晶赞广告(上海)有限公司 一种联机分析处理方法及装置
CN109947980A (zh) * 2017-10-30 2019-06-28 北京国双科技有限公司 一种视频收视数据的统计方法及装置
CN108563923B (zh) * 2017-12-05 2020-08-18 华南理工大学 一种基因变异数据分布式存储方法及系统
CN108389027B (zh) * 2017-12-30 2020-06-16 北京航天智造科技发展有限公司 一种面向工业的app应用开发系统
CN108345648B (zh) * 2018-01-18 2021-01-26 奇安信科技集团股份有限公司 一种基于列式存储的获取日志信息的方法及装置
CN108958894B (zh) * 2018-06-14 2022-05-10 创新先进技术有限公司 一种分布式事务处理方法、系统、事务管理器及终端设备
US11328081B2 (en) * 2018-10-16 2022-05-10 Sap Se Consent-based data privacy management system
CN109471893B (zh) * 2018-10-24 2022-05-20 上海连尚网络科技有限公司 网络数据的查询方法、设备及计算机可读存储介质
CN109782658A (zh) * 2018-12-27 2019-05-21 北京航天智造科技发展有限公司 工业现场远程监控方法及装置
US10909101B2 (en) 2019-04-19 2021-02-02 Advanced New Technologies Co., Ltd. Updating and querying a bitmap index
CN110059090B (zh) * 2019-04-19 2020-11-03 创新先进技术有限公司 一种位图索引的写入/转储/合并/查询方法和装置
CN112948413A (zh) * 2019-12-10 2021-06-11 阿里巴巴集团控股有限公司 数据处理方法、装置、设备及存储介质
CA3162774A1 (en) * 2019-12-24 2021-07-01 Joseph Golden Episodic memory stores, data ingestion and query systems for same, including examples of autonomous smart agents
US11386089B2 (en) * 2020-01-13 2022-07-12 The Toronto-Dominion Bank Scan optimization of column oriented storage
CN113282578B (zh) * 2020-02-20 2024-07-09 腾讯科技(深圳)有限公司 消息处理方法、装置、消息处理设备及存储介质
US11914589B2 (en) * 2020-02-28 2024-02-27 Sap Se Efficient computation of order by, order by with limit, min, and max in column-oriented databases
CN111552715B (zh) * 2020-05-06 2023-11-17 北京易数科技有限公司 用户查询方法和装置
CN111859445B (zh) * 2020-06-14 2022-08-02 苏州浪潮智能科技有限公司 一种基于k-db数据库的数据安全实现方法及系统
CN112214521A (zh) * 2020-11-20 2021-01-12 深圳前海微众银行股份有限公司 规则查询方法、装置、设备及计算机存储介质
CN115827653B (zh) * 2022-11-25 2023-09-05 深圳计算科学研究院 一种用于htap和海量数据的纯列式更新方法及装置

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU595378B2 (en) 1986-08-22 1990-03-29 Commonwealth Scientific And Industrial Research Organisation Content-addressable memory system with active memory circuit
JPH02501604A (ja) * 1986-08-22 1990-05-31 コモンウェルス サイエンティフィック アンド インダストリアル リサーチ オーガナイゼイション 連想記憶メモリシステム
US5794229A (en) * 1993-04-16 1998-08-11 Sybase, Inc. Database system with methodology for storing a database table by vertically partitioning all columns of the table
JP3653333B2 (ja) * 1996-05-13 2005-05-25 株式会社日立製作所 データベース管理方法およびシステム
JP2000020385A (ja) * 1998-07-07 2000-01-21 Hitachi Ltd データ検索システムにおけるデータキャッシュ方法
US6009432A (en) * 1998-07-08 1999-12-28 Required Technologies, Inc. Value-instance-connectivity computer-implemented database
EP1570396A4 (en) * 2002-11-15 2006-09-27 Schweber Erick Von METHOD AND APPARATUS FOR SEARCHING INFORMATION
US20050216518A1 (en) 2004-03-26 2005-09-29 Oracle International Corporation Database management system with persistent, user-accessible bitmap values
US7966315B2 (en) * 2005-11-15 2011-06-21 Vmware, Inc. Multi-query optimization
US9626421B2 (en) * 2007-09-21 2017-04-18 Hasso-Plattner-Institut Fur Softwaresystemtechnik Gmbh ETL-less zero-redundancy system and method for reporting OLTP data
CN101727465B (zh) * 2008-11-03 2011-12-21 中国移动通信集团公司 分布式列存储数据库索引建立、查询方法及装置与系统
US8214352B2 (en) * 2008-11-26 2012-07-03 Hewlett-Packard Development Company Modular query optimizer
US10152504B2 (en) * 2009-03-11 2018-12-11 Actian Netherlands B.V. Column-store database architecture utilizing positional delta tree update system and methods
US8626770B2 (en) * 2010-05-03 2014-01-07 International Business Machines Corporation Iceberg query evaluation implementing a compressed bitmap index
US8676834B2 (en) * 2011-02-16 2014-03-18 International Business Machines Corporation Set-level comparisons in dynamically formed groups
US20130198168A1 (en) * 2011-08-01 2013-08-01 Wei Huang Data storage combining row-oriented and column-oriented tables
US8660985B2 (en) * 2012-04-11 2014-02-25 Renmin University Of China Multi-dimensional OLAP query processing method oriented to column store data warehouse
CN102682108B (zh) * 2012-05-08 2015-02-18 同方知网数字出版技术股份有限公司 一种行列混合的数据库存储方法
CN102890721B (zh) * 2012-10-16 2016-03-30 苏州迈科网络安全技术股份有限公司 基于列存储技术的数据库建立方法及系统
CN103324765B (zh) * 2013-07-19 2016-08-17 西安电子科技大学 一种基于列存储的多核并行数据查询优化方法
CN103678556B (zh) * 2013-12-06 2017-10-10 华为技术有限公司 列式数据库处理的方法和处理设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
列存储DWMS中的索引关键技术研究;胡玉乐;《中国优秀硕士学位论文全文数据库(电子期刊)》;20110715(第7期);全文 *

Also Published As

Publication number Publication date
CN103678556A (zh) 2014-03-26
JP6244592B2 (ja) 2017-12-13
EP3007085A4 (en) 2016-09-14
EP3007085A1 (en) 2016-04-13
WO2015081780A1 (zh) 2015-06-11
US10303691B2 (en) 2019-05-28
US20160283558A1 (en) 2016-09-29
JP2016539417A (ja) 2016-12-15

Similar Documents

Publication Publication Date Title
CN103678556B (zh) 列式数据库处理的方法和处理设备
CN108228817B (zh) 数据处理方法、装置和系统
US8065323B2 (en) Offline validation of data in a database system for foreign key constraints
US7533136B2 (en) Efficient implementation of multiple work areas in a file system like repository that supports file versioning
US8566300B2 (en) Mechanism for efficient maintenance of XML index structures in a database system
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
CN111797073B (zh) 数据库管理方法、电子设备与计算机可读存储介质
US8219569B2 (en) In-place evolution of XML schemes
CN106354732B (zh) 一种支持并发协同的离线数据版本冲突解决方法
CN109815240B (zh) 用于管理索引的方法、装置、设备和存储介质
WO2020192663A1 (zh) 一种数据管理方法及相关设备
US11514074B2 (en) Method and system for optimizing data replication for large scale archives
US10942892B2 (en) Transport handling of foreign key checks
CN110502535A (zh) 数据访问方法、装置、设备和存储介质
US11256679B2 (en) Systems and methods for storing object state on hash chains
CN108694209B (zh) 基于对象的分布式索引方法和客户端
WO2015100626A1 (zh) 修改根结点的方法和修改装置
US20090037369A1 (en) Using sibling-count in XML indexes to optimize single-path queries
AU2022203732B2 (en) System and method for reference validation of spreadsheets
CN114880286A (zh) 设备的访问方法、装置、计算设备及可读存储介质
CN117573649A (zh) 数据迁移方法、装置及电子设备
CN118260291A (zh) 一种自主比对方法、装置、计算机设备及存储介质
CN115994148A (zh) 多表数据的更新方法、装置、电子设备及可读存储介质
CN117390024A (zh) 一种数据查询方法及装置
CN116107810A (zh) 数据恢复方法、数据恢复装置、电子设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant