一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

分片键值的自动推导及透明的多分片事务和查询支持的制作方法

2022-04-25 04:49:29 来源:中国专利 TAG:


1.本公开涉及数据库系统。更具体而言,本公开涉及在分片数据库系统中处理数据库命令。


背景技术:

2.存储越来越大量的数据的数据库系统变得越来越普遍。例如,诸如电子商务、移动、社交和软件即服务(saas)系统之类的在线事务处理(oltp)系统通常需要大的数据库存储。oltp系统的示例应用包括但不限于大型计费系统、票务系统、在线金融服务、媒体公司、在线信息服务和社交媒体公司。考虑到这些数据库系统存储的大量数据,将所有数据存储在单个数据库实例上可能并不实际,因为数据量会利用大量的计算资源,诸如处理器、存储器和存储装置。
3.水平分区是一种将单个较大表分解成较小、更易于管理的信息子集(被称为“分区”)的技术。分片是一种数据层体系架构,其中数据在独立的数据库实例之间进行水平分区,其中每个独立的数据库实例被称为“分片”。分片的集合一起构成单个逻辑数据库,被称为“分片数据库”(“sdb”)。从逻辑上讲,客户端应用可以访问分片数据库,就像传统的非分片数据库一样。但是,分片数据库中的表是跨分片水平分区的。
4.为了在分片数据库系统上访问和执行数据库命令,诸如查询和数据操纵命令,客户端应用可能需要进行专门设计或修改(“分片感知”)。在示例中,客户端应用生成包括或以其它方式指定分片键值的数据库命令,该分片键值用于识别用于执行数据库命令的特定分片。
5.在客户端应用不知道分片的情况下,分片导向器可以被包括在sdb系统中并且被配置为处理数据库命令并将命令引导或转发到目标分片。但是,以这种方式持续使用分片导向器会降低整个分片数据库系统的可伸缩性。
6.本节中描述的方法是可以采用的方法,但不一定是以前构想或采用的方法。因此,除非另有说明,否则不应当假设本节中描述的任何方法仅仅因为包含在本节中而成为现有技术。
附图说明
7.本公开的(一个或多个)示例性实施例在附图中以示例而非限制的方式示出,其中相同的标号指相似的元件,并且其中:
8.图1图示了根据一个实施例的非分片数据库和分片数据库的示例。
9.图2是根据一个实施例的用于分片数据库的系统的框图。
10.图3a是根据实施例的用于处理数据库命令的流程图。
11.图3b是根据实施例的用于处理数据库命令的另一个流程图。
12.图4是其中可以实施本公开的计算设备的框图。
13.图5是用于控制计算设备的操作的基本软件系统的框图。
具体实施方式
14.在下面的描述中,出于解释的目的,阐述了许多具体细节,以提供对本公开的(一个或多个)示例实施例的透彻理解。但是,将认识到的是,(一个或多个)示例实施例可以在没有这些具体细节的情况下实践。在其它情况下,公知的结构和设备以框图形式示出,以避免不必要地模糊(一个或多个)示例实施例。
15.总体概述
16.本文描述了用于以避免例如将客户端应用专门设计为分片感知并提供分片键以及所请求的数据库命令的问题的方式处理在分片数据库或sdb系统中执行的数据库命令的技术。这种sdb命令处理技术包括数据库命令的分片键值的自动推导,这可以包括结构化查询语言(sql)查询和数据操纵语言(dml)命令。在实施例中,分片键值的推导对于向分片数据库系统发出数据库命令的客户端应用是透明的。此外,分片键值的推导是使用与数据库命令对应的分片键表达式执行的。
17.本文描述的技术还支持从丰富的或复杂的sql命令推导分片键表达式和对应的分片键值,这些sql命令可以包括连接、子查询和带有运算符的表达式。因此,客户端应用不需要专门设计为在sdb系统中操作,以便向分片数据库系统发出数据库查询和数据库命令。例如,给定的数据库命令不需要指定表族的分片键值或服务名称来直接路由到目标分片,客户端应用也不需要以其它方式显式地向sdb系统提供分片键/服务名称。因此,本文公开的sdb命令处理技术有助于消除或最小化阻碍采用分片数据库的应用更改。另外,通过为数据库命令提供分片键值的自动和透明推导,客户端驱动程序支持将命令直接路由到分片。
18.sdb命令处理技术还透明地支持多分片查询和多分片事务或具有acid(原子性、一致性、隔离性和持久性)属性的更新,而无需应用代码更改。命令处理技术从应用的角度透明地区分单分片和多分片命令,因此不需要专门编程或配置来区分单分片和多分片命令。在实施例中,sdb命令处理技术将单分片命令与多分片命令区分开来,这允许仅在需要或期望时使用数据库协调器,例如以仅处理多分片命令。另外,sdb命令处理技术可以区分单分片和多分片事务或更新以将此类命令提升为可以支持涉及多个数据源的分布式事务的协调的协议。此类多分片事务协议包括xa、java事务api(jta)等。
19.分片数据库
20.水平分区是一种将单个较大表分解成较小、更易于管理的信息子集(被称为“分区”)的技术。分片是一种数据层体系架构,其中数据在独立的数据库实例之间进行水平分区,其中每个独立的数据库实例被称为“分片”。分片的集合一起构成单个逻辑数据库,被称为“分片数据库”或“sdb”。从逻辑上讲,客户端应用可以访问分片数据库,就像传统的非分片数据库一样。但是,分片数据库中的表是跨分片水平分区的。
21.图1图示了非分片数据库100和分片数据库110的示例。非分片数据库100是关系数据库并且包括表102。表102的所有内容都存储在相同的非分片数据库100中,因此可能使用相同的计算资源,诸如处理器、存储器和盘空间。
22.但是,分片数据库110描绘了使用分片技术的替代配置。分片数据库110包括三个分片112、114和116。分片112、114和116中的每一个是其自己的不同数据库实例并且分别包括其自己的不同表113、115和117。但是,在分片数据库110中,表102已经分别跨分片112、114和116水平分区为表113、115和117。分片数据库中的水平分区涉及跨分片拆分数据库
表,诸如表102,使得每个分片包含表102的行的子集。在这个示例中,表113、115和117均包含表102的行的子集。表102与表113、115和117之间的行的不同分片图示了如何在非分片数据库100和分片数据库110之间布置和拆分数据的示例。表113、115和117可以被统称为“分片表”。表113、115和117中统共存储的数据等同于表102中存储的数据。分片数据库110在逻辑上被视为单个数据库,并且因此可以像非分片数据库100一样由客户端应用访问。
23.在一个实施例中,分片是什么都不共享的数据库体系架构,因为分片112、114和116不需要共享如处理器、存储器和/或盘存储设备之类的物理资源。分片112、114和116在软件方面松散耦合并且不需要运行集群件(clusterware)。从数据库管理员的角度来看,分片数据库110由以或者共同管理或者单独管理的多个数据库实例组成。但是,从客户端应用的角度来看,分片数据库110在逻辑上看起来像单个数据库。因此,分片数据库110中包括的分片的数量以及数据跨那些分片的分布对客户端应用来说是完全透明的。
24.分片数据库110的配置提供了各种益处。例如,在实施例中,分片数据库110通过消除性能瓶颈并且通过添加附加分片和跨分片分布负载以使得有可能增加系统的性能和容量来改善可扩展性。分片数据库110可以被实现为什么都不共享的体系架构,因此,分片数据库中的每个分片是其自己的数据库实例,并且分片不需要共享诸如处理器、存储器和/或盘存储装置之类的硬件。
25.在实施例中,分片数据库110提供故障遏制,因为它消除了诸如共享磁盘、共享存储区域网络、集群件、共享硬件等等之类的单个故障点。相反,分片提供强故障隔离,因为单个分片的故障不影响其它分片的可用性。
26.分片数据库110还可以帮助提供对全局数据分布的增强。分片使得有可能将特定数据存储在与客户物理接近的位置。当数据必须按照法律在特定的司法管辖区内找到时,通过在那个辖区内物理定位用于那个特定数据的分片,可能有必要将数据物理地靠近客户存储,以满足法规要求。在物理上靠近客户存储数据还可以通过改善客户与存储在分片中的底层数据之间的时延来提供性能益处。
27.分片数据库110还可以帮助允许系统的滚动升级。在分片数据体系架构中,对一个分片进行的改变不影响分片数据库中其它分片的内容,由此允许数据库管理员首先尝试对存储在单个分片中的小数据子集的改变,然后将这些改变滚动到分片数据库中的其余分片。
28.分片数据库110还可以帮助在云部署中提供简单性。考虑到分片的尺寸可以做得任意小,数据库管理员可以容易地在由具有本地存储装置的低端商品服务器组成的云中部署分片数据库。
29.一般而言,分片数据库110可以在良好分区的应用中最有效,主要是访问单个分片内的数据,并且不具有用于跨分片操作的严格性能和一致性要求。因此,分片特别适用于oltp系统,诸如电子商务、移动、社交和saas。
30.分片数据库110还可以帮助提供对数据库模式改变跨分片的自动传播的改进。代替需要数据库管理员手动将数据库模式改变应用于每个单独的分片,分片数据库110可以自动地将这种模式改变传播到来自单个入口点的分片。
31.分片数据库110还可以帮助支持传统结构化查询语言(sql),因此可以利用已经可用的所有完整的sql语法和关键字。此外,考虑到分片数据库110支持sql,它可以容易地与
被配置为经由sql访问关系数据库的现有客户端应用集成。
32.分片数据库110还可以帮助提供关系数据库的功能齐全的优点,包括模式控制、原子性、一致性、隔离性和持久性。
33.分片数据库110还可以帮助提供将查询直接路由到分片,而不需要中间组件来路由查询。这种直接路由通过减少处理查询所需的网络跳数来改善系统时延。
34.总体系统体系架构
35.图2是根据一个实施例的数据库系统200的框图。客户端应用210是需要访问存储在数据库中的数据的任何类型的客户端应用。在一个实施例中,客户端应用210可以是oltp设置中的客户端,诸如电子商务、移动、社交或saas。客户端应用210通信耦合到分片数据库220。
36.分片数据库220是逻辑数据库,其中数据跨独立数据库实例水平分区。具体而言,将存储在分片数据库220中的数据水平分区并存储在分片230a、230b和230c中。分片数据库可以包括任意数量的分片,并且分片数据库中的分片的数量可以随时间而变化。根据一个实施例,分片230a、230b和230c中的每一个是其自己的数据库实例,其不需要与分片数据库220中的其它分片共享物理资源,诸如处理器、存储器和/或存储设备。
37.分片目录
38.分片数据库220包括分片目录240。分片目录240是用于存储分片数据库220的配置数据的特殊数据库。在一个实施例中,可以复制分片目录240,以提供改进的可用性和可伸缩性。存储在分片目录240中的配置数据可以包括:路由表,其映射哪个分片230存储与分片键的给定值、值范围或值集合对应的数据块;分片拓扑数据,其描述分片数据库220的整体配置;关于分片230a、230b和230c的配置的信息;关于分片导向器250、驱动程序260和/或高速缓存270的配置的信息;关于客户端应用210的信息;关于跨分片230a、230b和230c水平分区的数据的模式的信息;用于分片230a、230b和230c的未决和完整的模式修改指令的历史日志;以及与分片数据库220的配置相关的所有其它信息。
39.分片键是用于水平分区给定表族中的表集合的列值列表。分片键可以是复合的/分层的,诸如指定分片键和超级分片键。一个分片键可以由多个列组成。分片键的每列值可以是文字值或绑定变量,并且可能包含其它相关信息,诸如运算符和操作数。在实施例中,分片目录240提供分片键信息以帮助识别和连接到特定分片,并且这种分片键信息可以包括表族的服务名称、分片键的绑定参数(文字值或变量)、超级分片键的绑定参数(文字值或变量)、分片键的类型、超级分片键的类型、推导分片键值所涉及的运算符函数和操作数,和/或推导超级分片键值所涉及的运算符函数和操作数。
40.在一个实施例中,分片目录240维护存储包括多个映射条目的映射数据的路由表。多个映射条目中的每个映射条目将一个或多个分片键的不同键值集映射到分片数据库中的多个分片的分片中。在另一个实施例中,多个映射条目中的每个映射条目将一个或多个分片键的不同的键值集映射到分片数据库中的多个分片的分片上的数据块。在另实施例中,多个映射条目中的每个映射条目将一个或多个分片键的不同的键值集映射到包括分片数据库中的一个或多个分片的分片空间。在一个实施例中,键值集可以是分区键值的范围。在另一个实施例中,键值集可以是分区键值的列表。在另一个实施例中,键值集可以是散列值的集合。
41.因此,对于需要访问特定分片键值的数据的数据库命令,可以使用路由表来查找分片数据库中的哪个分片包含处理查询所需的数据块。
42.分片导向器
43.分片数据库220包括分片导向器250。分片导向器250协调跨分片数据库220的各种功能,并且相应地也可以被称为分片协调器。分片导向器250协调功能,包括但不限于,将数据库请求路由到分片、解析数据库命令以生成分片键表达式、将数据库模式更改传播到分片、监视分片的状态、从分片接收状态更新、从客户端应用接收通知、向分片发送通知、向客户端应用发送通知和/或协调影响分片数据库220的配置的各种操作,诸如重新分片操作。分片导向器250通信地耦合到分片目录240、客户端应用210和分片230a、230b和230c。
44.在实施例中,分片导向器250从从驱动程序260接收到的数据库命令(诸如sql查询)生成或推导分片键表达式。分片导向器250通过使用来自分片目录240的数据(诸如,表元数据、分片拓扑数据和一种或多种数据库命令语言的同义词)解析命令来推导用于特定命令的分片键表达式。当需要或期望帮助区分可能具有相同分片键表达式和/或分片键值的表族时,分片导向器250还可以推导服务名称并将其发送到驱动程序260。在实施例中,分片导向器250将提取的分片键表达式与服务名称以合适的格式作为字节流一起或单独发送到驱动程序260,合适的格式诸如支持不同表族的逆波兰表示法(reverse polish notation,rpn)版本、分片键中的多列、多级分片键(例如,分片键、超级分片键)以及带运算符的sql表达式。另一种合适的格式包括更高级别的表示,诸如javascript对象表示法(json)。
45.虽然被描绘为单个分片导向器250,但是在一个实施例中,分片数据库220可以包括多个分片导向器250。例如,在一个实施例中,分片数据库220可以包括三个分片导向器250。具有多个分片导向器250可以允许协调由分片导向器250执行的任务的负载均衡,由此改进性能。在多个分片导向器250的情况下,在一个实施例中,分片导向器250中的一个可以被选择为负责管理剩余分片导向器250(包括负载均衡)的分片导向器250的管理器。
46.驱动程序和高速缓存
47.图2的数据库系统200包括通信地耦合到客户端应用210和分片数据库220的驱动程序260。驱动程序260维护存储或高速缓存270以存储将给定数据库命令与分片键表达式相关联的条目。在实施例中,多个特定数据库命令可以与单个分片键表达式相关联。驱动程序260和/或分片导向器250可以将可以包括文字、绑定变量和/或运算符的特定数据库命令转换成经变换版本或准备好的语句。在实施例中,经变换版本或准备好的语句是数据库命令的泛化表示,并且可以包括一个或多个绑定变量来代替来自原始数据库命令的一个或多个文字值。驱动程序260可以通过使用经变换版本或准备好的语句来表示许多不同的数据库命令,并将许多不同的数据库命令与较少数量的分片键表达式相关联。
48.给定的分片键表达式还可以包括文字、绑定变量和/或运算符。在实施例中,一旦应用了一个或多个特定绑定值,具有绑定变量的分片键表达式就可以用于识别多个不同的分片或表族。一般而言,表族是相关表的层次结构的表示,并且每个表依次映射哪个分片存储与给定分片值对应的数据块。由于许多客户端应用使用带有绑定变量的数据库命令(例如,sql)来提高性能,因此在分片键表达式和高速缓存中支持绑定变量和运算符可以有助于最大限度地减少高速缓存中数据库命令的数量并减少从分片导向器检索分片键表达式
的需要。
49.当驱动程序260从客户端应用210接收到数据库命令时,驱动程序260确定高速缓存270中是否存在与接收到的数据库命令对应的任何数据库命令条目。如果是,那么驱动程序260从高速缓存270检索相关联的分片键表达式,然后可以评估分片键表达式以基于实际绑定值推导分片键值。在实施例中,驱动程序260评估分片键表达式以获得完全评估的分片键值,而无需联系分片导向器250。驱动程序260使用分片键值来识别特定分片230并且可以连接到特定分片以执行数据库命令。在实施例中,驱动程序260使用来自连接池的连接直接连接到特定分片,而不通过诸如分片导向器250的其它组件路由数据库命令。在实施例中,驱动程序260在高速缓存270中存储分片连接池,其维护数据库连接,使得当需要对数据库的未来请求时,可以重用连接。由于许多应用使用具有绑定变量的sql来提高性能,因此在分片键表达式和高速缓存270中支持绑定变量和运算符大大减少了高速缓存中sql的数量,并减少了从分片导向器检索分片键表达式的需要。
50.驱动程序260还经由分片导向器250通信地耦合到分片数据库220。在实施例中,如果驱动程序260确定接收到的数据库命令不与高速缓存270中的条目对应,那么驱动程序260将数据库命令传送到分片导向器250以从数据库命令推导分片键表达式并将分片键表达式返回给驱动程序。
51.在另一个实施例中,驱动程序260被配置为通过解析数据库命令来生成分片键表达式。为此,驱动程序260被配置为访问分片目录240中的数据,这些数据也可以本地存储到驱动程序,诸如高速缓存270。另外,驱动程序260将被配置为以不同的数据库命令语言版本执行复杂的数据库命令解析,以帮助支持向后兼容性。
52.路由数据库命令
53.典型客户端应用中的许多查询都是短的并且应该以毫秒时延进行处理。在将查询路由到适当的分片期间额外的网络跳和解析可能会引入客户端应用无法接受的时延。本公开提供了用于在路由从客户端应用发送的查询时最小化时延的技术。
54.客户端应用210生成并发送数据库命令以进行分片数据库220的数据请求。在一些情况下,来自客户端应用210的数据库命令将需要来自单个分片的数据。此类数据请求被称为单分片查询。单个分片查询将表示典型客户端应用的大部分数据请求,因为分片230a、230b和230c已被配置为使得每个分片中的块包含来自表族的表的对应分区。因此,大多数依赖表族中的数据的数据库命令将可能由单个分片提供服务,因为该表族的相关数据并置在同一个分片上。同样,对相对小和/或静态的引用表使用重复表有助于提高将查询作为单分片查询处理的可能性。
55.在其它情况下,来自客户端应用210的数据库命令将需要来自多个分片的数据。这样的命令被称为跨分片命令。处理跨分片命令通常比处理单分片命令慢,因为它可能需要连接来自多个分片的数据。例如,跨分片命令可以用于生成报告和收集需要来自多个分片的数据的统计信息。
56.分片目录240维护路由表,该路由表将由每个分片托管的块列表映射到与每个块相关联的散列值范围。因此,路由表可以用于确定,对于分片键值或分片键值集合,哪个分片包含包含分片键数据的块。在实施例中,在数据库经由复合分片进行分片的情况下,路由表还可以包括分片键和超级分片键的组合的映射信息。因此,在复合分片数据库的情况下,
路由表可以用于确定,对于给定的分片键值集合,哪个分片包含包含分片键值集合数据的块。
57.在实施例中,由分片目录240维护的路由表可由分片导向器250访问,这有助于将查询路由到适当的分片。在实施例中,分片导向器的功能在客户端应用210中实现,诸如经由驱动程序260。在另一个实施例中,分片导向器250的功能在每个单独分片230中的一个或多个上实现。在另一个实施例中,分片导向器250的功能可以被实现为分片导向器250和分片230外部的软件组件。该软件组件可以是分片数据库220的一部分或者可以在分片数据库220外部。在实施例中,软件组件可以在分片数据库220和客户端应用210外部。
58.在实施例中,分片导向器功能可以跨存在于客户端应用210和分片数据库220之间的多个软件组件s1至sn分布。软件组件s1至sn可以对客户端应用210和/或分片数据库220具有不同的可访问性。这种可访问性反映了各种通信特点,包括但不限于物理接近度、带宽、计算资源的可用性、工作负载以及将会影响软件组件s1至sn的可访问性的其它特点。
59.在实施例中,软件组件s1可以是客户端应用210和/或驱动程序260的客户端组件,并且可能比软件组件s2更容易被客户端应用210访问。同样,客户端应用210可能比软件组件s3更容易被软件组件s2访问,等等。因此,在这个示例中,软件组件s1被认为最接近客户端应用210,因为它最容易被客户端应用210访问,并且软件组件sn被认为离客户端应用210最远,因为它最不容易被客户端应用210访问。在实施例中,当在客户端应用210处创建数据库命令时,最接近客户端应用210的可用软件组件首先被用于尝试处理数据库请求。如果最接近客户端应用210的可用软件组件不能处理数据库命令,那么尝试下一个最接近的软件组件,以此类推,直到数据库命令被成功处理并被引导到(一个或多个)分片230用于执行。例如,如果软件组件没有足够的映射数据来正确路由命令,那么它可能无法处理数据库命令。通过使用最接近客户端应用210的可用软件组件来处理数据库命令,数据库系统200可以在处理命令时提供改进的性能,因为与其它软件组件相比,最接近的可用软件组件具有改进的可访问性。
60.访问和生成分片键表达式
61.在实施例中,客户端应用210生成要在分片数据库220上执行的数据库命令,但是不包括分片键值。因此,客户端应用210不能直接将命令路由到一个或多个识别出的分片230用于执行或处理。
62.图3a是用于过程300a访问分片键表达式的流程图,可以对其进行评估以识别目标分片键值。在方框302处,驱动程序260从客户端应用210接收数据库命令。例如,数据库命令可以是sql语句或dml命令。在方框304处,驱动程序260确定接收到的数据库命令是否与耦合到驱动程序的高速缓存270中的任何数据库命令条目对应,如果是,那么识别对应的数据库命令条目。在方框306处,如果接收到的数据库命令确实与高速缓存270中的数据库命令条目对应,那么驱动程序270从高速缓存中检索与识别出的数据库命令条目相关联的分片键表达式。在方框306之后,在方框308处,驱动程序270评估分片键表达式以确定分片键值。一般而言,驱动程序270通过将绑定变量替换为可以在原始数据库命令中提供的绑定值和/或通过评估分片键表达式中的运算符来评估分片键表达式。如果驱动程序270不能从分片键表达式确定分片键值,那么驱动程序可以使对应的数据库命令条目无效,并将数据库命令提供给分片导向器250进行处理。
63.在方框310处,驱动程序270使用分片键值和路由表来识别包含处理数据库命令所需的数据的特定目标分片230。在方框312处,驱动程序270直接连接到特定分片。在方框314处,数据库命令被传送到连接的分片以供执行,并且结果可以作为执行的结果直接返回给驱动程序260和客户端应用210。在方框314处,目标分片还可以返回识别特定分片存储的所有键范围的映射数据。例如,该映射数据可以由驱动程序260作为连接池存储在高速缓存270中。映射数据允许驱动程序260直接将具有与高速缓存的映射数据匹配的分片键表达式或值的后续命令路由到目标分片,而无需咨询分片导向器250。这有助于提高对目标分片的后续数据库请求的性能。
64.如果驱动程序260在方框304处确定接收到的数据库命令不对应于高速缓存270中的任何数据库命令条目,那么在方框316处,驱动程序260请求数据库命令的分片键表达式。在实施例中,在方框318处,驱动程序260将数据库命令发送到分片导向器250,导向器250在方框318处将数据库命令解析成树结构,并使用来自分片目录240的数据遍历树结构以生成分片键表达式。在这个实施例中,分片导向器250将分片键表达式发送到驱动程序260,驱动程序260在方框320处存储将分片键表达式与数据库命令相关联的高速缓存条目。在另一个实施例中,在方框318处,驱动程序260解析数据库命令以生成分片键表达式,并且在方框320处,驱动程序260存储将分片键表达式与数据库命令相关联的高速缓存条目。在方框320之后,驱动程序260从分片键表达式确定分片键值(方框308)、将分片键值映射到特定分片(方框310)、连接到特定分片(方框312),并向分片提供数据库命令用于执行(方框314)。
65.在方框320处,驱动程序260和/或分片导向器250可以将接收到的数据库命令(包括文字)存储在高速缓存270中。在方框320处,替代地或附加地,驱动程序260和/或分片导向器250可以将接收到的数据库命令变换成准备好的语句以存储在高速缓存270中。一般而言,准备好的语句是使用绑定变量代替文字的数据库命令,用于存储在高速缓存270中。举例来说,原始数据库sql命令可以包括:select fname,lname,pcode from cust where id=100;select fname,lname,pcode from cust where id=200;以及select fname,lname,pcode from cust where id=300。表示这三个sql命令的示例准备好的语句可以是:select fname、lname、pcode from cust where id=:cust_no。
66.在实施例中,如果分片导向器250或驱动程序260不能为数据库命令生成分片键表达式,那么分片导向器250被配置为解析数据库命令以生成分片键值,并且可以将分片键值返回给驱动程序260和/或可以将数据库命令路由到一个或多个目标分片。
67.作为过程300a的结果,驱动程序高速缓存270可能随时间累积许多(如果不是基本上全部的话)由给定客户端应用执行的最常见的数据库命令。因此,当接收到数据库命令时,驱动程序260能够识别高速缓存270中的现有数据库命令条目、评估对应的分片键表达式以确定分片键值,并使用确定的分片键值直接连接到(一个或多个)目标分片。这有助于消除分片导向器250的“中间人”,从而有助于高效地处理数据库系统200中的数据库命令。
68.如本文所讨论的,分片导向器220和/或驱动程序260可以使用表元数据和分片拓扑,例如,来解析数据库命令并推导分片键表达式。有许多合适的方式来表示分片键表达式,诸如以反向波兰表示法(rpn)格式,或以javascript对象表示法(json)的自定义名称值对结构。在实施例中,分片键表达式以分片键线路形式表示为rpn表达式。使用rpn表达式提供了一种紧凑的存储格式,其对于将来在数据库命令语言和分片键增强(诸如分片键的多
个层次结构)中的任何附加表达式支持也具有高度可扩展性。
69.rpn格式的分片键表达式的示例表示可以遵循以下抽象语法:
70.《shard key expression》::=《token》
71.《token》::=《parameter》|《literal》|《operator》
72.《parameter》::=

:’《digit》

73.《literal》::=《string literal》|《numeric literal》|...
74.《string literal》::=
‘“‘
《char》
…‘“′
75.《char》::=《unicode representation》
76.《numeric literal》::=《number format》
77.《op》::=

to_date’|

timestamp’|

add’|

sub’|

mul’|

div’|

swap’|

dup’|

pop’|

concatenate’|...
78.在这个实施例中,分片键表达式可以由令牌(token)指定;令牌可以由参数、文字和/或运算符指定;参数可以由列和数字指定;文字可以由应用中的值指定,并且可以是串文字或数字文字;串文字可以由字符指定;字符可以由unicode表示指定;数字文字可以由某种数字格式指定;并且还提供了可以进行评估的运算符(《op》)。
79.在说明性实施例中,来自客户端应用210的数据库命令可以是:select*from customers where cust_no=:b1 and date1=to_date(

apr-04-09



mon-dd-yy

)and cust_region=“california”。在这个示例中,“cust_region”是超级分片键,并且“cust_no”和“date1”是复合分片键或两部分分片键。分片键的“cust_no”部分由绑定变量“b1”指定,该变量可以使用特定的客户编号进行评估,诸如客户编号100。分片键的“date1”部分由运算符“to_date”指定,其中操作数“apr-04-09”和“mon-dd-yy”用于评估运算符。
80.在解析数据库命令时,在表1的“线路表达式”列中提供rpn格式的分片键表达式(如上所示)。这个示例中省略了分片键表达式中表族的服务名称。驱动程序260使用存储器堆栈来处理分片键表达式并推导在“堆栈内容”列中显示的分片键值。驱动程序260响应于分片键表达式的不同部分执行各种操作。
81.在表1的第1行,驱动程序260接收或以其它方式处理分片键表达式命令“push_empty_tuple”,并且作为响应将空元组推送到堆栈,诸如空数组列表,指示为{}。在第2行,驱动程序260接收分片键表达式命令“push_empty_key”,并且作为响应将空键推送到堆栈,诸如空数组列表,指示为[]。一般而言,提供元组和键,以促进驱动程序260推导分片键值。
[0082]
在第3行,驱动程序260接收命令“push_bind_variable 1”,并且作为响应,通过位置识别绑定变量并将(bind_variable,1)推送到堆栈。在第4行,驱动程序260接收命令“push_type 2”,并且作为响应将(type,2)推送到堆栈。在这个示例中,绑定类型2指定数字。在第5行,驱动程序260接收命令“push_parameter”,并且作为响应,驱动程序从堆栈中弹出两个对象,(type,2)&(bind_variable,1)。第一绑定值位于类型number的位置1,并且在这个示例中绑定值为100。驱动程序将100推送到堆栈。在第6行,驱动程序260接收命令“append_value_to_key”,并且作为响应从堆栈中弹出(100)和[],并将数组列表[(100)]推送到堆栈中。此时,[(100)]是分片键值。
[0083]
在第7行,驱动程序260接收命令“push_literal_length 9”,并且作为响应将(literal_length,9)对象推送到堆栈。在第8行,驱动程序260接收命令“push_type 1”并将
(type,1)对象推送到堆栈。在这个示例中,类型1指定字符。在第9行,驱动程序260接收命令“push_literal apr-04-09”,并且作为响应弹出(type,1)和(literal_length,9)、从线路读取9个字节,并推送“apr-04-09”作为文字。在第10行,驱动程序260接收命令“push_literal_length 9”,并且作为响应将(literal_length,9)对象推送到堆栈。在第11行,驱动程序260接收命令“push_type 1”,并且作为响应将(type,1)对象推送到堆栈。在这个示例中,类型1指定字符。在第12行,驱动程序260接收命令“push_literal

mon-dd-yy
′”
,并且作为响应弹出(type,1)和(literal_length,9)、从线路读取9个字节,并推送

mon-dd-yy

作为文字。在第13行,驱动程序260接收命令“push_binary_operator to_date”,并且作为响应弹出(

mon-dd-yy

)和(

apr-04-09

)、使用这两个操作数评估to_date,并将评估结果(在这个示例中是04/04/2009)推送到堆栈。在第14行,驱动程序260接收命令“append_value_to_key”,并且作为响应,从堆栈中弹出(04/04/2009)和[(100)],并将数组列表[(100)(04/04/2009)]推送到堆栈中。此时,[(100)(04/04/2009)]是分片键值。在第15行,驱动程序260接收命令“append_key_to_tuple”,并且作为响应弹出[(100)(04/04/2009)]和{},并将顶部元素推送到{}中。堆栈内容-[(100)(04/04/2009)]-此时是完整的分片键值。
[0084]
在第16行,驱动程序260接收命令“push_empty_key”,并且作为响应将空键推送到堆栈,诸如指示为[]的空数组列表。这是用于超级分片键。在第17行,驱动程序260接收命令“push_literal_length 10”,并且作为响应将(literal_length,10)对象推送到堆栈。在第18行,驱动程序260接收命令“push_type 1”,并且作为响应将(type,1)对象推送到堆栈。在这个示例中,类型1指定字符。在第19行,驱动程序260接收命令“push_literal california”,并且作为响应弹出(type,1)和(literal_length,10)、从线路读取10个字节,并推送(

california

)作为文字。在第20行,驱动程序260接收命令“append_value_to_key”,并且作为响应,从堆栈中弹出(

california

)和[],并将数组列表[(

california

)]推送到堆栈中。此时,[(

california

)]是超级分片键值。在第21行,驱动程序260接收命令“append_key_to_to_tuple”,并且作为响应弹出[(

california

)]和{[(100)(04/04/2009)]},并将[(

california

)]推送到{[(100)(04/04/2009)]}中。[(

california

)]是完整的分片键值。在第22行,驱动程序260接收命令“return tuple”,并且作为响应从堆栈中弹出顶部元素。所得的完全评估的分片键值作为{[(100)(04/04/2009)][(

california

)]}提供。
[0085][0086][0087]
表1
[0088]
处理多分片命令
[0089]
在实施例中,客户端应用210生成不包括分片键值并且还需要来自多个分片的数据的数据库命令。一般而言,客户端应用210请求执行单分片和多分片查询的混合。在实施例中,驱动程序260向分片导向器250提交多分片查询以协调跨多个分片的查询的执行。驱动程序260帮助识别由分片导向器250处理的多分片查询,并且从客户端应用210的角度来看,这种识别和处理是透明地执行的。因此,如果只是有可能存在一些多分片查询,那么客户端应用不需要总是向分片导向器提交查询,如果大多数查询是单个分片,那么这可能在计算上或资源上昂贵。
[0090]
图3b是用于管理多分片数据库命令(诸如,sql查询)的过程300b的流程图。在实施例中,驱动程序260仅在驱动程序从驱动程序、分片导向器250或一些其它组件接收到分片键表达式时将数据库命令高速缓存在高速缓存270中。对于随后接收到的与高速缓存270中的条目匹配的数据库命令,驱动程序260直接连接到分片230以获得良好的性能。在这个实施例中,驱动程序260继续连接到分片导向器250用于后续的多分片命令。如上所述,从客户端应用210的角度来看,该处理是透明地执行的,它不需要区分单分片命令和多分片命令。
[0091]
流程图300b包括方框322,其在方框304处确定接收到的数据库命令不与高速缓存270中的任何数据库命令条目对应之后。在方框322处,驱动程序260和/或分片导向器250确定接收到的数据库命令是否是多分片查询。如果是,那么在方框324处,分片导向器250接收并处置多分片查询的处理。例如,分片导向器可以解析查询以识别多个目标分片的多个分片键值、将分片键值映射到目标分片、连接到分片、将查询传送给分片用于执行,以及处理来自分片的结果,以生成被传送回驱动程序和客户端应用的结果。
[0092]
流程图300b还可以用于支持透明的多分片事务,诸如可以修改多个不同分片中的数据的dml事务。驱动程序260通过支持涉及多个数据源的全局分布式事务的协调,诸如通过促进多分片事务以通过例如xa协议或java事务api(jta)进行处理来帮助以原子方式处置多分片事务。一般而言,xa是许多数据库和事务监视器本机支持的两阶段提交协议。xa通过协调访问多个关系数据库的单个事务来确保数据完整性,并保证在所有参与的数据库中提交事务更新,或者从所有数据库中完全回滚,从而恢复到事务开始之前的状态。
[0093]
在其它系统中,客户端应用可能需要:1)如果可能存在一些多分片事务(如果大多数事务实际上是单分片,这可能是昂贵的),那么始终使用xa;或者2a)选择性地使用xa或者2b)当存在多分片更新时,通过分片导向器250和分片目录240。后一种方法(2a,2b)可能具有挑战性,因为应用并不总是知道它何时跨多个分片访问数据。本公开通过仅在需要时透明地将事务推广到xa来帮助。
[0094]
在实施例中,在方框322处,当驱动程序检测到到分片230或分片导向器250的现有本地事务并且检测到请求或发起了到不同分片或分片导向器的第二本地事务时,驱动程序260将数据库事务推广到xa(或其它合适的协议)。在这个示例中,从客户端应用到驱动程序的连接是逻辑连接,并且从驱动程序到每个数据库(分片或分片导向器)的连接是物理连接。对于每个逻辑连接,驱动程序可以维护到分片数据库的一个或多个物理连接。当存在多个具有不同物理连接的本地事务时,驱动程序将本地事务推广到xa。对于每个数据库命令,如果该命令已启动事务或处于事务中,那么数据库通知驱动程序。当客户端应用发出提交或回滚时,驱动程序执行xa协议来提交或回滚。默认情况下,数据库可以为同一个数据库使
用紧密耦合的事务分支。这有助于使在紧密耦合事务的一个事务分支中进行的所有预提交更新对数据库不同实例中的其它紧密耦合的分支可见。在实施例中,为了促进事务到xa的无缝推广,如果命令将在分片数据库220中启动事务,那么(一个或多个)分片230和分片导向器250可以通过捎带(piggyback)消息通知驱动程序260。
[0095]
在实施例中,在方框324处,驱动程序260将多分片事务发送到分片导向器250,这有助于管理分布式事务中的多个事务分支的协调中的内在性能开销、重要的可恢复性问题和级联由于不确定事务而导致的失败。
[0096]
语法
[0097]
虽然本公开提供了用于如何创建、管理和操纵分片数据库的语法的各种示例,但这些示例仅仅是说明性的。本系统可以使用现有的关系数据库编码语言或查询语言(诸如结构化查询语言(sql))来实现。这意味着遗留系统可以轻松地升级、迁移或连接到包括本文描述的分片数据库教导的系统,因为不需要对sql进行重大改变。数据操纵语言(dml)的使用不要求任何改变就可以利用本系统的益处。此外,ddl的使用只要求很小的改变来支持实现分片数据库的分片组织所必需的关键字。另外,本文公开的特征可以应用于多种不同的分片选项,诸如oracle real application clusters(rac)分片、共享盘分片、统一数据库或容器数据库分片、无共享数据库等。
[0098]
数据库概述
[0099]
本公开的实施例用在数据库管理系统(dbms)的上下文中。因此,提供了示例dbms的描述。
[0100]
一般而言,诸如数据库服务器之类的服务器是集成的软件组件和计算资源(诸如存储器、节点以及节点上用于执行集成的软件组件的处理)的分配的组合,其中软件和计算资源的组合专用于代表服务器的客户端提供特定类型的功能。数据库服务器管理并促进对特定数据库的访问,从而处理客户端访问数据库的请求。
[0101]
数据库包括存储在永久存储器机制(诸如硬盘的集合)上的数据和元数据。例如,根据关系和/或对象-关系数据库结构,这些数据和元数据可以逻辑地存储在数据库中。
[0102]
用户通过向数据库服务器提交命令来与dbms的数据库服务器进行交互,这些命令使数据库服务器对存储在数据库中的数据执行操作。用户可以是运行在与数据库服务器交互的客户端计算机上的一个或多个应用。多个用户在本文也可以被统称为用户。
[0103]
数据库命令可以是数据库语句的形式。为了让数据库服务器处理数据库语句,数据库语句必须符合数据库服务器支持的数据库语言。数据库服务器支持的数据库语言的一个非限制性示例是sql,包括诸如oracle等数据库服务器(例如oracle数据库11g)所支持的sql的专有形式。将sql数据定义语言(“ddl”)指令发布到数据库服务器,以创建或配置数据库对象,诸如表、视图或复杂类型。dml指令被发布到dbms,以管理存储在数据库结构内的数据。例如,select、insert、update和delete是在一些sql实现中找到的dml指令的常见示例。sql/xml是在对象-关系数据库中操纵xml数据时使用的sql的常见扩展。
[0104]
一般而言,数据被存储在一个或多个数据容器中的数据库中,每个容器包含记录,并且每个记录内的数据被组织成一个或多个字段。在关系数据库系统中,数据容器通常被称为表,记录被称为行,而字段被称为列。在面向对象的数据库中,数据容器通常被称为对象类,记录被称为对象,而字段被称为属性。其它数据库体系架构可以使用其它术语。实现
本公开的各方面的系统不限于任何特定类型的数据容器或数据库体系架构。但是,为了解释的目的,本文使用的示例和术语将是通常与关系数据库或对象-关系数据库相关联的示例和术语。因此,本文将使用术语“表”、“行”和“列”分别是指数据容器、记录和字段。
[0105]
多节点数据库管理系统由共享对相同数据库的访问的互连节点组成。通常,节点经由网络互连,并以不同程度共享对共享存储装置的访问,例如,共享对盘驱动器集合以及其上存储的数据块的访问。多节点数据库系统中的节点可以是经由网络互连的一组计算机(例如,工作站、个人计算机)的形式。替代地,节点可以是网格的节点,其由与机架上的其它服务器刀片互连的服务器刀片形式的节点组成。
[0106]
多节点数据库系统中的每个节点托管数据库服务器。诸如数据库服务器之类的服务器是集成的软件组件和计算资源(诸如存储器、节点以及节点上用于执行集成的软件组件的处理)的分配的组合,其中软件和计算资源的组合专用于代表一个或多个客户端执行特定的功能。
[0107]
来自多节点数据库系统中的多个节点的资源可以被分配以运行特定数据库服务器的软件。软件和来自节点的资源分配的每种组合是在本文被称为“服务器实例”或“实例”的服务器。数据库服务器可以包括多个数据库实例,其中的一些或全部在分离的计算机上运行,包括分离的服务器刀片。
[0108]
硬件概述
[0109]
现在参考图4,图4是图示其中可以体现本公开的(一个或多个)示例实施例的基本计算设备400的框图。计算设备400及其组件,包括它们的连接、关系和功能,意味着是说明性的,并不意味着限制(一个或多个)示例实施例的实施方式。适合实现(一个或多个)示例实施例的其它计算设备可以具有不同的组件,包括具有不同连接、关系和功能的组件。
[0110]
计算设备400可以包括总线402或其它通信机制,用于寻址主存储器406并且用于在设备400的各个组件之间以及之间传送数据。
[0111]
计算设备400还可以包括与总线402耦合的用于处理信息的一个或多个硬件处理器404。硬件处理器404可以是通用微处理器、片上系统(soc)或其它处理器。
[0112]
诸如随机存取存储器(ram)或其它动态存储设备之类的主存储器406也可以耦合到总线402,用于存储信息和要由(一个或多个)处理器404执行的软件指令。主存储器406还可以用于在执行要由(一个或多个)处理器404执行的软件指令期间存储临时变量或其它中间信息。
[0113]
当软件指令存储在(一个或多个)处理器404可访问的存储介质中时,将计算设备400呈现为定制为执行软件指令中指定的操作的专用计算设备。术语“软件”、“软件指令”、“计算机程序”、“计算机可执行指令”和“处理器可执行指令”应当被广义地解释为覆盖任何机器可读信息,无论是否人类可读,用于指示计算设备执行具体操作,并且包括但不限于应用软件、桌面应用、脚本、二进制文件、操作系统、设备驱动程序、引导装载程序、外壳、实用程序、系统软件、javascript、网页、web应用、插件、嵌入式软件、微码、编译器、调试器、解释器、虚拟机、链接器和文本编辑器。
[0114]
计算设备400还可以包括耦合到总线402的只读存储器(rom)408或其它静态存储设备,用于存储用于(一个或多个)处理器404的静态信息和软件指令。
[0115]
一个或多个大容量存储设备410可以耦合到总线402,用于在诸如磁性、光学、固
态、磁-光、闪存或任何其它可用大容量存储技术的固定或可移动介质上持久地存储信息和软件指令。大容量存储装置可以在网络上共享,或者可以是专用的大容量存储。通常,大容量存储设备410中的至少一个(例如,设备的主硬盘)存储用于指导计算设备的操作的程序和数据的主体,包括操作系统、用户应用程序、驱动程序和其它支持文件以及其它各种数据文件。
[0116]
计算设备400可以经由总线402耦合到显示器412,诸如液晶显示器(lcd)或其它电子可视显示器,用于向计算机用户显示信息。在一些配置中,结合触摸检测技术(例如,电阻式、电容式等等)的触敏表面可以被覆盖在显示器412上,以形成用于将触摸手势(例如,手指或触控笔)输入传送到(一个或多个)处理器404的触敏显示器。
[0117]
包括字母数字键和其它键的输入设备414可以耦合到总线402,用于向处理器404传送信息和命令选择。除了或者代替字母数字键和其它键,输入设备414还可以包括一个或多个物理按钮或开关,诸如例如电源(开/关)按钮、“主页”按钮、音量控制按钮等。
[0118]
另一种类型的用户输入设备可以是光标控件416(诸如鼠标、轨迹球或光标方向键),用于向处理器404传送方向信息和命令选择并且用于控制显示器412上的光标移动。这种输入设备通常具有在两个轴(第一个轴(例如,x)和第二个轴(例如,y))中的两个自由度,以允许设备在平面内规定位置。
[0119]
虽然在一些配置(诸如图4所示的配置)中显示器412、输入设备414和光标控件416中的一个或多个是计算设备400的外部组件(即,外围设备),但是显示器412、输入设备414和光标控件416中的一些或全部在其它配置中作为计算设备400的形状因子的一部分被集成。
[0120]
所公开的系统、方法和模块的功能可以由计算设备400响应于(一个或多个)处理器404执行包含在主存储器406中的软件指令的一个或多个程序而执行。这种软件指令可以从另一个存储介质(诸如(一个或多个)存储设备410)读取到主存储器406中。包含在主存储器406中的软件指令的执行使(一个或多个)处理器404执行(一个或多个)示例实施例的功能。
[0121]
虽然(一个或多个)示例实施例的功能和操作可以完全用软件指令来实现,但是计算设备400的硬连线或可编程电路系统(例如,asic、fpga等)可以在其它实施例中根据当前特定实施方式的要求代替软件指令或与软件指令相结合使用以执行功能。
[0122]
如本文所使用的,术语“存储介质”是指存储使计算设备以特殊方式操作的数据和/或软件指令的任何非瞬态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如非易失性随机存取存储器(nvram)、闪存、光盘、磁盘或固态驱动器,诸如存储设备410。易失性介质包括动态存储器,诸如主存储器406。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带,或者任何其它磁性数据存储介质,cd-rom,任何其它光学数据存储介质,任何具有孔模式的物理介质,ram、prom和eprom、flash-eprom、nvram、闪存,任何其它存储器芯片或盒式磁带。
[0123]
存储介质与传输介质截然不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线402的配线。传输介质还可以采取声或光波的形式,诸如在无线电波和红外线数据通信中产生的那些。
[0124]
各种形式的介质可以参与把一条或多条软件指令的一个或多个序列携带到(一个
或多个)处理器404以供执行。例如,软件指令最初可以在远端计算机的磁盘或固态驱动器上携带。远端计算机可以把软件指令加载到其动态存储器中并且利用调制解调器经电话线发送软件指令。位于计算设备400本地的调制解调器可以在电话线上接收数据并且使用红外线发送器把数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以把数据放在总线402上。总线402把数据携带到主存储器406,(一个或多个)处理器404从该主存储器406检索并执行软件指令。由主存储器406接收的软件指令可以可选地在被处理器404执行之前或之后存储在存储设备410上。
[0125]
计算设备400还可以包括耦合到总线402的一个或多个通信接口418。通信接口418提供耦合到有线或无线网络链路420的双向数据通信,该有线或无线网络链路420连接到本地网络422(例如,以太网、无线局域网、蜂窝电话网络、蓝牙无线网络等)。通信接口418发送和接收携带表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。例如,通信接口418可以是有线网络接口卡、具有集成的无线电天线的无线网络接口卡,或调制解调器(例如,isdn、dsl或电缆调制解调器)。
[0126]
(一个或多个)网络链路420通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路420可以通过本地网络422提供到主计算机424或到由互联网服务提供商(isp)426运营的数据装备的连接。isp 426进而通过现在通常称为“互联网”428的全球分组数据通信网络提供数据通信服务。(一个或多个)本地网络422和互联网428使用携带数字数据流的电信号、电磁信号或光信号。将数字数据携带到计算设备400和从计算设备400携带数字数据的通过各种网络的信号以及(一个或多个)网络链路420上并通过(一个或多个)通信接口418的信号是传输介质的示例形式。
[0127]
计算设备400可以通过(一个或多个)网络、(一个或多个)网络链路420和(一个或多个)通信接口418发送消息和接收数据,包括程序代码。在互联网示例中,服务器430可以通过互联网428、isp426、(一个或多个)本地网络422和(一个或多个)通信接口418发送对应于程序的所请求代码。
[0128]
所接收的代码可以在其被接收时由处理器404执行,和/或存储在存储设备40或其它非易失性储存器中,供随后执行。
[0129]
软件概述
[0130]
图5是可以被用于控制计算设备400的操作的基本软件系统500的框图。软件系统500及其组件,包括其连接、关系和功能,仅意味着是说明性的,并不意味着限制(一个或多个)示例实施例的实施方式。适合实现(一个或多个)示例实施例的其它计算设备可以具有不同的组件,包括具有不同连接、关系和功能的组件。
[0131]
提供软件系统500是为了指引计算设备400的操作。可以存储在系统存储器(ram)406中和固定存储器(例如,硬盘或闪存)410上的软件系统500包括内核或操作系统(os)510。
[0132]
os 510管理计算机操作的低级方面,包括管理进程的执行、存储器分配、文件输入和输出(i/o)以及设备i/o。被表示为502a、502b、502c...502n的一个或多个应用可以被“加载”(例如,从固定存储装置410传送到存储器406中)以供系统500执行。应用或旨在用于设备400上的其它软件也可以被存储为可下载的计算机可执行指令集,例如用于从互联网位置(例如,web服务器、应用商店或其它在线服务)下载和安装。
[0133]
软件系统500包括图形用户界面(gui)515,用于以图形(例如,“指点并点击”或“触摸手势”)方式接收用户命令和数据。这些输入进而可以由系统500根据来自操作系统510和/或(一个或多个)应用502的指令来对其起作用。gui 515还用于显示来自os 510和(一个或多个)应用的操作结果502,于是用户可以提供附加的输入或终止会话(例如,注销)。
[0134]
os 510可以直接在设备400的裸硬件520(例如,(一个或多个)处理器404)上执行。替代地,管理程序或虚拟机监视器(vmm)530可以插入在裸硬件520和os 510之间。在这种配置中,vmm 530充当设备400的os 510和裸硬件520之间的软件“缓冲垫”或虚拟化层。
[0135]
vmm 530实例化并运行一个或多个虚拟机实例(“访客机器”)。每个访客机器包括“访客”操作系统(诸如os 510)以及被设计为在访客操作系统上执行的一个或多个应用(诸如应用502)。vmm 530为访客操作系统呈现虚拟操作平台并管理访客操作系统的执行。
[0136]
在一些情况下,vmm 530可以允许访客操作系统运行,就好像它直接在设备400的裸硬件520上运行一样。在这些情况下,被配置为直接在裸硬件520上执行的访客操作系统的相同版本也可以在vmm 530上执行而无需修改或重新配置。换句话说,在一些情况下,vmm 530可以向访客操作系统提供完整的硬件和cpu虚拟化。
[0137]
在其它情况下,访客操作系统可以被具体地设计或配置为在vmm 530上执行以提高效率。在这些情况下,访客操作系统“知道”它在虚拟机监视器上执行。换句话说,在一些情况下,vmm 530可以向访客操作系统提供半虚拟化。
[0138]
上述基本计算机硬件和软件是为了说明可以被用于实现(一个或多个)示例实施例的基本底层计算机组件而给出的。但是,(一个或多个)示例实施例不一定限于任何特定的计算环境或计算设备配置。相反,(一个或多个)示例实施例可以在本领域技术人员将根据本公开理解为能够支持本文给出的(一个或多个)示例实施例的特征和功能的任何类型的系统体系架构或处理环境中实现。
[0139]
扩展和替代
[0140]
虽然前述说明书中描述的一些附图包括具有以一定次序示出的步骤的流程图,但是这些步骤可以以任何次序执行,而不限于那些流程图中示出的次序。此外,一些步骤可以是可选的、可以执行多次,和/或可以由不同的组件执行。在本文描述的流程图的所有步骤、操作和功能旨在指示在各种实施例中使用专用计算机或通用计算机中的编程执行的操作。换句话说,本公开中的每个流程图结合本文的相关文字是用于对计算机进行编程以执行所描述的功能的算法的全部或部分的指南、计划或规范。与本公开相关联的领域中的技术水平已知是高的,并且因此本公开中的流程图和相关文字已经准备好以当技术人员通常在该领域期望的充足性和细节水平传达关于程序、算法及其实施方式的信息。
[0141]
在前面的说明书中,已经参考许多具体细节描述了本公开的(一个或多个)示例实施例。但是,根据当前特定实施方式的要求,细节可以因实施方式而异。因而,(一个或多个)示例实施例应当被认为是说明性而不是限制性的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献