技术领域
[0001] 本发明涉及对偶化数据模型的方法和系统。
相关背景技术
[0002] 数据模型描述了可如何存储和访问数据。更正式地,数据模型定义数据实体以及各数据实体间的关系。数据模型的主要目的是提供数据的定义和格式,以便于管理和处理大量的数据。数据模型的一种应用是定义如何结构化和利用数据库或其他存储的数据库模型。数据库模型可以是关系的或非关系的。
[0003] 在关系模型中,或更具体地在关系数据库中,根据一个或多个表来结构化数据。表是包括多个行和列的关系,其中所命名的列被称为属性,且行捕捉具体的实体实例的数据。例如,表可捕捉与诸如行(也称为元组)和列中的书籍等特定实体有关的信息。列标识实体的各种属性,诸如书籍的标题、作者、和出版年份等。行捕捉实体的实例,诸如特定的书籍。
换言之,表中的每一行表示特定书籍的各属性。此外,表可包括使得两个或更多表能被链接在一起的主键和外键。
[0004] 在非关系模型的许多实现中,键值模型是最受欢迎中的一种。键值数据库或存储表示将唯一键映射成一个或多个值的组的简单数据模型。更具体地,键值存储用于存储值和便于基于键来定位所存储的值的索引。例如,被定位的键标识书籍的数据的标题、作者或出版中的一个。
[0005] 关系数据库通常被称为SQL数据库,而一些非关系数据库则被称为NoSQL数据库或存储。SQL代表结构化查询语言,该结构化查询语言是被利用来查询和更新关系数据库中的数据的主要语言。当结合关系数据库来利用SQL时,该数据库可被称为基于SQL的关系数据库。然而,基于SQL的关系数据库更经常地被简称为SQL数据库,并且用作关系数据库的同义词。NoSQL是用来指代与基于SQL的关系数据库不同的数据库的术语。换言之,术语NoSQL被用作非关系数据库或诸如但不限于键值存储等存储的同义词。
[0006] SQL数据库和NoSQL存储具有很多优点和缺点,这些缺点和优点是由CAP定理在高层次上捕捉的,CAP定理陈述为一致性(C)、可用性(A)和分区容忍性(P),在任何一个时间都只能保证其中的两个。一致性指在诸如更新等操作后保持在一致的状态中的系统特征。可用性关注于在一段时间上甚至在存在故障时仍保持可操作的,而分区容忍性(partition tolerance)指系统跨各网络分区进行操作的能力。一般而言,对于SQL数据库的设计选择是选择一致性和可用性而不选分区容忍性,而对于NoSQL存储则放弃一致性而支持分区容错性和可用性。换言之,NoSQL存储为了可缩放性或可用性而牺牲了一致性,SQL数据库则为了一致性而牺牲了可缩放性。
[0007] 随着基于网络或云计算的连续出现,NoSQL存储至少由于其可缩放性而在最近受到了很多关注。同时,在本文和其他上下文中,该行业中的某些人已表达了对SQL数据库的将来的担心。
具体实施方式
[0019] 以下的细节一般涉及数据模型对偶化。一数据模型可通过对偶化另一数据模型来生成。换言之,可将第一数据模型变换成第二数据模型,其中第二数据模型是第一数据模型的数学对偶。例如,可从关系数据模型产生诸如键值存储等非关系数据模型,从而证明NoSQL数据模型是SQL数据模型的对偶。
[0020] 此处所使用的术语“对偶”及其各种形式旨在表示数学对偶性,因为它涉及范畴op论。更具体地,对偶性是类别“C”的属性和相对类别“C ”的对偶属性之间的对应关系。在给定了关于类别“C”的语句后,通过交换每一态射(映射)的源和目标以及交换合成两个op
态射(morphism)的次序,可获取关于相对类别“C ”的相应对偶语句。例如,类别“C”可对op
应于数据模型,且相对类别“C ”可表示对偶或协同数据模型。例如,“对偶化”表示从数据模型生成对偶的动作。
[0021] 现在参考附图更详细地描述本发明的各个方面,在全部附图中相似的数字指示相似或相应的元素。然而应该理解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等效和替换的方案。
[0022] 首先参考图1,示出了数据建模系统100。数据建模系统100包括变换组件110,该变换组件接收、检索或者以其他方式来获取或获得第一数据模型,以及通过对偶化第一数据模型来生成第二数据库模型。换言之,第二数据模型是第一数据模型的数学对偶。而且,变换组件110可接收、检索或者以其他方 式来获取或获得为第一数据模型的对偶的第二数据模型,以及通过对偶化第二数据模型来将第二数据模型变换回第一数据模型。结果,由于这种关系,第一数据模型可被简称为数据模型,且第二数据模型可被称为对偶或协同数据模型。因此,从左至右移动时,变换组件110将数据模型(D)变换成协同数据模型(co(D)),或者换言之根据数据模型(D)生成协同数据模型(co(D))。从右至左移动时,变换组件110将协同数据模型(co(D))变换成数据模型(例如,co(co(D))->D),或者换言之根据协同数据模型(co(D))产生数据模型(D)。
[0023] 变换组件110包括实体组件112和关系组件114。数据模型包括一组实体和各实体间的关系(或换言之,关联)。实体组件112被配置来例如从第一数据模型的实体生成对偶或协同实体。类似地,例如,关系组件114可从在第一数据模型内指定的关系中导出(derive)对偶或协同关系。另外,例如,关系组件114可从第一数据模型的关系或关联中生成关系或关联的对偶合成。
[0024] 图2示出了在两个数据模型间的抽象变换,以便于清楚和理解。更具体地,可从第一数据模型200产生第二数据模型210,并且反之亦然。第一数据模型包括三个实体“S”202、“T”204和“G”206。各实体间的关系如箭头所示。更具体地,关系“F”从“S”202前进至“T”204,且关系“G”从“T”204前进至“G”206。“G”还包括起始于“G”206并返回至“G”206的身份关系“ID”。另外,在“S”202和“G”206间存在合成关系“F;G”(F合成G)。为了对偶化第一数据模型200,标识相对实体,并且倒转各相对实体之间的关系或更正式的态射。如所示出地,第二数据模型210包括实体“CO-S”212、“CO-T”214和“CO-G”216。而且,表示态射的箭头被倒转,以表示态射的源和目标内的改变。例如,第一数据模型200的合成关系“F;G”(F合成G)在第二数据模型210中变成了“G;F”(G合成F)。作为真对偶,如果将第二数据模型210进行对偶化,则结果产生第一数据模型200。
[0025] 以下是对可由图1中的变换组件110来实现的示例性变换过程的更高层次的讨论。此处,对关系数据库导出对偶。换言之,第一数据模型是关系模型。如将要示出地,结果或第二数据模型可以是非关系模型或更具体地是键值模型。
[0026] 图3示出了用于存储作品信息的示例性关系表示300。如所示出地,存在 通过主键和外键链接在一起的三个表。作品表310提供主键“ID”312以及诸如标题、作者、出版年份或页面总数等作品信息的其他列。评级表320提供作品评级信息和引用作品表310的唯一记录的外键“作品ID”322。类似地,关键词表330提供与作品相关联的关键词,并包括指示回作品表310的相应记录的外键“作品ID”332。
[0027] 简要地转向图4,图3中的示例性关系表示300被示为在外键和主键之间插入了指针。具体地,指针410从评级表320的外键“作品ID”322指向由作品表310的主键“ID”312所标识的相应记录。类似地,指针420从关键词表330的外键“作品ID”332指向由作品表310的主键“ID”312所标识的相应记录。
[0028] 图5示出了相对对图3和4中的示例性关系表示而提供的相同数据的示例性非关系键值表示500。在此,诸如510、520和530等行可存储键(被示为指向值的指针)或者标量值。例如,行510可包括针对标题、作者、关键词和评级的键,并包括出版年份和页面总数的标量值。行520包括映射至三个关键词的三个键,并且行530包括映射至两个评级表示的两个键。
[0029] 参考图6,描绘了示例性非关系键值表示600。然而在此,代替仅允许行包括标量和键,该限制被放松至允许各种类型的数据。与之前的图5中的行510相对应的行610现包括针对标题和作者的值,并包括分别针对关键词和评级两者620和630的键的集合。更具体地,键620指向关键词,且键630指向评级信息。
[0030] 将图4中的示例性关系表示与图6中的示例性非关系表示进行比较。注意到主要的区别特征是倒转了箭头。更具体地,关系箭头从具有外键的行前进至具有相应主键的行,且非关系箭头从行前进至存储数据的位置。换言之,在关系上下文中孩子指向其父亲,而在非关系上下文中父亲指向其孩子。在此已示出的是非关系键值数据模型为关系主外键数据模型的对偶。因此,NoSQL数据模型是SQL数据模型的数学对偶。
[0031] 更正式地,在关系数据模型中实体(e)可被定义如下:“在表中的“e.k≠e’.k”,其中列是标量。对于态射, 并且“e1.Ffk=e2.Fpk”。在非关系数据模型上下文中,实体(e)可被定义为:“在域(Lookup(查找)) 中的 “Lookup[k]=v”,且态射被定义为“e1←e2”,“Lookup[e2.k]=e1”.而且,对于关系或关联的合成,将次序倒转如下:“co(F;G)=co(G);co(F)”。更简单地,关系模型实体中的单词是具有唯一主键的行,并且如果在“e1”和“e2”之间存在直接或间接的主/外键关系,则这两个实体“e1”和“e2”是相关的。在非关系或键值模型中,实体是可经由其在存储中的键来找到的值,并且如果在该模型中实体“e1”和“e2”通过存储而经由指针直接或间接地链接在一起,则这两个实体“e1”和“e2”是相关的。
[0032] 具有对偶性的许多结果。尤其地,如果在“C”中语句“T”是真的,则在“co(C)”中它的对偶“co(T)”也是真的。参考关系或SQL数据模型以及非关系或NoSQL数据模型,这些结果中的一些被概括在下面的表1中。
[0033]
[0034] 表1
[0035] 而且,如某些所表明地,SQL和NoSQL数据模型并不像善良与邪恶一样是相冲突的。相反,这两种数据模型是可和谐地共存并可变换成彼此的相对体。
[0036] 而且,已发现格式化NoSQL数据模型是很有意义的。在格式化SQL数据模型之前,工作是相对于可被宽松地称为关系数据模型的模型来完成,但是存在很多特别的实现,并且本行业并非尤其集中于任何一种实现。快速地前进至今天,除了现在数据模型是NoSQL以外,情形十分类似。通过将NoSQL格式化成SQL的对偶,工作可被集中于这种版本的数据模型。
[0037] 然而出于清楚和简要的目的,已详细讨论了关系和非关系数据模型之间的变换。然而,所要求保护的主题并不限于此。相反,内容将涵盖由对偶化产生的任何和所有数据模型。作为示例而非限制,可将结构化数据模型变换成或生成非结构化数据模型,或者反之亦然。例如,图1中的变换组件110可接收XML(可扩展标记语言)数据模型来作为输入,并输出文档数据模型,其中文档或对象(数据项)被索引以便迅速和有效地执行查询。 [0038] 另外,要注意图1中的变换组件110可自动地或半自动地操作。在自动模式中,变换组件110可接收第一数据模型,并自动输出对偶第二数据模型。或者,在半自动模式中,变换组件110可请求来自用户的输入,以便于产生对偶数据模型。在一个实现中,例如变换组件110可以是在关于对偶化的数据建模中帮助用户的工具。
[0039] 已相对于若干组件间的交互描述了上述系统、体系结构、环境等。应该理解,这样的系统和组件可以包括在其中指定的这些组件或子组件,所指定的组件或子组件中的一些,和/或附加的组件。子组件还可以被实现为以通信方式耦合到其他组件而不是包括在父组件内的组件。此外,一个或多个组件和/或子组件可以结合成提供聚集功能的单个组件。系统、组件、和/或子组件之间的通信可以根据推(push)和/或拉模型来实现。各组件也可以与一个或多个其他组件进行交互,出于简明考虑在此未具体描述其他组件,但本领域的技术人员均已知。
[0040] 此外,应该理解以上所公开的系统及以下方法的各部分可以包括或包含基于人工智能、机器学习或知识或基于规则的组件、子组件、进程、装置、方法或机制(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎、分类器……)。这些组件和其它组件可以自动化执行某些机制或进程,由此使得系统和方法的各部分更为自适应、高效及智能。作为示例而非限制,变换组件110或其中的一个或多个子组件可使用这些机制来有效地确定或以其他方式推断数据模型属性和对偶数据模型特征。
[0041] 考虑到以上描述的示例性系统,参考图7和8的流程图将可以更好地理解依照所公开的主题来实现的方法。尽管为了说明简洁起见,作为一系列框示出和描述了方法,但是,应该理解,所要求保护的主题不仅限于所描述框的顺序, 一些框可以按与此处所描绘和描述的不同的顺序进行和/或与其他框并发地进行。此外,并非全部所示出的框都是实现下面所描述的方法所必需的。
[0042] 参考图7,示出了数据模型生成的方法700。在参考数字710处,接收、检索或者以其他方式来获取或获得第一数据模型。在数字720处,将第一数据模型变换成或者换言之使用第一数据模型来生成对偶第二数据模型。作为示例而非限制,可将包括主键和外键的第一关系数据模型变换成或者使用该第一关系数据模型来生成非关系键值数据模型。本示例示出可将已知第一数据模型变换成特定形式的另一已知数据模型,从而在将对偶第二数据模型本身进行对偶化时,第一数据模型会产生。由于这两种数据模型至少被本行业中某些人认为是对立的,因此这是相当令人惊奇的结果。当然,数据模型对偶化的结果可以是全新的和之前未被认识到的数据模型,其具有同样的令人惊奇和不寻常的后果。 [0043] 图8是对偶化数据模型的方法800的流程图。在参考数字810处,从第一实体导出第二实体,其中第二实体是第一实体的对偶。在参考数字820处,例如“通过倒转箭头”(例如,将S→R倒转成S←R)来定义各元素间的对偶关系。在数字830处,将对偶合成关系确定为例如“倒转箭头”,以及倒转合成的次序(例如,将F合成G倒转成G合成F)。 [0044] 此处使用的术语“组件”和“系统”及其各种形式旨在表示与计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或执行中的软件。例如,组件可以是但不限于是,在处理器上运行的进程、处理器、对象、实例、可执行程序、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用程序程序和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多的计算机之间。
[0045] 在本文中使用的词语“示例性”或其各种形式意味着用作示例、实例或说明。在此被描述为“示例性”的任何方面或设计并不一定要被解释为相比其他方面或设计更优选或有利。此外,各示例只是出于清楚和理解的目的来提供的并且并不意味着以任何方式限制或约束所要求保护主题或本发明的相关部分。可以理解,本来可呈现不同范围的多个附加或替换示例,但出于简明的目的已被省略。
[0046] 如此处所使用,术语“推论”或“推断”通常指的是从经由事件和/或数据捕捉的一组观察结果来推理或推断系统、环境、和/或用户的状态的过程。可以使用推断来标识特定上下文或动作,也可以生成例如状态上的概率分布。推断可以是概率性的,即,基于对数据和事件的考虑,计算在感兴趣状态上的概率分布。推断也可以是指用于从一组事件和/或数据构成较高级别的事件的技术。这样的推断导致从一组观察到的事件和/或存储的事件数据构建新的事件或动作,不管事件在时间上是否紧密相关,以及事件和数据是来自一个还是多个事件和数据源。可采用各种分类方案和/或系统(例如,支持向量机、神经网络、专家系统、贝叶斯信任网络、模糊逻辑、数据融合引擎……)来执行关于所要求保护主题的自动化和/或推断的动作。
[0047] 而且,对于在详细描述或权利要求书中使用术语“包括”、“包含”、“具有”、“含有”或其它形式的变型而言,这样的术语旨在以类似于术语“包括”的方式体现包含性,如同“包括”在用作权利要求书中的过渡词时所解释的那样。
[0048] 为了为所要求保护主题提供上下文,图9以及以下讨论旨在提供对其中可以实现本主题的各方面的合适环境的简要、概括描述。然而,合适的环境只是示例并且并非旨在对使用范围或功能提出任何限制。
[0049] 尽管能够在可以在一台或多台计算机上运行的程序的计算机可执行指令的一般上下文中描述以上公开的系统和方法,但是,本领域的技术人员将认识到,各方面也可以与其他程序模块等相结合地实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件和数据结构等。此外,本领域技术人员可以理解,上述系统和方法可用各种计算机系统配置实现,包括单处理器、多处理器或多核处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表……)、基于微处理器或可编程消费者或工业电子设备等。各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。然而,所要求保护主题的某些方面,如果不是所有方面的话,可以在独立计算机上实施。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中的一个或两者中。
[0050] 参考图9,示出了示例性通用计算机910或计算设备(例如,台式机、膝上型计算机、服务器、手持式设备、可编程消费或工业电子作品、机顶盒、游戏系统……)。计算机910包括一个或多个处理器920、系统存储器930、系统总线940、大容量存储950、以及一个或多个接口组件970。系统总线940与至少上述系统组件通信地耦合。然而,可以理解,在其最简单的形式中,计算机910可包括耦合到系统存储器930的一个或多个处理器920,该一个或多个处理器执行各种计算机可执行动作、指令和或组件。
[0051] 处理器920可以用通用处理器、数字信号处理器(DSP)、应用程序专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑设备、分立门或晶体管逻辑、分立硬件组件或被设计为执行此处描述的功能的其任意组合来实现。通用处理器可以是微处理器,但在替换方案中,处理器可以是任何处理器、控制器、微控制器、或状态机。处理器920还可被实现为计算设备的组合,例如DSP和微处理器的组合、多个微处理器、多核处理器、结合一个DSP核的一个或多个微处理器、或任何其它这种配置。
[0052] 计算机910可包括各种计算机可读介质或以其他方式与各种计算机可读介质交互以便于控制计算机910来实现所要求保护主题的一个或多个方面。计算机可读介质可以是能由计算机910访问的任何可用介质,并包含易失性和非易失性介质以及可移动、不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。 [0053] 计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,存储器设备(例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)……)、磁存储设备(例如,硬盘、软盘、磁带盒、磁带……)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD)……)、以及固态设备(例如,固态驱动器(SSD)、闪存驱动器(例如,卡、棒、键驱动器……)……)、或者可用于存储所需信息并且可由计算机910访问的任何其他介质。
[0054] 通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术 语“已调制数据信号”是指具有以在信号中编码信息的方式被设定或改变的一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。
[0055] 系统存储器930和大容量存储950都是计算机可读存储介质的示例。取决于计算设备的确切配置和类型,系统存储器930可以是易失性的(例如RAM)、非易失性的(例如ROM、闪存……)或是两者的某种组合。作为示例,基本输入/输出系统(BIOS),包括诸如在启动期间在计算机910内的元件之间传输信息的基本例程,可被存储在非易失性存储器中,而易失性存储器可担当外部高速缓存存储器以便于处理器920的处理等。
[0056] 大容量存储950包括相对于系统存储器930来说用于存储大量数据的可移动/不可移动、易失性/非易失性计算机存储介质。例如,大容量存储950包括但不限于,诸如磁盘或光盘驱动器、软盘驱动器、闪存存储器、固态驱动器、或记忆棒的一个或多个设备。 [0057] 系统存储器930和大容量存储950可包括或其中存储有操作系统960、一个或多个应用程序962、一个或多个程序模块964和数据966。操作系统960用于控制和分配计算机910的资源。应用程序962包括系统和应用程序软件中的一个或两个,并且可通过存储在系统存储器930和/或大容量存储950中的程序模块964和数据966来利用操作系统960对资源的管理以执行一个或多个动作。因此,应用程序962可根据由此提供的逻辑来将通用计算机910变成专用机器。
[0058] 所要求保护主题的全部或各部分可以使用产生控制计算机以实现所公开功能的软件、固件、硬件或其任意组合的标准编程和/或工程技术来实现。作为示例而非限制,变换组件110可以是应用程序962或形成应用程序962的一部分,并且包括存储在存储器和/或大容量存储950中的一个或多个模块964和数据966,其功能可以在由所示的一个或多个处理器920执行时实现。
[0059] 计算机910还包括通信地耦合到系统总线940并方便与计算机910的交互的一个或多个接口组件970。作为示例,接口组件970可以是端口(例如,串行、并行、PCMCIA、USB、火线……)或接口卡(例如,声音、视频……) 等。在一个示例实现中,接口组件970可被具体化为用户输入/输出接口,该用户输入/输出接口使得用户能够通过一个或多个输入设备(例如,诸如鼠标的指向设备、跟踪球、指示笔、触摸垫、键盘、话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、相机、其他计算机……)来将命令和信息输入到计算机910中。在另一示例实现中,接口组件970可被具体化为输出外围接口,该输出外围接口向显示器(例如,CRT、LCD、等离子……)、扬声器、打印机和/或其他计算机等提供输出。此外,接口组件970可被具体化为网络接口,该网络接口使得能够诸如通过有线或无线通信链路与其他计算设备(未示出)通信。
[0060] 以上所已经描述的内容包括所要求保护主题的各方面的示例。当然,出于描绘所要求保护主题的目的而描述每一个可以想到的组件或方法的组合是不可能的,但本领域内的普通技术人员应该认识到,所要求保护主题的许多进一步的组合和排列都是可能的。从而,所公开的主题旨在涵盖落入所附权利要求书的精神和范围内的所有这样的变更、修改和变化。