技术领域
[0001] 本公开的
实施例总体涉及数据存储领域,具体涉及用于存储数据的方法、装置和计算机程序产品。
背景技术
[0002] 现代存储系统在将数据存储到存储设备之前,可能对数据进行压缩以节省所需的存储空间。在读取以压缩方式存储的数据时,需要首先对数据执行解压缩操作,从而得到压缩前的数据。然而,不同数据能够实现的压缩效果是不同的。例如,对于已经被压缩过的数据而言,对其进行再次压缩通常不能显著减小其数据量。针对这样的数据,在存储前执行压缩操作将不会带来存储空间上的显著节省,反而会引入压缩和解压缩操作所带来的额外处理开销。
发明内容
[0003] 本公开的实施例提供了用于存储数据的方法、装置和计算机程序产品。
[0004] 在本公开的第一方面,提供了一种用于存储数据的方法。该方法包括:响应于接收到向文件写入数据的
请求,确定该文件的类型;基于确定的类型,确定该数据的压缩属性;确定在用于存储该文件的存储设备中与待写入的数据相对应的存储区域;以及基于压缩属性,将数据存储到该存储区域中。
[0005] 在本公开的第二方面,提供了一种用于存储数据的装置。该装置包括至少一个处理单元和至少一个
存储器。至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令。该指令当由至少一个处理单元执行时使得装置执行动作,该动作包括:响应于接收到向文件写入数据的请求,确定该文件的类型;基于确定的类型,确定该数据的压缩属性;确定在用于存储该文件的存储设备中与待写入的数据相对应的存储区域;以及基于压缩属性,将数据存储到该存储区域中。
[0006] 在本公开的第三方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机存储介质中并且包括机器可执行指令。该机器可执行指令在由设备执行时使该设备执行根据本公开的第一方面所描述的方法的任意步骤。
[0007] 提供发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。
附图说明
[0008] 通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。
[0009] 图1示出了本公开的实施例能够在其中被实施的示例环境的示意图;
[0010] 图2示出了根据本公开的实施例的示例存储系统的
框图;
[0011] 图3示出了根据本公开的实施例的用于将数据从高速缓存冲刷至存储设备的示例方法的
流程图;
[0012] 图4示出了根据本公开的实施例的示例存储系统的框图;
[0013] 图5A和图5B示出了根据本公开的实施例的I/O请求的示例处理路径的示意图;
[0014] 图6示出了根据本公开的实施例的用于存储数据的示例方法的流程图;以及[0015] 图7示出了可以用来实施本公开内容的实施例的示例设备的示意性框图。
[0016] 在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
[0017] 下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0018] 在本文中使用的术语“包括”及其
变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
[0019] 图1示出了本公开的实施例能够在其中被实现的示例环境100的框图。如图1所示,环境100包括主机110、存储管理器120以及存储设备130。应当理解,仅出于示例性的目的描述环境100的结构,而不暗示对于本公开的范围的任何限制。例如,本公开的实施例还可以被应用到与环境100不同的环境中。
[0020] 在环境100中,主机110可以例如是运行用户应用的任何物理计算机、
虚拟机、
服务器等等。主机110可以向存储管理器120发送输入/输出(I/O)请求,例如用于从存储设备130读取数据和/或向存储设备130写入数据等。响应于接收到来自主机110的读请求,存储管理器120可以从存储设备130读取数据,并且将所读取的数据返回给主机110。响应于接收到来自主机110的写请求,存储管理器120可以向存储设备130写入数据。存储设备130可以是任何目前已知或者将来开发的非易失性存储介质,例如磁盘、固态盘(SSD)或磁盘阵列等。
[0021] 为了节省数据存储所需要的空间,存储管理器120中可以部署有压缩/解压缩引擎(未示出)。例如,当存储管理器120从主机110接收到向存储设备130写入数据的写请求时,存储管理器120可以利用该压缩/解压缩引擎来压缩待存储的数据,然后将经压缩的数据存储到存储设备130。这样,在读取以压缩方式存储的数据时,存储管理器120需要首先利用压缩/解压缩引擎对所读取的数据进行解压缩,然后将经解压缩的数据返回给主机110。
[0022] 如上所述,不同数据能够实现的压缩效果是不同的。例如,对于已经被压缩过的数据而言,对其进行再次压缩通常不能显著减小其数据量。针对这样的数据,在存储前执行压缩操作将不会带来存储空间上的显著节省,反而会引入压缩和解压缩操作所带来的额外处理开销。
[0023] 本公开的实施例提出了一种用于存储数据的方案,以解决上述问题和其他潜在问题中的一个或多个。该方案能够根据I/O请求所涉及的文件类型来确定该I/O请求所针对的数据的压缩属性,进而确定在对该数据进行存储之前是否要执行
数据压缩操作。以此方式,该方案能够在尽量减小存储数据所需的存储空间的同时,避免不必要的压缩操作,从而提高系统性能。
[0024] 图2示出了根据本公开的实施例的示例存储系统200的框图。在图2中,存储管理器120总体上可以包括协议
接口层210以及存储服务层220。在一些实施例中,如以下结合图4所描述的,取决于存储管理器120所提供的服务类型,存储管理器120中的存储服务层的数目可以是不同的。如图2所示,存储服务层220例如可以包括检测模
块221、地址映射模块222和高速缓存模块230。应当理解,仅出于示例性的目的描述存储系统200的结构和功能,而不暗示对于本公开的范围的任何限制。
[0025] 在存储系统200中,存储管理器120可以是与主机110分离的设备,其例如可以通过网络或其他方式与主机110通信地耦合。存储管理器120可以通过协议接口层210向主机110提供网络文件系统接口(诸如,通用网络文件系统(CIFS)、网络文件系统(NFS)接口等),并且利用存储服务层来向主机110提供数据存储服务。例如,主机110可以通过存储管理器120所提供的文件系统接口来向存储管理器120发送诸如创建文件、向创建的文件写入数据、改写文件中的数据、读取文件中的数据和/或删除创建的文件等I/O请求。与文件相关联的数据可以被存储在存储设备130中。存储设备130中的物理存储空间可以被划分为多个逻辑存储单元进行管理。
[0026] 当主机110向存储管理器120发送向文件写入数据的请求(诸如,创建文件、向已创建的文件写入数据、或者改写某个文件中的数据等)时,该请求可以经由协议接口层210被转发至存储服务层220。响应于接收到该请求,存储服务层220中的检测模块221可以对该文件的类型进行检测,以确定该文件是否为压缩文件。
[0027] 在一些实施例中,检测模块221可以基于该文件的文件名来确定该文件的类型。例如,检测模块221可以从请求中获取该文件的文件名。所获取的文件名通常可以包括主文件名和扩展文件名,其中扩展文件名通常可以指示该文件的类型。在一些实施例中,检测模块221可以将从请求中获取的该文件的扩展文件名与指示类型为压缩文件的一个或多个预定扩展名进行匹配。如果该文件的扩展文件名与一个或多个预定扩展名之一相匹配,则表示该文件为压缩文件。指示压缩文件的预定扩展名的示例包括但不限于zip、ace、tar、jar、gz、lzh、iso、uue、arj、bz2等。
[0028] 在一些实施例中,如果所请求写入的文件尚未被创建,存储服务层220可以首先在其文件系统(图2中未示出)中创建所请求的文件。例如,存储服务层220可以生成并存储与该文件相对应的文件系统元数据,以用于记录与该文件有关的信息。文件系统元数据例如可以被存储在存储设备130中或者其他存储装置(该存储装置可以位于存储管理器120处,或者与存储管理器120分离)中。在诸如UNIX的
操作系统中,文件系统元数据通常包括i
节点(inode)和间接块(Indirect Block,简称IB)等。存储服务层220可以例如根据所创建的文件的文件名来确定该文件是否为压缩文件,并且然后将指示该文件是否为压缩文件的信息记录在与该文件相对应的文件系统元数据(例如,inode)中。这样,当接收到向已创建的文件写入数据的请求时,存储服务层220中的检测模块221可以获取与该文件相关联的文件系统元数据,并且基于该文件系统元数据来确定该文件的类型。
[0029] 附加地或者备选地,在一些实施例中,检测模块221还可以基于文件中的某些内容来确定该文件是否为压缩文件。通常,在文件中可以存在指示该文件的类型的特定字节序列,这样的字节序列也被称为“魔术数字(magic number)”。例如,以rar文件为例,其开头的几个字节通常为“Rar”。以zip文件为例,其开头的几个字节通常为“PK”。以tar文件为例,其魔术数字通常从第257个字节开始,为“ustar”。在一些实施例中,检测模块221可以打开文件并从文件中获取指示该文件的类型的这种字节序列,然后将所获取的字节序列与指示类型为压缩文件的一个或多个预定字节序列(例如,“Rar”、“PK”、“ustar”等)进行匹配。如果从文件中获取的字节序列与一个或多个预定字节序列之一相匹配,则表示该文件为压缩文件。这种基于魔术数字的方式能够避免压缩文件被重命名而无法通过其扩展文件名来判断其是否为压缩文件的情况。
[0030] 以此方式,当由主机110发送的I/O请求经由协议接口层210被转发至存储服务层220时,存储服务层220中的检测模块221能够确定该I/O请求所涉及的文件是否为压缩文件,进而确定该I/O请求所涉及的数据的压缩属性。例如,如果该I/O请求所涉及的文件为压缩文件,则检测模块221可以确定该I/O请求(例如,写请求)所涉及的数据可能为压缩数据,其在被存储在存储设备130之前无需被再次压缩(因此,本文中也称为“不可压缩”的数据);
否则,该I/O请求所涉及的数据可以被认为是可压缩的数据。在一些实施例中,检测模块221可以进一步生成标签以指示I/O请求所涉及的数据的压缩属性,并且利用所生成的标签来标记该I/O请求。经标记的I/O请求可以被发送至地址映射模块222。
[0031] 在向文件写入数据的I/O请求中通常存在用于指示写入
位置的文件偏移地址和待写入的数据的长度。然而,如上所述,存储设备130中的物理存储空间可以被划分为多个逻辑存储单元进行管理。地址映射模块222可以实现从文件偏移地址到逻辑存储单元地址的转换。此外,地址映射模块222还可以维护逻辑存储单元与实际物理存储空间之间的映射关系。因此,地址映射模块222可以基于经标记的I/O请求中的文件偏移地址和写入长度来确定在存储设备130中与待写入的数据相对应的存储区域。例如,地址映射模块222可以将经标记的I/O请求中的文件偏移地址转换成存储设备130中的地址,并且将经过地址转换的I/O请求发送至高速缓存230。
[0032] 高速缓存230可以包括高速持久存储介质,以用于缓存所接收到的I/O请求及其涉及的数据。由于所缓存的I/O请求包括指示数据的压缩属性的标签,因此数据和指示该数据是否可压缩的标签被相关联地缓存在高速缓存230处。所缓存的数据可以被如图2所示的冲刷引擎231冲刷至存储设备130中。冲刷引擎231可以是在高速缓存230处运行的后台服务,其可以扫描高速缓存230中的缓存页面。当扫描到缓存有脏数据(即,尚未被冲刷到存储设备130的数据)的页面时,高速缓存123可以将该页面中的数据冲刷到存储设备130中。
[0033] 在一些实施例中,为了提高I/O处理性能,当待存储的数据被写入到高速缓存230后,高速缓存230可以返回针对所接收到的I/O请求的响应,而不必等到数据被冲刷到存储设备130。该响应最终可以经由协议接口层210被返回给主机110。
[0034] 在一些实施例中,在将数据冲刷到存储设备130时,冲刷引擎231可以检查与数据相关联的标签,该标签例如可以指示该数据的压缩属性。冲刷引擎231可以基于该压缩属性来将该数据从高速缓存230冲刷至存储设备130中。
[0035] 图3示出了根据本公开的实施例的用于将数据冲刷至存储设备的方法300的流程图。方法300例如可以由如图2所示的冲刷引擎231来执行。应当理解,方法300还可以包括未示出的附加动作和/或可以省略所示出的动作,本公开的范围在此方面不受限制。以下结合图2来详细描述方法300。
[0036] 在框310处,冲刷引擎231获取待冲刷的数据。在框320处,冲刷引擎231确定与该数据相关联的标签是否指示该数据可压缩。如果该数据可压缩,则在框330处,冲刷引擎231利用压缩引擎来对该数据进行压缩。在框340处,冲刷引擎231确定经压缩的数据的大小(也称为“第一大小”)与未经压缩的数据的大小(也称为“第二大小”)的比值。在框350处,冲刷引擎231确定该比值是否低于预定
阈值(例如,25%)。如果该比值低于预定阈值,则在框360处,冲刷引擎231将经压缩的数据冲刷到存储设备。如果在框320处确定该数据不可压缩或者在框350处确定数据压缩的比值不低于预定阈值,则在框370处,冲刷引擎231将未经压缩的数据冲刷到存储设备130。
[0037] 图4示出了根据本公开的实施例的用于存储数据的存储系统400的框图。在图4中,如图2所示的存储服务层220被划分为两个存储服务层220-1和220-2。例如,存储系统400能够提供基于文件的存储服务和基于数据块(例如,逻辑存储单元)的服务,因此存储管理器120可以包括用于提供基于文件的存储服务的文件存储服务层220-1和用于提供基于块的存储服务的块存储服务层220-2。例如,如图2所示的检测模块221可以被实施在文件存储服务层220-1处,而运行有冲刷引擎231的高速缓存230可以被实施在块存储服务层220-2处。
此外,在图4中,如图2所示的地址映射模块222被划分成地址映射模块222-1和地址映射模块222-2。地址映射模块222-1可以被实施在文件存储服务层220-1处,用于实现从文件偏移地址到逻辑存储单元地址的转换。地址映射模块222-2可以被实施在块存储服务层220-2处,用于实现逻辑存储单元地址到物理存储地址的转换。
[0038] 图5A示出了根据本公开的实施例的在存储系统400中I/O请求的示例处理路径的示意图。如图5A所示,由主机110发送的向文件写入数据的I/O请求501501经由协议接口层210被转发至检测模块221。检测模块221确定I/O请求501所涉及的文件的类型,其中类型指示该文件是否为压缩文件。如果是压缩文件,则表明待写入的数据不可压缩;如果不是压缩文件,则表明待写入的数据可压缩。检测模块221可以生成指示待写入数据的压缩属性的标签,并且利用所生成的标签来标记I/O请求501,以生成经标记的I/O请求502。经标记的I/O请求502被发送至地址映射模块222-1。地址映射模块222-1将I/O请求502中指示数据写入位置的文件偏移地址转换成逻辑存储单元地址,并且将转换后的I/O请求503发送至地址映射模块222-2。地址映射模块222-2将I/O请求503中的逻辑存储单元地址转换成物理存储地址,并且将经地址转换后的I/O请求504连同待存储的数据缓存到高速缓存230中。在高速缓存230处运行的冲刷引擎231通过执行如图3所示的方法300将数据505冲刷到存储设备130中。
[0039] 由于地址转换通常消耗较多的系统资源,为了进一步提高I/O请求的处理效率,在一些实施例中,例如在块存储服务层220-2中,I/O请求可以首先被缓存到高速缓存230中,然后再经由地址映射模块222-2进行地址转换。
[0040] 图5B示出了根据本公开的实施例的在存储系统400中I/O请求的另一示例处理路径的示意图。如图5B所示,由主机110发送的向文件写入数据的I/O请求511经由协议接口层210被转发至检测模块221。检测模块221确定I/O请求511所涉及的文件的类型,其中类型指示该文件是否为压缩文件。如果是压缩文件,则表明待写入的数据不可压缩;如果不是压缩文件,则表明待写入的数据可压缩。检测模块221可以生成指示待写入数据的压缩属性的标签,并且利用所生成的标签来标记I/O请求511,以生成经标记的I/O请求512。经标记的I/O请求502被发送至地址映射模块222-1。地址映射模块222-1将I/O请求502中指示数据写入位置的文件偏移地址转换成逻辑存储单元地址,并且将转换后的I/O请求513连同待存储的数据缓存到高速缓存230中。在高速缓存230处运行的冲刷引擎231通过执行如图3所示的方法300来将缓存的数据冲刷至存储设备130。具体地,高速缓存230可以将待冲刷的数据连同其逻辑存储单元地址514发送至地址映射模块222-2。地址映射模块222-2将接收到的逻辑存储单元地址转换成物理存储地址,并且基于该物理存储地址将数据515存储到存储设备
130中。
[0041] 以此方式,针对已经被压缩过的数据或数据块,存储管理器能够不对其进行压缩而直接存储在存储设备中,从而大量节省了对这种数据进行压缩以及后续压缩效率检查的开销。此外,冲刷引擎的冲刷效率和高速缓存的吞吐量也能够得到改善。由于高速缓存的容量通常不大,如果针对每个数据块都进行压缩和压缩效率检查将消耗大量时间,这可能会导致高速缓存非常容易变满。当高速缓存变满时,后续I/O请求将不能不绕过高速缓存,这使得这些I/O请求的响应时间将变得难以估计。本公开的实施例使得高速缓存能够服务更多的I/O请求,从而实现较低的处理延迟。
[0042] 图6示出了根据本公开的实施例的用于存储数据的示例方法600的流程图。例如,方法600可以由如图1、2或4所示的存储管理器120来执行。应当理解,方法600还可以包括未示出的附加动作和/或可以省略所示出的动作,本公开的范围在此方面不受限制。以下结合图1来详细描述方法600。
[0043] 在框610处,存储管理器120响应于接收到向文件写入数据的请求,确定该文件的类型。
[0044] 在框620处,存储管理器120基于确定的类型,确定该数据的压缩属性。
[0045] 在框630处,存储管理器120确定在用于存储该文件的存储设备中与待写入的数据相对应的存储区域。
[0046] 在框640处,存储管理器120基于压缩属性,将数据存储到该存储区域中。
[0047] 在一些实施例中,存储管理器120可以从请求中获取文件的文件名,并且基于该文件名来确定文件的类型。
[0048] 在一些实施例中,文件名包括主文件名和扩展文件名。存储管理器120可以将文件名中的扩展文件名与指示文件为压缩文件的预定扩展文件名进行匹配。响应于该扩展文件名与预定扩展文件名相匹配,存储管理器120可以确定该文件为压缩文件。
[0049] 在一些实施例中,响应于该文件已被创建,存储管理器120可以从该文件中获取指示该文件的类型的字节序列,并且基于该字节序列来确定文件的类型。
[0050] 在一些实施例中,存储管理器120可以将字节序列与指示压缩文件的预定字节序列进行匹配。响应于该字节序列与预定字节序列相匹配,存储管理器120可以确定该文件为压缩文件。
[0051] 在一些实施例中,响应于该文件已被创建,存储管理器120可以获取与该文件相关联的文件系统元数据,其中该文件的类型被记录在文件系统元数据中。存储管理器120可以基于该文件系统元数据来确定文件的类型。
[0052] 在一些实施例中,响应于该类型指示文件为压缩文件,存储管理器120可以确定该数据不可压缩。附加地或备选地,响应于该类型指示文件为非压缩文件,存储管理器120可以确定该数据可压缩。
[0053] 在一些实施例中,存储管理器120可以生成指示压缩属性的标签。存储管理器120可以将该标签与待写入的数据相关联的存储到高速缓存中。响应于该数据被缓存到高速缓存中,存储管理器120可以返回针对该请求的响应。存储管理器120可以进一步地基于与该数据相关联的标签,将该数据从高速缓存冲刷到存储区域中。
[0054] 在一些实施例中,响应于该标签指示数据不可压缩,存储管理器120可以将未经压缩的数据冲刷到存储区域中。
[0055] 在一些实施例中,响应于该标签指示数据可压缩,存储管理器120可以压缩该数据。存储管理器120可以确定经压缩的数据的第一大小与未经压缩的数据的第二大小的比值。响应于该比值低于预定阈值,存储管理器120可以将经压缩的数据冲刷到所述存储区域中。响应于该比值超过预定阈值,存储管理器120可以将未经压缩的数据冲刷到存储区域中。
[0056] 在上文中已经参考图1至图6详细描述了根据本公开的方法的示例实现,在下文中将描述相应的装置的实现。
[0057] 在一些实施例中,提供了一种用于存储数据的装置。该装置包括:第一确定模块,被配置为响应于接收到向文件写入数据的请求,确定该文件的类型;第二确定模块,被配置为基于确定的类型,确定该数据的压缩属性;第三确定模块,被配置为确定在用于存储该文件的存储设备中与待写入的数据相对应的存储区域;以及存储模块,被配置为基于压缩属性,将数据存储到该存储区域中。
[0058] 在一些实施例中,第一确定模块还被配置为:从请求中获取文件的文件名;以及基于该文件名来确定文件的类型。
[0059] 在一些实施例中,文件名包括主文件名和扩展文件名。第一确定模块还被配置为:将文件名中的扩展文件名与指示文件为压缩文件的预定扩展文件名进行匹配;以及将文件名中的扩展文件名与指示文件为压缩文件的预定扩展文件名进行匹配,确定该文件为压缩文件。
[0060] 在一些实施例中,第一确定模块还被配置为:响应于该文件已被创建,从该文件中获取指示该文件的类型的字节序列;以及基于该字节序列来确定文件的类型。
[0061] 在一些实施例中,第一确定模块还被配置为:将字节序列与指示压缩文件的预定字节序列进行匹配;以及响应于该字节序列与预定字节序列相匹配,确定该文件为压缩文件。
[0062] 在一些实施例中,第一确定模块还被配置为:响应于该文件已被创建,获取与该文件相关联的文件系统元数据,其中该文件的类型被记录在文件系统元数据中;以及基于该文件系统元数据来确定文件的类型。
[0063] 在一些实施例中,第二确定模块还被配置为:响应于该类型指示文件为压缩文件,确定该数据不可压缩;以及响应于该类型指示文件为非压缩文件,确定该数据可压缩。
[0064] 在一些实施例中,存储模块还被配置为:生成指示压缩属性的标签;将该标签与待写入的数据相关联的存储到高速缓存中;响应于该数据被缓存到高速缓存中,返回针对该请求的响应;以及基于与该数据相关联的标签,将该数据从高速缓存冲刷到存储区域中。
[0065] 在一些实施例中,存储模块还被配置为:响应于该标签指示数据不可压缩,将未经压缩的数据冲刷到存储区域中。
[0066] 在一些实施例中,存储模块还被配置为:响应于该标签指示数据可压缩,压缩该数据;确定经压缩的数据的第一大小与未经压缩的数据的第二大小的比值;响应于该比值低于预定阈值,将经压缩的数据冲刷到所述存储区域中;以及响应于该比值超过预定阈值,将未经压缩的数据冲刷到存储区域中。
[0067] 图7示出了可以用来实施本公开内容的实施例的示例设备700的示意性框图。例如,如图1、2和/或3所示的存储管理器120可以由设备700实施。如图7所示,设备700包括中央处理单元(CPU)701,其可以根据存储在
只读存储器(ROM)702中的计算机程序指令或者从存储单元708加载到随机
访问存储器(RAM)703中的计算机程序指令,来执行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
[0068] 设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如
键盘、
鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、
调制解调器、无线通信收发机等。通信单元709允许设备700通过诸如因特网的
计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0069] 上文所描述的各个过程和处理,例如方法300和/或600,可由处理单元701执行。例如,在一些实施例中,方法300和/或600可被实现为计算机
软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM702和/或通信单元709而被载入和/或安装到设备700上。当计算机程序被加载到RAM 703并由CPU 701执行时,可以执行上文描述的方法300和/或600的一个或多个动作。
[0070] 本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
[0071] 计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是——但不限于——电存储设备、磁存储设备、光存储设备、电磁存储设备、
半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、
硬盘、
随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、
软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时
信号本身,诸如
无线电波或者其他自由传播的
电磁波、通过
波导或其他传输媒介传播的电磁波(例如,通过光纤
电缆的光脉冲)、或者通过电线传输的
电信号。
[0072] 这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括
铜传输电缆、光纤传输、无线传输、路由器、
防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0073] 用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、
固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的
软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制
电子电路,例如可编程
逻辑电路、现场可编程
门阵列(FPGA)或可编程逻辑阵列(PLA),该
电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0074] 这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0075] 这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程
数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0076] 也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0077] 附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于
硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0078] 以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多
修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。