CN102112986A - 对基于列的数据编码的结构的高效的大规模处理 - Google Patents
对基于列的数据编码的结构的高效的大规模处理 Download PDFInfo
- Publication number
- CN102112986A CN102112986A CN2009801309787A CN200980130978A CN102112986A CN 102112986 A CN102112986 A CN 102112986A CN 2009801309787 A CN2009801309787 A CN 2009801309787A CN 200980130978 A CN200980130978 A CN 200980130978A CN 102112986 A CN102112986 A CN 102112986A
- Authority
- CN
- China
- Prior art keywords
- data
- bucket
- row
- compression
- value
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24557—Efficient disk access during query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及对大规模数据存储的高效查询处理。一示例性过程包括按照对应于不同数据列的整数编码的且压缩的值序列来检索查询所涉及的列的子集,基于出现在该数据子集的整数编码的且压缩的值序列中的压缩类型的变化来定义跨列子集的查询处理桶,以及在存储器中以按桶计的方式处理查询并且当处理该整数编码的且压缩的值序列时基于当前桶的类型来处理查询。数据的基于列的组织以及混合的行程长度编码和位打包技术的应用允许实时的高效且快速的查询响应。
Description
技术领域
本发明一般涉及用于减小大规模量的数据的大小并提高处理或查询数据的速度的、高效的基于列的数据编码。
背景
作为关于常规压缩的背景,当大量数据被存储在数据库中时,如当服务器计算机收集很长时间段内的大量数据记录或事务时,其他计算机有时候希望访问该数据或该数据的目标子集。在这一情况下,其他计算机可经由一个或多个查询运算符来查询所需数据。在这一方面,历史上,关系型数据库已经出于此目的而演变,并且已经被用于此类大规模数据集合,并且已经开发了指示数据库管理软件代表查询客户机从关系型数据库或一组分布式数据库中检索数据的各种查询语言。
传统上,关系型数据库是根据对应于记录的、具有字段的行来组织的。例如,第一行可能包括关于其对应于各列的字段的各种信息(姓名1、年龄1、地址1、性别1等),这些信息定义了该第一行的记录;而第二行可能包括关于第二行的各个字段的各种不同信息(姓名2、年龄2、地址2、性别2等)。然而,传统上,客户机对巨大量的数据的查询或对本地查询或本地商业智能检索巨大量的数据受到限制,因为它们无法满足实时或近乎实时的要求。尤其是在客户机希望具有来自服务器的最新数据的本地副本的情况下,在给定有限的网络带宽和有限的客户机高速缓存存储的情况下,从服务器传输这样大规模量的数据对于许多应用迄今仍是不切实际的。
例如,当前,扫描并聚集各自具有大约160字节数据的6亿行数据(大约100吉字节数据),使用两个“按……分组”操作和四个聚集操作作为样本查询,如行业标准TPC-H度量所测量的最快的已知关系型数据库管理系统(RDBMS)可以在大约39.9秒内递送并处理这些数据。这表示了以大约2.5Gb/秒的位速率的,或大约1500万行/秒的递送。然而,现有系统的当今状态从成本观点来看需要大约$200,000,这对于大多数用户而言是很高的进入障碍。此外,尽管很快,但39.9秒并未开始满足最严密的实时需求和要求,并且为改进留下了很大的空间。
作为进一步的背景,由于将不同的行概念化为不同记录对于作为体系结构的一部分的关系型数据库是很方便的,因此由于如何组织关系型数据库的本质,用于减小数据集大小的技术迄今已聚焦于行。换言之,行信息通过将每一记录的所有字段一起保持在一行上来保存每一记录,并且用于减小聚集数据的大小的传统技术将字段保持在一起来作为编码其自身的一部分。
行程长度编码(RLE)是一种常规形式的数据压缩,其中数据行程,即其中相同的数据值出现在许多相继的数据元素中的序列,作为单个数据值和计数来存储,而非作为原始行程来存储。实际上,对于大量的E,定义行程长度“6个E”,而非列出“EEEEEE”来作为一条目。RLE对于包含许多这样的行程的数据是有用的,例如,相对简单的图形图像,如图标、线条画和动画。然而,在数据倾向于在各个值或各个像素等之间都是唯一的或者另外地在每一处几乎都是唯一的情况下,已知RLE较低效。由此,有时候RLE本身不会有助于高效的数据减小,从而浪费了珍贵的处理时间而只有极少或没有增益。
已经应用于数据的另一种类型的压缩包括字典编码,该编码通过经由与所得数据一起使用的字典将字段数据值权标化(tokenize)为诸如顺序整数等采用紧凑表示的减小的位集以从该紧凑表示中获得原始字段数据值来操作。
已应用于数据的另一类型的压缩包括值编码,该编码通过对数据执行某种启用更紧凑表示的变换,例如对数据应用可逆数学函数,将实数转换成整数,这减少了表示数据所需的位数。例如,诸如浮点数等实数在存储器中比整数值占用更多空间,且因此可逆地将浮点值转换成整数值减小了存储大小,且因此使用该数据的处理器可在需要时导出浮点值。
已经应用于数据的还有一种类型的压缩包括位打包,该位打包对不同数据值的数量进行计数或确定不同值所跨越的范围,然后用优化函数所确定的最小数量的位来表示该组数量或值。例如,可能给定列的每一字段仅跨有限的范围,且因此代替如最初为该字段所定义的那样用例如10个位来表示每一值,结果可以是只需要6个位来表示值。位打包根据数据的更高效的6位表示来还原值。
这些常规压缩技术中的每一个已经独立地例如经由行集合运算符来应用于关系型数据库的按行组织的信息,但这些技术中的每一个遭受缺点,因为没有一种技术足以解决满足从数据库快速地将巨大量的数据递送到对于最新数据有实时要求的消费客户机的问题。主要地,常规的方法聚焦于减小所存储的数据的大小以最大化对于给定的盘大小或存储限制能存储的数据量。
然而,由于对必须被传送来完成询问的压缩存储结构的数据密集型解码或整体式大小,这些技术本身实际上可能最终会增大根据对数据的扫描或查询而花费在数据上的处理时间量。例如,采用许多常规的压缩技术,压缩数据所花费的时间越长,在大小方面所达到的节省就越大;然而另一方面,用此类常规压缩方案压缩数据所花费的时间越长,则作为结果解压并处理所花费的时间也越长。因此,常规系统无法提供不仅压缩数据,而且还以使得对数据的查询、搜索和扫描更快的方式来压缩数据的数据编码技术。
另外,网络传输带宽的限制固有地限制了客户机能多快地接收压缩数据,从而在对巨大量的数据的请求上施加了瓶颈。因此,期望提供一种在数据大小减小和查询处理速度方面达到同时增益的解决方案。还期望提供一种允许在用于大量数据的基于查询的系统中进行高效压缩和处理的改进的数据编码技术。
当今的关系型数据库和对应的压缩技术的上述缺点仅旨在提供常规系统的一些问题的概览,并且不旨在是穷尽性的。常规系统的其他问题以及此处所描述的各非限制性实施例的对应的益处可以在审阅以下描述后变得更显而易见。
概述
此处提供了简化概述以帮助能够对以下更详细的描述和附图中的示例性、非限制性实施例的各方面有基本或大体的理解。然而,本概述并不旨在作为详尽的或穷尽的概观。相反,本概述的唯一目的是以简化的形式来提出与一些示例性非限制性实施例相关的一些概念,作为以下各实施例的更为详细的描述的序言。
描述了对基于列的数据编码的结构的处理的各实施例。各非限制实施例允许在大规模数据存储上进行高效的查询处理。接收查询所蕴含的列子集来作为对应于不同数据列的整数编码的且压缩的值序列。基于在数据子集的整数编码的且压缩的值序列中出现的压缩类型的转变来定义跨列子集的查询处理桶。然后在存储器中以按桶计的方式并基于如以下更详细定义的当前桶的类型,例如,纯桶、单杂质桶、双杂质桶等,来处理查询。
数据的基于列的组织以及混合的行程长度编码和位打包技术的应用允许实时的高效且快速的查询响应。混合数据减小技术与基于列的组织相呼应的协同作用,加上归功于基于列的紧凑表示的扫描和查询效率中的增益,以常规系统的一小部分成本得到了显著改进的数据压缩,例如,以少于最快的已知常规系统的成本的1/10的成本但快了400倍。
这些和其他实施例在下面将更详细地描述。
附图简述
各非限制性实施例参考附图来进一步描述,附图中:
各非限制性实施例参考附图来进一步描述,附图中:
图1是示出基于列的编码技术以及对已编码数据的查询的存储器内客户机侧处理的一般框图;
图2是示出采用基于列的编码技术的编码装置的示例性、非限制实现的框图;
图3是示出用于向大规模数据应用基于列的编码的示例性、非限制过程的流程图;
图4是原始数据的基于列的表示的图示,其中记录被分解成其各自的字段,相同类型的字段然后被串行化来形成向量;
图5是例示记录数据的列化的非限制框图;
图6示出了对关于查询所接收到的列数据的存储器内客户机侧处理的工作可在多个核之间拆分,以便共享处理跨列组织的大量行的负担;
图7是示出字典编码的概念的非限制框图;
图8是示出值编码的概念的非限制框图;
图9是示出在混合压缩技术的一方面中应用的位打包的概念的非限制框图;
图10是示出在混合压缩技术的另一方面中应用的行程长度编码的概念的非限制框图;
图11是示出采用基于列的编码技术的编码装置的示例性、非限制实现的框图;
图12是示出根据一实现的用于向大规模数据应用基于列的编码的示例性、非限制过程的流程图;
图13-14是执行贪婪行程长度编码压缩算法的方式的示例性图示,包括任选地应用阈值节省算法来应用一替代压缩技术;
图15是进一步示出贪婪行程长度编码压缩算法的框图;
图16是示出混合的行程长度编码和位打包压缩算法的框图;
图17是示出基于总计的位节省分析来自适应地提供不同类型的压缩的混合压缩技术的应用的流程图;
图18是示出根据本发明的各实施例的基于列的编码的示例执行来减小总体数据大小的框图;
图19示出了关于纯和非纯区域之间的转换(以及相反)可应用于基于列的已编码数据的桶化过程;
图20示出了根据一实施例的关于列的桶化的非纯等级;
图21示出了将查询/扫描运算符高效地划分成对应于与当前查询/扫描相关的列中存在的不同类型的桶的子运算符;
图22示出了基于列的编码的能力,其中所得的纯桶表示数据的超过50%的行;
图23示出了用于以标准化方式指定对数据的查询的、用于查询语言的示例性、非限制查询构件块;
图24示出了对消费客户机设备所请求的对于可经由网络获得的大规模数据的样本查询的代表性处理;
图25是示出根据各实施例的用于根据列来编码数据的过程的流程图;
图26是示出根据一个或多个实施例的用于位打包整数序列的过程的流程图;
图27是示出用于对数据的基于列的表示进行查询的过程的流程图;
图28是表示其中可实现此处所描述的各实施例的示例性、非限制性联网环境的框图;以及
图29是表示其中可实现此处所描述的各实施例的一个或多个方面的示例性、非限制性计算系统或操作环境的框图。
详细描述
概览
如在背景中所讨论的,特别地,由于当前压缩技术的限制、网络上的传输带宽的限制以及本地高速缓冲存储器的限制,常规系统不足以处理在存储器内非常快地从服务器或“云”中的其他数据存储读取巨大量的数据的问题。例如,每秒读取相当于1.5T字节的数据将是非常好的技能,且目前成本是非常高的,其中最昂贵的常规解决方案以该速度的一小部分来操作(~2.5Gb/秒)。
因此,在各非限制实施例中,向大量数据应用面向列的编码技术来压缩数据且同时组织数据以使得稍后对该数据的扫描/搜索/查询运算显著地更高效。作为以下内容的路标,首先描述各实施例的概览,然后更详细地讨论示例性的、非限制任选实现来提供补充的上下文和理解。首先,描述了用于对大量数据打包的基于列的编码技术,包括经由混合压缩技术自适应地在行程长度编码的性能益处和位打包的性能益处之间进行折衷的示例性实施例。
在一示例性、非限制实施例中,在将原始数据列化成一组值序列,对每一列有一个值序列(例如,串行化数据列的各字段,例如,所有“姓”串行化为一个序列,或所有“PO订单号”串行化为另一序列,等等)之后,对该数据进行“整数化”以便形成每一列的整数序列,该整数序列根据字典编码、值编码或字典编码和值编码一起以任意次序来统一地表示。该整数化阶段得到统一表示的列向量,并且本身能达到显著的节省,尤其是在数据中记录了诸如文本串等长字段的情况下。接着,检查所有的列,压缩阶段迭代地将行程长度编码应用于任何列的行程,这将导致对整体的列向量集合的最大量的整体大小节省。
如上所述,打包技术是基于列的,其不仅提供了优秀的压缩,而且该压缩技术本身有助于在一旦将压缩的整数列向量递送到客户机侧之后快速地处理数据。
在各非限制实施例中,如图1所示,提供了基于列的编码器/压缩器110来用于压缩大规模数据存储100并且还用于使得结果对于数据的扫描/搜索/查询运算显著更高效。响应于数据处理区C中的数据消费设备120的查询,压缩器110通过数据传输区B的传输网络115来发送涉及该查询的压缩列。该数据被递送到存储器内存储130,且因此对相关列的解压可以由数据处理区C中的解码器和查询处理器140来非常快地执行。在这一点上,向涉及该查询的解压的列所表示的行应用桶走查来获得额外的高效处理层。在桶走查期间充分利用行的相似性,使得重复动作被一起执行。如以下更详细描述的,当以具有196GbRAM的标准或商用服务器将该技术应用于真实的样本数据,如大量的web通信数据或交易数据时,以大约每秒1.5T字节数据实现了服务器数据的查询/扫描,这是超越常规系统的能力的极大飞跃,却只花费了显著降低的硬件成本。
尽管可被压缩的具体数据类型决不限于任何特定数据类型,且取决于对巨大量的数据的大规模扫描的情形数量类似地是无限的,但在实时商业智能应用中将这些技术应用于商业数据或记录的商业重要性是不容置疑的。该压缩技术所实现的查询处理速度的极大获益将实时报告和趋势标识带到了一个全新的水平。
基于列的数据编码
如在概览中所提到的,在各实施例中可向大量数据应用面向列的编码和压缩来压缩且同时组织数据以使得稍后对数据的扫描/搜索/查询运算显著更高效。在各实施例中,为了开始编码和压缩,最初将原始数据重新组织为列化的数据流。
编码器的一个实施例在图2中概括地示出,其中在200处,从存储接收或读取原始数据,此时编码装置和/或编码软件250在210处将数据组织为列。在220处,将列流变换成统一向量表示。例如,可应用整数编码来将像姓名或地点这样的各个条目映射到整数。这一整数编码可以是字典编码技术,该技术可将数据减小2倍到10倍。另外,或另选地,值编码可在大小上提供1倍到2倍的减小。这在220处为每一列留下了一整数向量。这一性能提高对所压缩的数据敏感,并且这一大小减小范围仅作为非限制估计来给出,以便给出不同步骤的相对性能的一般概念。
然后,在230处,可进一步压缩已编码的统一列向量。在一个实施例中,应用行程长度编码技术,该技术确定所有列上的最频繁的值或值的出现,在这一情况下,为该值定义一行程长度,且该过程迭代直到行程长度编码的益处为边际效益的时刻,例如对于在列中具有至少64次出现的重复出现的整数值。
在另一实施例中,检查应用行程长度编码所得的位节省,并且在该迭代过程的每一步,通过应用对行程长度的重新排序和定义来选择各列中达到最大位节省的列。换言之,由于目标是用尽可能少的位来表示列,因此在每一步,在提供最大节省的列处最大化了位节省。就这一点而言,行程长度编码本身可以提供显著的压缩改善,例如100倍或更多。
在另一实施例中,在230处应用混合压缩技术,该技术采用了位打包和行程长度编码的组合。应用检查两种技术的潜在节省的压缩分析,并且在例如认为行程长度编码导致不足够的净位节省的情况下,则向列向量的其余值应用位打包。因此,一旦根据一个或多个准则确定行程长度节省是最小的,则该算法对于该列的其余相对唯一的值切换到位打包。例如,在列中所表示的值变得相对唯一(其中非独唯一或重复值已经被行程长度编码)的情况下,可对这些值应用位打包而非行程长度编码在240处,输出的是对应于根据上述技术编码并压缩的列值的一组压缩的列序列。
图3概括地根据以原始数据300的输入为开始的流程图描述了上述方法。在310,如上所述,根据原始数据300的列来重新组织数据,而不是像常规系统那样将记录的每一字段保持在一起。例如,如图4所示,每一列形成一独立的序列,如序列C401、C402、C403、C404、C405、C406。在零售交易数据是该数据的情况下,例如,列C401可能是产品价格的串,列C402可能表示购买日期的串,列C403可能表示商店位置,等等。考虑到计算机系统所收集的大多数真实世界数据在所表示的值方面并不是非常不同的,因此基于列的组织维持了数据类型内的固有相似性。在320处,基于列的数据经历一个或多个转换来形成统一表示的基于列的数据序列。在一个实施例中,步骤320经由字典编码和/或值编码将每一列简化为数据的整数序列。
在330处,用行程长度编码过程以及可任选地用位打包来压缩基于列的序列。在一个实施例中,行程长度编码过程对所有各列中达到最高压缩节省的列的列数据值序列重新排序。由此,行程长度编码达到最高节省的列被重新排序来对由行程长度编码替换的共同值进行分组,然后为重新排序的组定义行程长度。在一个实施例中,跨各列迭代地应用行程长度编码算法,在每一步检查每一列来确定将达到最高压缩节省的列。
当根据一个或多个准则应用行程长度编码的益处变为边际效益或最小,如不足够的位节省或节省小于一阈值时,则其应用的益处相应地下降。结果,该算法可以停止,或者对于每一列中未被行程长度编码来编码的剩余值,可应用位打包来进一步降低对这些值的存储要求。在组合中,混合行程长度编码和位打包技术可能是强大的,以便减小列序列,尤其是具有序列中表示的有穷或有限数量的值的那些序列。
例如,字段“性别”仅有两个字段值:男和女。采用行程长度编码,这一字段可被相当简单地表示,只要数据是根据如上所述的原始数据的基于列的表示来编码的。这是因为背景中所描述的聚焦于行的常规技术实际上通过将每一记录的字段保存在一起而破坏了列数据的共同性。接在诸如“21”等年龄值后面的“男”不如仅仅接在“男”或“女”值后面的“男”值压缩得那样好。由此,数据的基于列的组织启用了高效的压缩,且该过程的结果是数据340的一组离散的、统一表示且压缩的、基于列的序列。
图5给出了基于实际数据的列化过程的示例。图5的示例针对4个数据记录500、501、502和503,但这仅出于图示简单的目的,因为本发明可适用于上万亿字节的数据。一般而言,当计算机系统记录交易数据时,它是逐个记录地记录的,且一般按照接收记录的时间次序来记录。由此,数据实际上具有对应于每一记录的行。
在图5中,记录500具有带有值“Jon”511的姓名字段510、带有值“555-1212”521的电话字段520、带有值“jon@go”531的电子邮件字段530、带有值“2 1st St”541的地址字段540、以及带有值“Wash”551的州字段550。
记录501具有带有值“Amy”512的姓名字段510、带有值“123-4567”522的电话字段520、带有值“Amy@wo”532的电子邮件字段530、带有值“1 2nd Pl”542的地址字段540、以及带有值“Mont”552的州字段550。
记录502具有带有值“Jimmy”513的姓名字段510、带有值“765-4321”523的电话字段520、带有值“Jim@so”533的电子邮件字段530、带有值“9FlyRd”543的地址字段540、以及带有值“Oreg”553的州字段550。
记录503具有带有值“Kim”514的姓名字段510、带有值“987-6543”524的电话字段520、带有值“Kim@to”534的电子邮件字段530、带有值“91Y St”544的地址字段540、以及带有值“Miss”554的州字段550。
当行表示560被列化为重新组织的列表示570时,代替具有各自有5个字段的4个记录,形成对应于这些字段的5个列。
由此,列1对应于带有值“Jon”511、之后是值“Amy”512、之后是值“Jimmy”513、之后是值“Kim”514的姓名字段510。类似地,列2对应于带有值“555-1212”521、之后是值“123-4567”522、之后是值“765-4321”523、之后是值“987-6543”524的电话字段520。列3对应于带有值“jon@go”531、之后是值“Amy@wo”532、之后是值“Jim@so”533、之后是值“Kim@to”534的电子邮件字段530。进而,列4对应于带有值“2 1st St”541、之后是值“1 2nd Pl”542、之后是值“9 Fly Rd”543、之后是值“91 Y St”544的地址字段540。以及,列5对应于带有值“Wash”551、之后是值“Mont”552、之后是值“Oreg”553、之后是值“Miss”554的州字段550。
在一个实施例中,当对应于上述技术的压缩列被加载到消费客户机系统上的存储器中时,该数据跨每一列C1、C2、C3、C4、C5、C6来分段,以形成段600、602、604、606等等。在这一点上,由于每一段可包括数亿行或更多,并行化提高了例如根据查询对数据的处理或扫描速度。每一段的结果被聚集,以形成一组完整的结果,而每一段被分开处理。
图7是示出此处所描述的实施例采用的字典编码的非限制示例的框图。典型的城市列700可包括值“Seattle”、“Los Angeles”、“Redmond”等等,且这些值可以不断地重复自己。采用字典编码,已编码的列710包括对应于每一不同值的码元,如每一值一个唯一整数。由此,代替多次表示文本“Seattle”,存储整数“1”,这要紧凑得多。越经常重复自己的值可以用到最紧凑表示(最少位、最少位变化等)的映射来枚举。值“Seattle”仍作为字典720的一部分被包括在编码中,但是“Seattle”只需被表示一次而非许多次。已编码列710的存储节省远超过了字典720所蕴含的额外存储。
图8是示出此处所描述的实施例采用的值编码的非限制示例的框图。列800表示销售额,且包括典型的包括小数的美元和美分表示,这涉及浮点存储。为了使存储更紧凑,采用值编码来编码的列810可向其应用因子10,例如102,以便使用整数代替浮点值来表示各值,其中整数需要较少的位来存储。该变换可类似地应用于减少表示值的整数数量。例如,列中始终以百万结束的值,如2,000,000、185,000,000等都可除以106来将值减小到更紧凑的表示2、185等。
图9是示出此处所描述的实施例采用的位打包的非限制示例的框图。列900表示通过字典和/或值编码来整数化的订单量,但保留了每行32位来表示这些值。位打包试图对段中的值使用最少数量的位。在该示例中,可使用10位/行来表示值590、110、680和320,这表示了对于被应用来形成列910的第一层位打包的充分节省。
位打包还可移除共同的10(或其他数字)的幂来形成第二打包列920。由此,如果值如同该示例中那样以0结束,这意味着不需要使用3位/行来表示订单量,且将存储结构减少到7位/行。类似于字典编码,位节省远超过了由于将数据恢复到列900所需的元数据(如使用10的几次幂)而引起的任何增加的存储。
作为形成第三打包列930的另一层位打包,可以认识到它采取7位/行来表示像68那样的值,但是由于最低值是11,则范围可位移11(将每一个值减去11),因而最高数是68-11=57,这可以仅用6位/行来表示,因为有26=64个值可能性。尽管图9表示了打包层的特定次序,但各层可用不同的次序来执行,或者另选地,打包层可被选择性地移除或用其他已知的位打包技术来补充。
图10是示出此处所描述的实施例采用的行程长度编码的非限制示例的框图。如图所示,由于值的重复,诸如列1000等表示订单类型的列可用行程长度编码来高效地编码。列值行程表1010将订单类型映射到订单类型的行程长度。尽管表1010的元数据的表示上允许些许变化,但基本思想是行程长度编码对于100的行程长度可给出50倍的压缩,这要优于位打包一般可为同一数据集提供的增益。
图11是此处提供的一实施例的概括框图,其中将图7-10的技术合成到统一编码和压缩方案的各实施例中。原始数据1100根据列组织1110被组织为列流。字典编码1120和/或值编码1130提供了如上所述的相应大小减小。然后,在混合RLE和位打包阶段,压缩分析1140在确定是应用行程长度编码1150还是位压缩1160时跨各列检查潜在的位节省。
在图12的流程图中对图11进行扩展。在1200,根据固有行表示来接收原始数据。在1210,将数据重新组织为列。在1220,应用字典和/或值编码来第一次减小数据。在1230,可应用如上所述的混合RLE和位打包技术。在1240,存储基于压缩的且编码的列的数据序列。然后,当客户机请求全部基于压缩的已编码列的数据序列或请求其一子集时,在1250,将受影响的列发送到作出请求的客户机。
图13是执行混合压缩技术的压缩分析的示例性方式的框图。例如,从列1300中计算直方图1310,该直方图表示值的出现频率,或各个行程长度的出现频率。任选地,可设置阈值1312,使得行程长度编码不应用于其中行程长度增益可能最小的、数量上较少的值的重复出现。另选地,或另外地,位节省直方图1320不仅表示了值的出现频率,而且还表示了将通过应用该混合压缩模型的压缩技术中的一种或另一种来达到的总的位节省。另外,再一次可任选地应用阈值1322以便画出其中行程长度编码益处不足以应用该技术的线。取而代之,可对列的这些值应用位打包。
另外,任选地,在应用列1300的行程长度编码之前,可对列1300重新排序来将所有最相似的值分组为经重新排序的列1300。在该示例中,这意味着将A分组在一起以供行程长度编码,并留下B进行位打包,因为对于2个B值,频率和总的位节省都未证明行程长度编码是合理的。在这一点上,可向其他列应用重新排序来保持记录数据处于锁定步骤,或者它可经由关于如何撤消行程长度编码的重新排序的列专用元数据来记住。
图14示出了一相似的示例,其中向相似的列1400应用压缩分析,但是更改了每一次替换行程长度的位节省,使得现在,根据混合压缩分析判断要对2个B值执行行程长度编码(即使是在10个A值之前),因为2个B值导致更高的净位节省。在这一点上,与贪食者从具有不同食物的10个不同盘子中进行选择非常相像,应用行程长度编码是“贪婪的”,这表现在它在每一步都跨所有列寻找大小减小方面的最高增益。类似于图13,可构建频率直方图1410和/或位节省直方图1420数据结构,以便作出关于是应用如所描述的行程长度编码还是位打包的确定。同样,在决定是否采取RLE或位打包时可使用任选阈值1412和1422。经重新排序的列1430可帮助行程长度编码定义更长的行程长度,且因此达到更大的行程长度节省。
图15示出了行程长度编码的“贪婪”方面,该方面在每一步跨所有列来检查哪里达到最高位节省,并且可任选地包括将列重新排序为列1530、1532等来最大化行程长度节省。在某一点,行程长度节省可能相对不重要,因为值是相对唯一的,此时停止行程长度编码。
在混合实施例中,向其余值的范围应用位打包,这在图16中示出。在这一点上,应用混合压缩技术,经重新排序的列1600包括RLE部分1610和位打包部分1620,它们一般分别对应于重复出现的值和相对唯一的值。类似地,经重新排序的列1602包括RLE部分1612和BP部分1622。
在图17所示的一个实施例中,混合算法计算来自位打包的位节省和来自行程长度编码的位节省1700,然后在1710将来自位打包的位节省和来自行程长度的位节省进行比较或检查这两种节省以便在1720确定哪一压缩技术最大化位节省。
上述编码和压缩技术的示例性执行示出了可在真实数据样本1801、1802、1803、1804、1805、1806、1807和1808上达到的显著增益,其范围在大约9倍到99.7倍的性能改进,且特别地取决于特定的大规模数据样本中的相对的值重复量。
图19是示出此处在各实施例中描述的列化、编码和压缩过程的最终结果的框图。在这一点上,每一列C1、C2、C3、…、CN包括具有向其应用行程长度编码的同类重复值的区域,以及图中标记为“其他”的、表示列中的各组异类值的其他区域。具有由行程长度定义的相同的重复值的区域是纯区域1920,且具有多样化值的区域是非纯区域1910,如图例中所指示的。在这一方面,当一个人的眼睛“走查”各列时,作为此处讨论的压缩技术的固有好处,浮现数据上的新视图。
跨所有各列,在非纯区域1910和纯区域1920之间或从相反方向的第一转换点,按照从第一行到转换点处的行的各行来定义桶。在这方面,桶1900沿着各列向下在每一转换点处定义,如虚线所示。桶1900由各转换之间的行来定义。
图20示出了基于跨特定行的纯和非纯区域的数量来为桶定义的命名法。纯桶2000是没有非纯区域的桶2000。单非纯桶2010是跨该桶的各行具有1个非纯区域的桶。双非纯桶2010是跨该桶的各行具有2个非纯区域的桶。三非纯桶具有3个非纯区域,以此类推。
由此,在示例性数据加载过程期间,以适合稍后的高效查询的表示来对数据进行编码、压缩、存储,并且压缩技术可以是所使用的查找一段内的数据分布并试图比位打包更频繁地使用RLE压缩的技术。在这一点上,RLE对于压缩和查询都提供了以下优点:(A)RLE通常比位打包需要少得多的存储,以及(B)RLE包括高效地“快进”通过数据范围同时执行诸如“按……分组”、“过滤”和/或“聚集”等查询构件块运算的能力;这些运算可以在数学上变成对按列组织的数据的高效运算。
在各非限制实施例中,代替在对同一段中的另一列进行排序之前一次对一个列进行排序,该压缩技术基于数据的分布来对数据行进行聚类,且由此增加了在段中对RLE的使用。如此处所使用的,术语“桶”用于描述行的聚类,为了避免疑惑,该术语应被认为与术语“分区”不同,分区是定义明确的在线分析处理(OLAP)和RDBMS概念。
以上讨论的技术由于认识到数据分布是歪斜的且在大量数据中很少存在均匀分布,因而是有效的。在压缩用语中,算术编码通过以下来充分利用这一点:以总计使用较少的位为目的,使用较少的位来表示频繁使用的字符,并使用较多的位来表示不频繁使用的字符。
采用位打包,利用固定大小的数据表示来进行较快的随机存取。然而,此处描述的压缩技术还具有使用RLE的能力,这提供了对于较频繁的值使用较少的位的方式。例如,如果原始表(为图示简明起见,包括一个列“Col1”)表现如下:
Col1 |
100 |
100 |
100 |
100 |
200 |
300 |
400 |
则在压缩之后,Col1表现如下,其被划分成应用行程长度编码的第一部分和应用位打包的第二部分:
如从以上可见,最常见的值100的出现被折叠成RLE,而较不频繁出现的值仍以固定宽度的、经位打包的存储来存储。
在这一点上,上述数据打包的实施例包括两个不同阶段:(1)数据分析,用于确定桶化,以及(2)段数据的识别,用于遵守桶化布局。这两个阶段中的每一个在以下示例性地详述。
关于确定桶化的数据分析,目标是用RLE来覆盖段内尽可能多的数据。由此,该过程朝向偏向“较厚”列,即具有大基数的列来偏斜,而不是将在查询期间被更频繁使用的列。也可应用基于使用的优化。
对于另一简单示例,出于图示的目的,使用以下的小表。实际上,此类小表一般不被包括在上述压缩的范围内,因为对此类表的压缩的好处往往并非有价值的。并且,此类小表一般不被包括是因为在执行编码之后发生压缩,并且在一个实施例中压缩对数据标识(ID)而非值本身起作用。由此,为了图示,还添加了行号列。
4 | 100 | 32 |
5 | 400 | 1231 |
6 | 100 | 111 |
7 | 100 | 12 |
在各列上,桶化过程通过找到在段数据中占据最多空间的单个值来开始。如上关于图13和14所提到的,这可例如如下对每一列使用简单直方图统计来完成。
列 | 最常见的值 | 出现次数 | 节省的空间 |
Col1 | 100 | 5 | 45位 |
Col2 | 1231 | 3 | 33位 |
一旦选择了该值,对段中的行进行逻辑重排序,使得该值的所有出现按顺序出现,以便最大化RLE行程的长度:
在一个实施例中,在每一列段中,属于同一行的所有值存在于同一索引处,例如,col1[3]和col2[3]都属于第三行。确保这一点提供了对同一行中的值的高效的随机存取,而不会导致通过用于每一次存取的映射表的间接性的成本。因此,在对贪婪RLE算法或混合RLE和位打包算法的应用的当前描述的实施例中,当对一列中的值重新排序时,这意味着其他列段中的值也被重新排序。
在以上示例中,现在存在两个桶:{1,2,4,6,7}和{3,5}。如所提到的,此处所应用的RLE是贪婪算法,这意味着该算法遵循以找到全局最优为期望来在每一阶段作出局部最优选择的问题解决元启发(metaheuristic)。在找到最大桶的第一阶段之后,下一阶段是选择次大桶,并且在该桶内重复该过程。
原始行 | Col1 | Col2 |
现在,当相应地对行重排序时,有三个桶:{2,7}、{1,4,6}、{3,5}。最大桶是第二个,但是那里没有重复值。第一个桶所有列具有RLE行程,并且其余值是唯一的,因此知道在Col1中不会得到进一步的RLE增益。考虑{3,5}桶,有可被转换到RLE的另一值1231。有趣的是,1231也出现在前一桶上,并且该桶可被重新排序,使得1231在底部,并准备好与下一桶的顶部合并。下一步得到以下结果:
在以上示例中,现在存在四个桶:{2,7}、{6,4}、{1}、{3,5}。当无法进一步减少更多数据时,该过程移至段数据重组织的下一阶段。
尽管最上面的图示也对行重新排序,但出于性能原因,对桶的确定可以纯粹基于来自对每一列段中的数据重排序的动作的统计。对每一列段中的数据重排序的动作可以基于可用核使用作业调度器来并行化。
如所提到的,对上述技术的使用对于小数据集是不实用的。对于顾客数据集,上述技术频繁地经历数万步骤,这可能会耗时。由于该算法的贪婪本质,绝大部分的空间节省发生在前几步中。在前几千步中,会被节省的大多数空间已经被节省了。然而,如在压缩的数据的扫描侧上观察到的那样,打包的列中的RLE的存在在查询期间给出了显著的性能提升,因为在查询期间即使是微小的压缩增益也会收获报偿。
由于一次处理一个段,因此可使用多个核,从而将从数据源中将数据读入段中所花费的时间与压缩前一段所花费的时间重叠。采用常规技术,以约100K行/秒的速率从关系型数据库中读取,8M行的段将花费约80秒,这是可供这一工作使用的相当大量的时间。任选地,在一个实施例中,对前一段的打包也可在一旦用于下一段的数据可用时就停止。
基于列的数据编码的处理
如所提到的,根据基于列的编码的各实施例的组织数据的方式有助于在数据的消费侧的高效扫描,其中处理可以在存储器中在选定数量的列上非常快地执行。上述数据打包和压缩技术在行编码期间更新压缩阶段,而扫描包括查询优化器和处理器来充分利用智能编码。
该扫描或查询机制可用于高效地向商业智能(BI)查询返回结果,并且是针对由上述数据打包和压缩技术产生的聚类布局而设计的,且被优化来得到增加的RLE使用,例如,期望在查询处理期间,将使用RLE来压缩大量的用于查询的列。另外,该快速扫描过程引入了面向列的查询引擎,而非在列存储上的行级查询处理器。由此,即使是在包含位打包数据(不是RLE数据)的桶中,由于数据局部性而获得的性能增益也可能是显著的。
除了引入上述数据打包和压缩技术以及高效扫描之外,能以高度有效的方式来支持:查询中的“或”片(slice)以及已经指定了关系的多个表之间的“联接”(Join)。
如以上所提到的,该扫描机制采用了段包含包含跨段的桶,并且在“纯”RLE行程或“非纯”的其他位打包存储中包含列值,如图19所示。
在一个实施例中,在段上调用扫描,关键是一次对一个桶工作。在桶内,取决于查询规范,扫描过程在各阶段内执行面向列的处理。第一阶段是收集关于什么列区域是纯的以及什么区域是非纯的统计信息。接着,可以处理过滤,之后处理分组操作,之后处理代理列。接着,可处理聚集作为另一阶段。
如早先所提到的,注意到此处呈现的用于扫描的各实施例实现了面向列的查询处理,而非像常规系统那样是面向行的。由此,对于这些阶段的每一个,所执行的实际代码可以特定于:(1)所操作的列是否是行程长度编码的,(2)用于位打包的压缩类型,(3)结果是稀疏还是致密的,等等。对于聚集,考虑另外的因素:(1)编码类型(散列或值),(2)聚集函数(求和/最小/最大/计数),等等。
一般而言,扫描过程因而遵循图21的形式,其中来自各种标准查询/扫描运算符2100的查询结果是所有桶行的函数。查询/扫描运算符2100实际可以在数学上进行分解,使得过滤、分组、代理列和聚集在各阶段中彼此分开地处理。在这一点上,对于每一处理步骤,根据桶走查过程,在2110处,根据桶的不同纯度来处理运算符。因此,代替对所有桶行的一般化的且昂贵的扫描,采用此处描述的编码和压缩算法的工作引入的不同桶的专门化,结果因而是纯桶、单非纯桶、双非纯桶等等的处理的聚集结果。
图24示出了桶的示例分布以及该压缩体系结构的能力,因为对纯桶执行的处理由于处理数学缩减到简单运算而是最快的,之后的第二快的是单非纯桶,且对于其他的非纯桶以此类推。此外,已经发现数量大得令人惊奇的桶是纯的。例如,如图25所示,对于查询所蕴含的六个列,如果每一列具有大约90%的纯度(意味着90%的值由于相似数据而用行程长度编码来表示),则大约60%的桶是纯的,大约1/3将是单非纯桶,大约8%将是双非纯桶,且其余将总计仅有1%。由于对纯桶的处理是最快的,且对单非纯桶和双非纯桶的处理仍然是相当快的,因此具有3个或更多非纯区域的桶的“更复杂”处理被保持在最小。
图23描绘了具有某些样本标准查询构件块的样本查询2300,这些标准查询构件块例如样本“按列过滤”查询构件块2302、样本“按列分组”查询构件块2304、以及样本“按列聚集”查询构件块2306。
图24是示出通过列选择性而产生的带宽减少的另一方面的框图。回顾样本查询2400,可以看到涉及所有列2420中不超过6个列2410,且因此只需要将6个列加载到本地RAM中来获得高效的查询。
因此此处已描述了各实施例。图25示出了用于编码数据的一个实施例,包括在2500处根据对应于该数据的不同数据字段的一组基于列的值序列来组织该数据。然后,在2510,根据诸如字典编码和/或值编码等至少一个编码算法将该组基于列的值序列变换成一组基于列的整数序列。然后,在2520,根据至少一个压缩算法来压缩该组基于列的整数序列,压缩算法包括跨该组基于列的整数序列应用的贪婪行程长度编码算法、或位打包算法、或行程长度编码和位打包的组合。
在一个实施例中,分析该整数序列来确定是应用行程长度编码(RLE)压缩还是位打包压缩,包括分析RLE压缩相对于位打包压缩的位节省来确定何处达到最大位节省。该过程可包括生成直方图来协助确定何处达到最大位节省。
在另一实施例中,如图26所示,位打包技术包括在2600处接收表示数据列的整数值序列的各部分,以及位打包的潜在缩减的三个阶段。在2610,可基于表示数据字段所需的位数来缩减数据。在2620,可通过跨该整数序列的各部分的值移除任何共享的数字幂来缩减数据。在2630,也可通过跨一范围偏移整数序列的各部分的值来缩减数据。
在另一实施例中,如图27的流程图所示,响应于查询,在2700,检索数据的子集作为对应于数据的不同列的整数编码的且压缩的值序列。然后,在2710,基于出现在数据子集的整数编码的且压缩的值序列的任一个中的压缩类型的变化来定义跨数据子集的处理桶。接着,在2720,基于为了得到高效查询处理而处理的当前桶的类型来执行查询运算。这些运算可以在存储器内执行,并且在多核体系结构中并行化。
不同的桶包括:(1)跨各序列桶中不同部分的值都是根据行程长度编码压缩来压缩的,从而定义了纯桶,(2)除了一个部分之外都是根据行程长度编码来压缩的,从而定义了单非纯桶,或(3)除了两个部分之外都是根据行程长度编码来压缩的,从而定义了双非纯桶。
改进的扫描允许更高效地执行各种标准查询和扫描运算符,尤其是对于最纯的桶。例如,当应用桶走查技术且基于桶类型来执行处理时,逻辑“或”查询片运算、已指定了关系的多个表之间的查询联接运算、过滤运算、分组运算、代理列运算或聚集运算都可以更高效地执行。
示例性联网和分布式环境
本领域普通技术人员可以理解,此处所描述的基于列的编码和查询处理的各实施例可以结合任何计算机或其它客户机或服务器设备来实现,该任何计算机或其它客户机或服务器设备可作为计算机网络的一部分来部署或者被部署在分布式计算环境中,并且可以连接到任何种类的数据存储。就此,此处所描述的各实施例可以在具有任意数量的存储器或存储单元以及出现在任意数量的存储单元上的任意数量的应用程序和进程的任何计算机系统和环境中实现。这包括但不限于具有部署在具有远程或本地存储的网络环境或分布式计算环境中的服务器计算机和客户计算机的环境。
分布式计算通过计算设备和系统之间的通信交换提供了计算机资源和服务的共享。这些资源和服务包括信息的交换、对于诸如文件等对象的高速缓存存储和盘存储。这些资源和服务还包括多个处理单元之间的处理能力共享以便进行负载平衡、资源扩展、处理专门化,等等。分布式计算利用网络连接,从而允许客户机利用它们的集体力量来使整个企业受益。在这一点上,各种设备可具有应用、对象或资源,它们可以协作来执行本发明的各实施例中的任一个的一个或多个方面。
图28提供了示例性的联网或分布式计算环境的示意图。该分布式计算环境包括计算对象2810、2812等以及计算对象或设备2820、2822、2824、2826、2828等,这些计算对象或设备可包括如由应用程序2830、2832、2834、2836、2838表示的程序、方法、数据存储、可编程逻辑等。可以理解,对象2810、2812等以及计算对象或设备2820、2822、2824、2826、2828等可包括不同的设备,诸如PDA、音频/视频设备、移动电话、MP3播放器、个人计算机、膝上型计算机等。
每一个对象2810、2812等以及计算对象或设备2820、2822、2824、2826、2828等可通过通信网络2840直接或间接与一个或多个其他对象2810、2812等以及计算对象或设备2820、2822、2826、2828、2828等进行通信。即使在图28中被示为单个元件,但网络2840可包括向图28的系统提供服务的其他计算对象或解释设备,和/或可表示未示出的多个互连网络。每一个对象2810、2812等或2820、2822、2824、2826、2828等还可包含诸如应用2830、2832、2834、2836、2838等应用,应用可利用API或适用于与根据本发明的各实施例来提供的基于列的编码和查询处理进行通信或适用于该基于列的编码和查询处理的实现的其他对象、软件、固件和/或硬件。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可以由有线或无线系统、本地网络或广泛分布的网络连接在一起。当前,许多网络被耦合至因特网,后者为广泛分布的计算提供了基础结构并包含许多不同的网络,但任何网络基础结构可用于变得与如各实施例中所描述的基于列的编码和查询处理相关联的示例性通信。
因此,可以利用诸如客户机/服务器、对等、或混合体系结构等网络拓扑结构和网络基础结构的主机。“客户机”是使用与它无关的另一类或组的服务的一个类或组中的成员。客户机可以是进程,即大致上是请求由另一程序或进程提供的服务的一组指令或任务。客户机进程利用所请求的服务,而不必“知道”有关其他程序或服务本身的任何工作细节。
在客户机/服务器体系结构中,尤其在网络化系统中,客户机通常是访问由例如服务器等另一计算机提供的共享的网络资源的计算机。在图28的图示中,作为非限制性示例,计算机2820、2822、2824、2826、2828等可被认为是客户机而计算机2810、2812等可被认为是服务器,其中服务器2810、2812等提供数据服务,诸如从客户机计算机2820、2822、2824、2826、2828等接收数据、存储数据、处理数据、向客户机计算机2820、2822、2824、2826、2828发送数据等,但任何计算机都可取决于环境而被认为是客户机、服务器或两者。这些计算设备中的任一个可以处理数据、编码数据、查询数据、或请求可蕴含如此处对于一个或多个实施例描述的基于列的编码和查询处理的服务或任务。
服务器通常是可通过诸如因特网或无线网络基础架构等远程网络或本地网络访问的远程计算机系统。客户机进程可以在第一计算机系统中活动,而服务器进程可以在第二计算机系统中活动,它们通过通信介质彼此通信,从而提供分布式功能并允许多个客户机利用服务器的信息收集能力。按照基于列的编码和查询处理来利用的任何软件对象可以被单独提供或分布在多个计算设备或对象上。
在其中通信网络/总线2840是因特网的网络环境中,服务器2810、2812等可以是客户机2820、2822、2824、2826、2828等通过诸如超文本传输协议(HTTP)等多种已知协议中的任一种与其通信的web服务器。服务器2810、2812等也可担当客户机2820、2822、2824、2826、2828等,这是分布式计算环境的特性。
示例性计算设备
如上所述,有利的是,此处所描述的技术可适用于其中期望快速查询大量数据的任何设备。从而,应当理解,构想了所有种类的手持式、便携式和其它计算设备和计算对象来用于各实施例,即,在设备可能期望扫描或处理巨大量的数据来得到快速且高效的结果的任何地方。因此,以下在图29中描述的通用远程计算机只是计算设备的一个示例。
尽管并非所需,但各实施例可以部分地经由操作系统来实现,以供设备或对象的服务开发者使用,和/或被包括在用于执行此处所描述的各实施例的一个或多个功能方面的应用软件中。软件可以在由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的诸如程序模块等计算机可执行指令的通用上下文中描述。本领域的技术人员可以理解,计算机系统具有可用于传递数据的各种配置和协议,并因此没有特定配置或协议应被认为是限制性的。
因此,图29示出了其中可实现各实施例的一个或多个方面的合适的计算系统环境2900的一个示例,尽管如上所述,计算系统环境2900仅为合适的计算环境的一个示例,并非对使用范围或功能提出任何限制。也不应该将计算环境2900解释为对示例性操作环境2900中示出的任一组件或其组合有任何依赖性或要求。
参考图29,用于实现一个或多个实施例的示例性远程设备包括计算机2910形式的通用计算设备。计算机2910的组件可以包括,但不限于,处理单元2920、系统存储器2930和将包括系统存储器在内的各种系统组件耦合至处理单元2922的系统总线2920。
计算机2910通常包括各种计算机可读介质,并可以是可由计算机2910访问的任何可用介质。系统存储器2930可以包括诸如只读存储器(ROM)和/或随机存取存储器(RAM)等易失性和/或非易失性存储器形式的计算机存储介质。作为示例而非限制,存储器2930还可以包括操作系统、应用程序、其他程序模块、和程序数据。
用户可以通过输入设备2940向计算机2910输入命令和信息。监视器或其他类型的显示设备也经由接口,诸如输出接口2950连接至系统总线2922。除监视器之外,计算机还可以包括其他外围输出设备,如扬声器和打印机,它们可以通过输出接口2950连接。
计算机2910可使用至一个或多个远程计算机,诸如远程计算机2970的逻辑连接在网络化或分布式环境中操作。远程计算机2970可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点、或任何其他远程媒体消费或传输设备,并且可以包括上面关于计算机2910所描述的任何或全部元件。图29所示的逻辑连接包括诸如局域网(LAN)或广域网(WAN)等的网络2972,但也可以包括其他网络/总线。这样的联网环境在家庭、办公室、企业范围计算机网络、内联网和因特网中是常见的。
如上所述,尽管结合各种计算设备和网络体系结构描述了各示例性实施例,但基本概念可被应用于其中需要压缩大规模数据或在大规模数据上处理查询的任何网络系统和任何计算设备或系统。
而且,存在实现相同或相似功能的多种方法,例如适当的API、工具箱、驱动程序代码、操作系统、控件、独立或可下载软件对象等,它们使得应用和服务能够使用该高效的编码和查询技术。由此,此处的各实施例从API(或其他软件对象)的观点以及从提供基于列的编码和/或查询处理的软件或硬件对象构想。因此,此处描述的各实施例可以具有完全采用硬件、部分采用硬件并且部分采用软件、以及采用软件的方面。
在本文中使用的词语“示例性”意味着用作示例、范例或说明。为避免疑惑,本文公开的主题不受限于这样的示例。此外,本文描述为“示例性”的任何方面或设计不必解释成优于其他方面或设计或比其他方面或设计有利,它也不旨在排除本领域的普通技术人员所知的等效示例性结构和技术。而且,就术语“包括”、“具有”、“包含”和其他类似的词语在详细描述或权利要求书中的使用而言,为避免疑惑,这样的术语旨在以类似于术语“包括”作为开放的过渡词的方式解释而不排除任何附加或其他元素。
如上所述,此处所述的各种技术可结合硬件或软件,或在适当时以两者的组合来实现。如在此所使用的,术语“组件”、“系统”等同样指的是计算机相关实体,或者是硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和/或计算机。作为说明,运行在计算机上的应用程序和计算机本身都可以是计算机组件。一个或多个组件可以驻留在进程和/或执行的线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。
如前所述的系统是利用多个组件之间的交互来描述的。可以了解,这样的系统和组件可以包括这些组件或其中指定的子组件,某些指定的组件或子组件,和/或附加的组件,并根据前述的内容的各种置换和组合。子组件也可以作为可通信地耦合到其他组件的组件来实现,而不是包括在父组件内(层次性)。另外,应注意到一个或多个组件可被组合成提供聚集功能的单个组件,或被分成若干单独的子组件,且诸如管理层等任何一个或多个中间层可被设置成通信耦合到这样的子组件以便提供集成功能。此处所描述的任何组件也可以与一个或多个此处没有专门描述的但本领域技术人员广泛地知道的其他组件进行交互。
考虑到以上描述的示例性系统,参考各附图的流程图将可以更好地理解依照所描述的主题实现的方法。尽管出于说明简单的目的,各方法被显示和描述为一系列框,但应该理解和明白,所要求保护的主题不受框次序的限制,因为一些框能够以不同的次序和/或与在此描绘和描述的其他框并发地发生。尽管经由流程图示出了非顺序或分支的流程,但可以理解,可实现达成相同或类似结果的各种其他分支、流程路径和框次序。而且,并非所有示出的框都是实现以下描述的方法所必需的。
除了此处所描述的各实施例之外,可以理解,可以使用其他相似的实施例或者可对所述实施例作出修改和添加以便执行对应的实施例的相同或等效的功能而不背离这些实施例。此外,多个处理芯片或多个设备可共享此处所描述的一个或多个功能的执行,并且类似地,存储可以跨多个设备实现。因此,本发明不应限于任何单个实施例,而是应该根据所附权利要求书的广度和范围来解释。
Claims (21)
1.一种用于处理数据的方法,包括:
响应于查询,接收2700所述数据的子集作为对应于所述数据的不同列的整数编码的且压缩的值序列;
基于所述数据的子集的整数编码的且压缩的值序列的任一个中出现的压缩类型的变化来定义跨作为整数编码的且压缩的值序列接收的所述数据的子集的处理桶2710;以及
在处理所述整数编码的且压缩的值序列以返回查询结果时,基于当前桶的类型来执行由所述查询定义的运算2720。
2.如权利要求1所述的方法,其特征在于,所述接收2700包括在存储器中接收所述子集以便进行对所述数据的子集的快速的存储器运算和处理。
3.如权利要求1所述的方法,其特征在于,所述接收2700包括从关系型数据库接收所述数据的子集,并且所述数据的不同列对应于所述关系型数据库的列。
4.如权利要求1所述的方法,其特征在于,所述执行2720包括基于跨所述序列的所述桶中的值的不同部分是根据第一类型的压缩还是第二类型的压缩来压缩的,来执行所述查询所定义的运算。
5.如权利要求1所述的方法,其特征在于,所述执行2720包括基于跨所述序列的所述桶中的值的不同部分是根据行程长度编码压缩还是位打包压缩来压缩的,来执行所述查询所定义的运算。
6.如权利要求1所述的方法,其特征在于,所述执行2720包括基于有多少跨所述序列的所述桶中的值的不同部分是根据位打包压缩来压缩的,来执行所述查询所定义的运算。
7.如权利要求6所述的方法,其特征在于,所述执行2720包括基于是否(1)跨所述序列的所述桶中的值的不同部分都是根据行程长度编码压缩来压缩的,即定义了纯桶,(2)除了一个部分之外都是根据行程长度编码来压缩的,即定义了单非纯桶,或(3)除了两个部分之外都是根据行程长度编码来压缩的,即定义了双非纯桶,来执行所述查询所定义的运算。
8.如权利要求1所述的方法,其特征在于,所述执行2720包括基于所处理的当前桶的类型来执行所述查询所定义的运算,以及按序处理桶。
9.如权利要求1所述的方法,其特征在于,所述执行2720包括通过利用多个处理器以及从所述序列划分的对应数量的段来并行化所述查询所定义的运算,每一段由一不同处理器来处理。
10.如权利要求1所述的方法,其特征在于,所述执行2720包括在处理所述整数编码的且压缩的值序列以返回查询结果时,基于所处理的当前桶的类型来执行所述查询所定义的逻辑或查询片运算,或其中已指定了关系的多个表之间的查询联接运算。
11.如权利要求1所述的方法,其特征在于,所述执行2720包括在处理所述整数编码的且压缩的值序列以返回查询结果时,基于所处理的当前桶的类型来执行所述查询所定义的过滤运算、分组运算、代理列运算或聚集运算中的至少一个。
12.如权利要求11所述的方法,其特征在于,过滤运算、分组运算、代理列运算或聚集运算中的至少一个在对于当前桶的各阶段中彼此分开地处理2720,且处理按桶发生。
13.一种用于处理数据的设备,包括:
高速存储器内存储130,用于存储数据的子集,所述数据的子集是作为对应于所述数据的不同字段的整数编码的且压缩的值序列而接收的;以及
至少一个查询处理器140,所述至少一个查询处理器根据桶走查过程来处理对所述数据的子集的查询,所述桶走查过程基于从行程长度编码到位打包的压缩算法转换或相反的转换来定义跨所述值序列的桶,然后基于跨正被处理的当前桶的序列应用的压缩类型,根据为所述当前桶确定的桶类型来按桶处理对所述数据的子集的查询。
14.如权利要求13所述的设备,其特征在于,所述压缩类型包括行程长度编码和位打包。
15.如权利要求13所述的设备,其特征在于,所述至少一个查询处理器140基于所述桶类型来处理对所述数据的子集的查询的过滤运算。
16.如权利要求13所述的设备,其特征在于,所述至少一个查询处理器140基于所述桶类型来处理对所述数据的子集的查询的分组运算。
17.如权利要求13所述的设备,其特征在于,所述至少一个查询处理器140基于所述桶类型来处理对所述数据的子集的查询的代理列运算。
18.如权利要求13所述的设备,其特征在于,所述至少一个查询处理器140基于所述桶类型来处理对所述数据的子集的查询的聚集运算。
19.如权利要求13所述的设备,其特征在于,所述至少一个查询处理器140基于不同的桶类型来跨所有桶确定查询结果。
20.如权利要求13所述的设备,其特征在于,还包括用于将所述整数编码的且压缩的值序列解码为所表示的数据字段的解码器140。
21.一种数据查询装置,包括:
用于按照对应于不同数据列的整数编码的且压缩的值序列检索115、200查询所蕴含的列子集的装置;
用于基于出现在数据子集的整数编码的且压缩的值序列中的压缩类型的变化来定义跨所述列子集的查询处理桶140的装置;以及
用于在存储器中以按桶计的方式处理140所述查询且在处理所述整数编码的且压缩的值序列时基于当前桶的类型来处理所述查询的装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US8502208P | 2008-07-31 | 2008-07-31 | |
US61/085,022 | 2008-07-31 | ||
US12/270,872 | 2008-11-14 | ||
US12/270,872 US8626725B2 (en) | 2008-07-31 | 2008-11-14 | Efficient large-scale processing of column based data encoded structures |
PCT/US2009/052490 WO2010014955A2 (en) | 2008-07-31 | 2009-07-31 | Efficient large-scale processing of column based data encoded structures |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102112986A true CN102112986A (zh) | 2011-06-29 |
CN102112986B CN102112986B (zh) | 2014-04-23 |
Family
ID=41609355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980130978.7A Active CN102112986B (zh) | 2008-07-31 | 2009-07-31 | 对基于列的数据编码的结构的高效的大规模处理 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8626725B2 (zh) |
EP (1) | EP2321746B1 (zh) |
JP (1) | JP2011530119A (zh) |
CN (1) | CN102112986B (zh) |
WO (1) | WO2010014955A2 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103258030A (zh) * | 2013-05-09 | 2013-08-21 | 西安电子科技大学 | 基于字典与游长编码的移动设备内存压缩方法 |
CN104239391A (zh) * | 2013-06-14 | 2014-12-24 | 国际商业机器公司 | 用于数据编码及处理列数据的系统和方法 |
CN104737165A (zh) * | 2012-09-12 | 2015-06-24 | 甲骨文国际公司 | 用于内存数据库查询处理的最优数据表示和辅助结构 |
CN110516117A (zh) * | 2019-07-22 | 2019-11-29 | 平安科技(深圳)有限公司 | 图计算的类别型变量存储方法、装置、设备及存储介质 |
CN111699480A (zh) * | 2017-12-01 | 2020-09-22 | 麦模斯阔有限公司 | 数据库系统中的加速过滤、分组和聚合 |
CN112533164A (zh) * | 2020-10-26 | 2021-03-19 | 中国人民解放军92942部队 | 一种提高可靠性测试中振动数据传输带宽的方法 |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10152504B2 (en) | 2009-03-11 | 2018-12-11 | Actian Netherlands B.V. | Column-store database architecture utilizing positional delta tree update system and methods |
US9058223B2 (en) | 2011-04-22 | 2015-06-16 | Microsoft Technology Licensing Llc | Parallel entropy encoding on GPU |
JP5742427B2 (ja) * | 2011-04-25 | 2015-07-01 | 富士ゼロックス株式会社 | 画像処理装置 |
WO2013019913A1 (en) * | 2011-08-02 | 2013-02-07 | Jadhav Ajay | Cloud-based distributed persistence and cache data model |
US20130132352A1 (en) * | 2011-11-23 | 2013-05-23 | Microsoft Corporation | Efficient fine-grained auditing for complex database queries |
JPWO2013137070A1 (ja) * | 2012-03-13 | 2015-08-03 | 日本電気株式会社 | ログ圧縮システム、ログ圧縮方法、及びプログラム |
US20150015586A1 (en) * | 2012-03-22 | 2015-01-15 | Google Inc. | Systems and methods for rendering and downsampling an image |
US9922090B1 (en) | 2012-03-27 | 2018-03-20 | Actian Netherlands, B.V. | System and method for automatic vertical decomposition of a table for improving input/output and memory utilization in a database |
US8862571B2 (en) * | 2012-06-29 | 2014-10-14 | International Business Machines Corporation | Predicate pushdown with late materialization in database query processing |
US8756208B2 (en) | 2012-07-10 | 2014-06-17 | International Business Machines Corporation | Encoded data processing |
US9449046B1 (en) * | 2012-07-31 | 2016-09-20 | Actian Netherlands B.V. | Constant-vector computation system and method that exploits constant-value sequences during data processing |
US9317554B2 (en) * | 2012-09-26 | 2016-04-19 | Microsoft Technology Licensing, Llc | SQL generation for assert, update and delete relational trees |
US9292569B2 (en) * | 2012-10-02 | 2016-03-22 | Oracle International Corporation | Semi-join acceleration |
US10019457B1 (en) | 2013-01-22 | 2018-07-10 | Amazon Technologies, Inc. | Multi-level compression for storing data in a data store |
US11507574B1 (en) | 2013-03-13 | 2022-11-22 | Actian Netherlands B.V. | Adaptive selection of a processing method based on observed performance for improved and robust system efficiency |
US9384204B2 (en) | 2013-05-22 | 2016-07-05 | Amazon Technologies, Inc. | Efficient data compression and analysis as a service |
US9286350B2 (en) * | 2013-06-28 | 2016-03-15 | International Business Machines Corporation | Estimating most frequent values for a data set |
US9489409B2 (en) * | 2013-10-17 | 2016-11-08 | Sybase, Inc. | Rollover strategies in a N-bit dictionary compressed column store |
US20150169607A1 (en) * | 2013-12-17 | 2015-06-18 | Ebay Inc. | Systems and methods to present images representative of searched items |
US9547553B1 (en) | 2014-03-10 | 2017-01-17 | Parallel Machines Ltd. | Data resiliency in a shared memory pool |
US9781027B1 (en) | 2014-04-06 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods to communicate with external destinations via a memory network |
US9477412B1 (en) | 2014-12-09 | 2016-10-25 | Parallel Machines Ltd. | Systems and methods for automatically aggregating write requests |
US9594696B1 (en) | 2014-12-09 | 2017-03-14 | Parallel Machines Ltd. | Systems and methods for automatic generation of parallel data processing code |
US9690713B1 (en) | 2014-04-22 | 2017-06-27 | Parallel Machines Ltd. | Systems and methods for effectively interacting with a flash memory |
US9639473B1 (en) | 2014-12-09 | 2017-05-02 | Parallel Machines Ltd. | Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location |
US9781225B1 (en) | 2014-12-09 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods for cache streams |
US9690705B1 (en) | 2014-12-09 | 2017-06-27 | Parallel Machines Ltd. | Systems and methods for processing data sets according to an instructed order |
US9753873B1 (en) | 2014-12-09 | 2017-09-05 | Parallel Machines Ltd. | Systems and methods for key-value transactions |
WO2016170594A1 (ja) * | 2015-04-21 | 2016-10-27 | 株式会社日立製作所 | 計算機、データベース処理方法、及び集積回路 |
US9971808B2 (en) | 2015-06-24 | 2018-05-15 | International Business Machines Corporation | Fast query processing in columnar databases with GPUs |
US10303786B2 (en) | 2015-08-05 | 2019-05-28 | International Business Machines Corporation | Retrieving and displaying data from a columnar database |
US10346403B2 (en) | 2016-05-06 | 2019-07-09 | International Business Machines Corporation | Value range synopsis in column-organized analytical databases |
US10248695B2 (en) | 2016-05-23 | 2019-04-02 | International Business Machines Corporation | Extreme value computation |
US10417237B2 (en) | 2016-05-24 | 2019-09-17 | International Business Machines Corporation | Sorting tables in analytical databases |
US10515092B2 (en) * | 2017-07-21 | 2019-12-24 | Google Llc | Structured record compression and retrieval |
US10838963B2 (en) | 2017-09-11 | 2020-11-17 | International Business Machines Corporation | Optimized access for hierarchical low cardinality value synopsis in analytical databases |
US11023430B2 (en) | 2017-11-21 | 2021-06-01 | Oracle International Corporation | Sparse dictionary tree |
US11169995B2 (en) * | 2017-11-21 | 2021-11-09 | Oracle International Corporation | Relational dictionaries |
US11126611B2 (en) * | 2018-02-15 | 2021-09-21 | Oracle International Corporation | Code dictionary generation based on non-blocking operations |
US11379450B2 (en) | 2018-10-09 | 2022-07-05 | Oracle International Corporation | Relational method for transforming unsorted sparse dictionary encodings into unsorted-dense or sorted-dense dictionary encodings |
US11139827B2 (en) | 2019-03-15 | 2021-10-05 | Samsung Electronics Co., Ltd. | Conditional transcoding for encoded data |
US11314736B2 (en) | 2020-01-16 | 2022-04-26 | Oracle International Corporation | Group-by efficiency though functional dependencies and non-blocking aggregation functions |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5918225A (en) * | 1993-04-16 | 1999-06-29 | Sybase, Inc. | SQL-based database system with improved indexing methodology |
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 |
US5870752A (en) * | 1997-08-21 | 1999-02-09 | Lucent Technologies Inc. | Incremental maintenance of an approximate histogram in a database system |
US6457009B1 (en) * | 1998-11-09 | 2002-09-24 | Denison W. Bollay | Method of searching multiples internet resident databases using search fields in a generic form |
US6597812B1 (en) * | 1999-05-28 | 2003-07-22 | Realtime Data, Llc | System and method for lossless data compression and decompression |
US7024414B2 (en) * | 2001-08-06 | 2006-04-04 | Sensage, Inc. | Storage of row-column data |
US20040135903A1 (en) * | 2002-10-11 | 2004-07-15 | Brooks Lane C. | In-stream lossless compression of digital image sensor data |
US6965897B1 (en) * | 2002-10-25 | 2005-11-15 | At&T Corp. | Data compression method and apparatus |
US7818728B1 (en) * | 2005-04-04 | 2010-10-19 | Qd Technology Llc | Maximizing system resources used to decompress read-only compressed analytic data in a relational database table |
US20070143248A1 (en) * | 2005-12-19 | 2007-06-21 | Yahoo! Inc. | Method using query processing servers for query processing of column chunks in a distributed column chunk data store |
US20090187586A1 (en) * | 2006-03-31 | 2009-07-23 | Qd Technology Llc | Selecting various algorithms to compress columns of analytic data in a read-only relational database in a manner that allows decompression of the compressed data using minimal system resources |
US7647350B2 (en) * | 2006-09-06 | 2010-01-12 | Red Hat, Inc. | Database access server with compression translator |
WO2008034213A1 (en) * | 2006-09-18 | 2008-03-27 | Infobright Inc. | A method and system for data compression in a relational database |
US20080133562A1 (en) * | 2006-12-05 | 2008-06-05 | Chi Ping Bess Cheong | Coding compressible variable length database fields |
EP2040180B1 (en) | 2007-09-24 | 2019-01-16 | Hasso-Plattner-Institut für Digital Engineering gGmbH | ETL-less zero-redundancy system and method for reporting OLTP data |
US8392461B2 (en) * | 2007-11-19 | 2013-03-05 | Teradota Us, Inc. | Virtual data maintenance |
US8082234B2 (en) * | 2007-11-19 | 2011-12-20 | Teradata Us, Inc. | Closed-loop system management method and process capable of managing workloads in a multi-system database environment |
-
2008
- 2008-11-14 US US12/270,872 patent/US8626725B2/en active Active
-
2009
- 2009-07-31 EP EP09803686.6A patent/EP2321746B1/en active Active
- 2009-07-31 CN CN200980130978.7A patent/CN102112986B/zh active Active
- 2009-07-31 JP JP2011521367A patent/JP2011530119A/ja not_active Withdrawn
- 2009-07-31 WO PCT/US2009/052490 patent/WO2010014955A2/en active Application Filing
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104737165A (zh) * | 2012-09-12 | 2015-06-24 | 甲骨文国际公司 | 用于内存数据库查询处理的最优数据表示和辅助结构 |
CN103258030A (zh) * | 2013-05-09 | 2013-08-21 | 西安电子科技大学 | 基于字典与游长编码的移动设备内存压缩方法 |
CN103258030B (zh) * | 2013-05-09 | 2016-04-13 | 西安电子科技大学 | 基于字典与游长编码的移动设备内存压缩方法 |
CN104239391A (zh) * | 2013-06-14 | 2014-12-24 | 国际商业机器公司 | 用于数据编码及处理列数据的系统和方法 |
CN104239391B (zh) * | 2013-06-14 | 2018-03-27 | 国际商业机器公司 | 用于数据编码及处理列数据的系统和方法 |
US10042873B2 (en) | 2013-06-14 | 2018-08-07 | International Business Machines Corporation | Data encoding and processing columnar data |
CN111699480A (zh) * | 2017-12-01 | 2020-09-22 | 麦模斯阔有限公司 | 数据库系统中的加速过滤、分组和聚合 |
CN110516117A (zh) * | 2019-07-22 | 2019-11-29 | 平安科技(深圳)有限公司 | 图计算的类别型变量存储方法、装置、设备及存储介质 |
CN112533164A (zh) * | 2020-10-26 | 2021-03-19 | 中国人民解放军92942部队 | 一种提高可靠性测试中振动数据传输带宽的方法 |
CN112533164B (zh) * | 2020-10-26 | 2023-10-10 | 中国人民解放军92942部队 | 一种提高可靠性测试中振动数据传输带宽的方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2010014955A3 (en) | 2010-04-22 |
CN102112986B (zh) | 2014-04-23 |
JP2011530119A (ja) | 2011-12-15 |
EP2321746A2 (en) | 2011-05-18 |
US20100030748A1 (en) | 2010-02-04 |
EP2321746B1 (en) | 2019-03-20 |
EP2321746A4 (en) | 2011-09-14 |
US8626725B2 (en) | 2014-01-07 |
WO2010014955A2 (en) | 2010-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102112986B (zh) | 对基于列的数据编码的结构的高效的大规模处理 | |
CN102112962A (zh) | 用于大规模数据存储的高效的基于列的数据编码 | |
CN102171695A (zh) | 用于基于列的数据编码的结构的查询的高效大规模联接 | |
CN102171680B (zh) | 用于基于列的数据编码结构的查询的高效大规模过滤和/或排序 | |
CN101311930B (zh) | 具有重复值的表的块压缩 | |
US9805079B2 (en) | Executing constant time relational queries against structured and semi-structured data | |
Paparrizos et al. | VergeDB: A Database for IoT Analytics on Edge Devices. | |
CN101311931B (zh) | 基于值的出现的表压缩 | |
US8407164B2 (en) | Data classification and hierarchical clustering | |
US9712646B2 (en) | Automated client/server operation partitioning | |
US20090106210A1 (en) | Methods and systems for database organization | |
WO2011126995A1 (en) | Columnar storage representations of records | |
US10977280B2 (en) | Systems and methods for memory optimization interest-driven business intelligence systems | |
Chengyan et al. | DCE-miner: an association rule mining algorithm for multimedia based on the MapReduce framework | |
US11507578B2 (en) | Delaying exceptions in query execution | |
John et al. | Active storage using object-based devices | |
Hanmanthu et al. | Parallel optimal grid-clustering algorithm exploration on mapreduce framework | |
JP7376027B2 (ja) | 企業分割時に組織データを選別して移管する方法およびシステム | |
US20230010912A1 (en) | Utilizing array field distribution data in database systems | |
Vitter | Online Electronic Catalog of Jeff Vitter | |
WO2010060179A1 (en) | Methods for organizing a relational database by using clustering operations | |
Persson et al. | Compression Selection for Columnar Data using Machine-Learning and Feature Engineering | |
Al-kahtani et al. | Designing an Efficient Distributed Algorithm for Big Data Analytics: Issues and Challenges |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150424 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150424 Address after: Washington State Patentee after: Micro soft technique license Co., Ltd Address before: Washington State Patentee before: Microsoft Corp. |