用于存档和检索文件的系统和方法
【专利摘要】用于检索存储在存储介质上的对象的系统和方法,所述方法包括从第一客户端接收针对第一对象的请求;用针对第一对象的请求填入队列;从存储介质检索第一对象;以及向第一客户端发送对象。
【专利说明】用于存档和检索文件的系统和方法
【技术领域】
[0001] 本公开一般地涉及用于检索存储在存储介质上的对象的系统和方法。更具体地, 本公开涉及用于高效检索客户端请求的对象的系统和方法。
【背景技术】
[0002] 客户端计算设备通常被用于与至少最初存储在未直接耦合到客户端计算设备的 存储介质上的数据交互。这样的布置不被约束于任何特定领域或行业。
[0003] 这样的布置的示例包括被用于查看医学图像的客户端计算设备。医学图像一般存 储在不直接耦合到客户端计算设备的存储介质上。例如,客户端计算设备通过一个或多个 网络从存储介质下载图像。
【发明内容】
[0004] 在第一方面中,本公开提供了一种检索被存储在存储介质上的对象的方法。在各 种实施例中,请求由客户端计算设备生成并且在服务器处接收。在一些实施例中,存储介质 直接耦合到服务器并且在其它实施例中存储介质间接(例如通过一个或多个网络)耦合到 服务器。
[0005] 该方法包括从第一客户端接收针对第一对象的请求。如本文使用的术语"包括"被 用于表示可扩充的包括,因为也可以包括除了特别列出的那些之外的其它项。
[0006] 该方法还包括用针对第一对象的请求来填入队列,从存储介质检索第一对象;以 及向第一客户端发送对象。
[0007] 在各种实施例中,第一对象可以是图像文件、图像的集合以及图像文件的集合。在 一些实施例中,图像的集合包括研究,诸如,例如由理疗(modality)生成的研究。
[0008] 在一些实施例中,请求包括针对研究的多个图像的无序请求并且其中研究的每个 图像在其被检索时被提供给第一客户端。
[0009] 在各种实施例中,该方法还包括将所检索的对象存储在缓存中。
[0010] 在一些实施例中,该方法还包括存档方面。在其中对象属于对象的集合的各种实 施例中,该方法还包括:从对象源接收对象的集合;选择用于对象的集合的存储参数,将存 储参数选择成优化对象的检索时间,存储参数包括存档文件的最大大小和每个存档文件的 对象数目;以及根据所确定的存储参数将对象存储在存储介质上。
[0011] 在一些实施例中,对象包括图像并且对象源包括理疗。
[0012] 在一些实施例中,该方法还包括:在接收针对第二对象的请求之前,从存储介质检 索第二对象;以及将第二对象存储在缓存中。
[0013] 在各种实施例中,该方法还包括:从第一客户端接收针对第二对象的请求;以及 向第一客户端提供第二对象。
[0014] 在一些实施例中,用请求填入队列包括将预留(future)写入队列,该预留对应于 所请求的对象。
[0015] 在一些实施例中,该方法还包括:将第一对象写入缓存;以及通知预留已经检索 了第一对象。
[0016] 在一些实施例中,该方法还包括:如果在通知预留已经检索了第一对象之前做出 从预留访问第一对象的尝试,则阻止该尝试。
[0017] 在一些实施例中,该方法还包括:在将第一对象写入队列上的预留之后,对访问第 一对象的尝试解除阻止。
[0018] 在一些实施例中,该方法还包括:从第二客户端接收针对第一对象的第二请求; 用针对第一对象的第二请求填入队列;确定队列包含针对第一对象的第一请求;以及从缓 存向第二客户端提供所请求的对象。
[0019] 在另外的方面中,本公开提供了 一种在存储介质上存档对象以用于高效检索的方 法。在一些实施例中,存档对象的方法包括从对象源接收对象的集合;选择用于对象的集合 的存储参数,将存储参数选择成优化对象的检索时间,存储参数包括存档文件的最大大小 和每个存档文件的对象的数目;以及根据所确定的存储参数将对象存储在存储介质上。
[0020] 在一些实施例中,对象包括图像并且对象源包括理疗。
[0021] 在另外的实施例中,提供了存储用于由处理器运行以执行包括以下各项的方法的 语句(statement)和指令的非暂时性机器可读存储器:从第一客户端接收针对第一对象的 请求;用针对第一对象的请求填入队列;从存储介质检索第一对象;以及向第一客户端发 送对象。
[0022] 在另外的方面中,本公开提供了一种用于检索文件的系统。在各种实施例中,该系 统包括:队列;线程池;缓存;以及处理器,处理器被配置成:从第一客户端接收针对第一对 象的请求;用针对第一对象的请求填入队列;从存储介质检索第一对象;以及向第一客户 端发送对象。
[0023] 在各种实施例中,第一对象可以是图像文件、图像的集合以及图像文件的集合。在 一些实施例中,图像的集合包括研究,诸如,例如由理疗生成的研究。
[0024] 在一些实施例中,请求包括针对研究的多个图像的无序请求并且其中研究的每个 图像在其被检索时被提供给第一客户端。
[0025] 在各种实施例中,处理器还被配置成将所检索的对象存储在缓存中。
[0026] 在一些实施例中,系统还存档文件。在各种实施例中,对象属于对象的集合并且处 理器还被配置成:从对象源接收对象的集合;选择用于对象的集合的存储参数,将存储参 数选择成优化对象的检索时间,存储参数包括存档文件的最大大小和每个存档文件的对象 数目;以及根据所确定的存储参数将对象存储在存储介质上。
[0027] 在一些实施例中,对象包括图像并且对象源包括理疗。
[0028] 在一些实施例中,处理器还被配置成:在接收针对第二对象的请求之前,从存储介 质检索第二对象;以及将第二对象存储在缓存中。
[0029] 在一些实施例中,处理器还被配置成:从第一客户端接收针对第二对象的请求; 以及向第一客户端发送第二对象。
[0030] 在一些实施例中,处理器还被配置成通过将预留写入队列来用请求填入队列,该 预留对应于所请求的对象。
[0031] 在一些实施例中,处理器还被配置成:将第一对象写入缓存;以及通知预留已经 检索了第一对象。
[0032] 在一些实施例中,处理器还被配置成:如果在通知预留已经检索了第一对象之前 做出从预留访问第一对象的尝试,则阻止该尝试。
[0033] 在一些实施例中,处理器还被配置成:在将第一对象写入队列上的预留之后,对访 问第一对象的尝试解除阻止。
[0034] 在一些实施例中,处理器还被配置成:从第二客户端接收针对第一对象的第二请 求;用针对第一对象的第二请求填入队列;确定队列包含针对第一对象的第一请求;以及 从缓存向第二客户端提供所请求的对象。
[0035] 在另外的方面中,本公开提供了一种用于存档文件以用于高效检索的系统。在一 些实施例中,该系统包括处理器,其被配置成: 从对象源接收对象的集合;选择用于对象的集合的存储参数,将存储参数选择成优化 对象的检索时间,存储参数包括存档文件的最大大小和每个存档文件的对象数目;以及根 据所确定的存储参数将对象存储在存储介质上。
[0036] 在一些实施例中,对象包括图像并且对象源包括理疗。
[0037] 在结合附图回顾特定实施例的以下描述时,本公开的其它方面和特征将对本领域 普通技术人员变得显而易见。
【专利附图】
【附图说明】
[0038] 现在将仅仅作为示例,参照附图来描述本公开的实施例。
[0039] 图1是根据各种环境的图像存档器检索器系统的框图; 图2是图示了根据各种实施例,图1的存档器检索器系统通过其而执行数据的异步流 (streaming)检索的过程的流程图; 图3是图示了根据各种实施例,图1的存档器检索器系统通过其而执行数据的有序检 索的过程的流程图; 图4是图示了根据各种实施例,图1的存档器检索器系统通过其而执行数据的无序检 索的过程的流程图;以及 图5是图示了根据各种实施例,图1的存档器检索器系统通过其而响应于针对数据的 冗余请求的过程的流程图。
【具体实施方式】
[0040] 本文公开的实施例一般涉及用于存档文件和当从客户端接收到针对文件的请求 时高效检索文件的系统和方法。
[0041] 本文公开的一些实施例涉及图像存档器和检索器系统。本文公开的一些实施例涉 及医学图像存档器和检索器系统。
[0042] 医学图像通常在患者检查期间通过理疗生成。这些图像然后被存储并且稍后被诸 如例如放射学家之类的用户在计算机上查看。当使用理疗来执行患者检查时,理疗一般生 成图像的集合,其被称为"研究(study)"。每个研究响应于给定患者并且包括多个图像。每 个研究可以被再分成一系列图像。因此,在一些实现中,一般以对应于以下的层级来组织医 学图像:患者-研究-系列-图像。
[0043] 如今,由理疗生成的研究一般而言大于过去所生成的研究。研究将继续在大小上 增长看起来似乎是一个趋势。在每个研究具有较大数目的图像并且每个图像包括较大量的 数据的意义上研究是较大的。因此,需要大量数据存储空间来存储研究。另外,对用户而言, 将他或她将会想要查看的所有图像存储在他或她的个人计算机上一般是不切实际的,因为 考虑到这样的布置将会牵涉每个用户都维护他或她自己的数据集合。
[0044] 因此,在已知系统中,给定研究的所有图像可以存储在图像数据库中。图像数据库 可以是关于期望查看图像数据的用户在非现场(off-site),诸如例如在服务器处。另外,系 统的所有图像通常存储在单个文件中。这具有最小化盘I/O操作的益处,以用于得到较好 的性能和文件管理,因为考虑到当移动研究时仅有单个文件而不是数百个文件要移动。另 夕卜,研究通常以压缩格式存储,这允许节省存储空间。
[0045] 用户一般将利用客户端通过例如图像服务器从图像数据库检索图像数据。用户一 般想要在没有明显延迟的情况下看到所请求的图像。然而,在已知的系统中,考虑到一般通 过网络从非现场的存储设备检索图像,因此一般存在与检索图像相关联的显著延迟。因此, 非现场的存储方案允许大量的存储空间;然而,存储一般显著很慢。因此,从用户的角度来 看,由已知系统使用的存储方案看似无限但却缓慢。因此,在已知的系统中,当提前得知将 查看给定的研究时,可以预先下载研究。例如,如果已知患者在给定日子与健康专业人员有 约定,那么可以在患者约定的前一晚将与该患者相关联的研究下载到健康专业人员的计算 机。然而,预测用户将查看哪个研究并不总是可能的。另外,即使对于其中图像被预先下载 的那些情况而言,图像也经常以高度占用网络资源的低效方式被下载。
[0046] 因此,仓ll建无限且快速的存储感知(perception)是合期望的。本文公开的一些实 施例通过提供用于从存储介质向客户端高效提供图像数据的系统和方法来解决该需要。 [0047] 向用户提供图像数据而不管客户端发布针对图像数据的有序还是无序的请求同 样是合期望的。本文公开的一些实施例通过提供用于从存储介质向客户端高效提供针对有 序和无序请求二者的图像数据的系统和方法来解决该需要。
[0048] 存档器检索器系统10的各种实施例通过以下各项来解决这些需要: 以优化检索时间的方式存储图像; 支持图像的异步流检索; 支持图像的有序和无序检索;以及 以高效的方式支持冗余请求。
[0049] 首先参照图1,其为图示了根据各种示例实施例的存档器检索器系统10的组件的 框图。存档器检索器系统10包括阻止队列12、线程池14、缓存16和处理器18。在各种实 施例中,缓存16包括物理存储器设备。一个或多个客户端20可以以任何适当的方式耦合 到存档器检索器系统10。例如,给定的客户端20可以通过一个或多个网络而耦合到存档器 检索器系统10,所述网络可以包括例如互联网或内联网。可替换地,客户端20可以通过直 接连接而耦合到存档器检索器系统10。客户端20可以是任何适当的计算设备,包括但不限 于台式计算机、膝上型计算机、平板计算机和智能电话。
[0050] 存档器检索器系统10通过以包括但不限于如上所描述的网络的任何合适方式而 耦合到理疗器械24,其可以是任何适当的理疗器械,包括但不限于用于生成对应于患者医 学检查的图像数据的任何合适的图像数据生成设备(例如,计算机射线照相术(CR)系统、计 算的层析X射线摄影法(CT)扫描仪、磁共振成像(MRI)系统、正电子发射层析X射线摄影法 (PET)、超声系统等等)。存档器检索器系统10从理疗器械24接收图像数据并且将其存储 在图像存储装置26中。存档器检索器系统10通过其而将图像存储在图像存储装置26中 的方法将在下文中更加详细地描述。存档器检索器系统10以包括如上所描述的网络的任 何适当方式而耦合到图像存储装置26。
[0051] 图像存储装置26可以包括任何适当的存储介质。在一些实施例中,图像存储装置 26包括物理非暂时性存储介质。在各种实施例中,图像存储装置26可以包括但不限于一个 或多个硬盘驱动器、闪速存储器设备、磁带存储设备、光学存储设备或其组合。
[0052] 应当理解的是,尽管详细讨论了涉及医学图像存档和检索的实施例,但是其它实 施例可以涉及存档和检索任何适当文件。
[0053] 数据存档 如上文所解释的,存档器检索器系统10从理疗器械24接收图像数据。例如,理疗器械 24可以用于执行关于患者的研究,并且结果得到的图像数据从理疗器械24发送到存档器 检索器系统10。
[0054] 在接收到图像数据时,存档器检索器系统10确定使图像数据的检索时间优化的 存储图像数据的方式。在一些实施例中,这通过确定多个存储参数来实现。在各种实施例 中,构成研究的图像集合被划分成多个子集,所述子集各自存储在多个存档文件中。每个存 档文件存储研究的一个或多个图像。在各种实施例中,存储参数可以包括但不限于以下各 项中的一个或多个:存档文件的最大大小、所使用的存档文件的数目以及每个存档文件的 对象数目。在一些实施例中,存档文件的大小是指如以字节所测量的大小。
[0055] 在各种实施例中,将存档文件的最大大小的数目和在给定存档文件中的图像数目 选择成优化检索时间。在各种实施例中,将这两个参数选择成间接控制所使用的存档文件 的数目。在一些实施例中,可以直接控制所使用的存档文件的数目。在各种实施例中,可以 动态调节存储参数以优化检索时间。
[0056] 如上文提到的,在已知的系统中,研究的所有图像一般存储在单个存档文件中。通 过将所有图像存储在单个文件中,用于检索研究的图像的输入/输出(I/O)时间相比于其 中每个图像作为分离的文件而存储的情形一般得以降低。例如,通过利用仅单个文件,仅需 要一次硬盘寻道(disk seek)操作、一次文件打开操作和一次文件关闭操作来检索图像数 据。然而,给定用户可能至少最初需要或者想要看到研究的仅某些图像而非整个研究。如果 这些所期望的图像中的一个恰巧是存档文件中的最后一个图像,那么系统在到达最初期望 的图像中的一个之前将不得不通读系统中的每一个图像。从用户的角度来看这可以引入明 显的延迟,因为如果所期望的图像中的一个是研究中的最后一个图像,那么在该图像之前, 他或她将需要等待加载整个研究。
[0057] -种可替换方案是将图像存储在多个存档文件中。例如,如果在研究中存在1000 个图像并且使用两个存档文件,那么如果图像均匀分布在两个存档文件之间,则每个存档 文件将具有大约500个图像。因此,如果并行处理存档文件,则在最坏的情况场景中,如果 所期望的图像是最后一个读取的图像,那么它将是第500个读取的图像。这与其中使用单 个存档文件并且在最坏情况下图像可以是第1〇〇〇个读取的图像的情形形成对比。因此,将 研究的图像分布在若干存档文件之中可以改善平均情况场景,并且特别地,最小化用于检 索特定图像文件的最坏情况场景。在极端情况下,每个图像如可以作为分离文件而存储。然 而,取决于图像存储装置26的特性中的系统设定,使用较大数目的存档文件可能潜在地导 致增加的总I/O时间。例如,如果多个存档文件存储在相同物理设备上并且可能是不可能 并行处理每一个存档文件并且它们中的一些可能需要串行处理,这将增加 I/O时间。此外, 即使在其中盘驱动器上存在多个盘片(platter)并且当文件存储在不同盘片中时盘驱动器 支持并行读取的情况下,存储多个文件仍然可能增加 I/O的数目,因为存在更多的文件打 开、搜寻和关闭操作。
[0058] 在一些实施例中,存档器检索器系统10平衡具有以下各项的益处:(1)小数目的 存档文件,其中每个存档文件包含研究中的总图像数目的大部分,以及(2)大数目的存档文 件,其中每个存档文件包含相对少的图像文件。(1)的益处可以包括较低的I/O时间。(2) 的益处可以包括改善平均情况以及最小化在其中使用多线程来从多个存档文件并行检索 图像的情况中任何特定单独图像的最坏情况检索时间。
[0059] 实际的I/O时间取决于用于存储和检索图像数据的系统的特性(例如物理的或逻 辑的)。例如,用于存储图像的存储设备(或多个存储设备)的物理特性可以影响I/O时间。 例如,机械存储设备可以引入比固态存储设备更大的延迟。
[0060] 另外,用于存储图像数据的系统的逻辑布置也可以影响I/O时间。作为另一个示 例,如果图像存储在云环境中,这可以与如果图像存储在非云环境中不同地影响延迟,因为 它可能牵涉使用较大数目的操作以检索图像数据。因此,在一些布置中,针对图像数据的每 个调用可以与具有特定延迟的过程的某个集合相关联并且因此,针对数据的调用的数目越 大,与检索图像相关联的潜在延迟就越大。
[0061] 作为另一个示例,如果使用服务器来与存储设备相接口,那么服务器的特性也可 以影响I/O时间。文件服务器可以从逻辑和物理二者的角度影响I/O时间。例如,一个或 多个服务器的使用影响客户端20与图像存储装置26之间的居间设备的总数目,其可以增 加延迟时间并且每个服务器可以引入特定于服务器自身的延迟。
[0062] 因此,在各种实施例中,存档器检索器系统10基于各种准则来确定用于研究的图 像的最优存储布置,所述准则包括但不限于以上所描述的用于优化检索时间的那些。在各 种实施例中,最优存储布置可以牵涉将图像存储在多个存档文件中,其中将存档文件的数 目和每个存档文件的图像文件的数目选择成优化检索时间。在各种实施例中,图像均匀地 遍及存档文件的数目而分布。在其它实施例中,图像不是均匀地分布在存档文件之间并且 每个存档文件可以具有不同数目的图像文件。
[0063] 在各种实施例中,存储布置动态可调整。例如,在各种实施例中,当系统的特性改 变时,存档器检索器系统10实现用于图像文件的不同存储布置。这可以发生在例如当具有 不同特性的新存储设备被添加到图像存储装置26或者图像存储装置26中的旧存储设备由 新的个体取代时。
[0064] 异步和流检索 在各种实施例中,存档器检索器系统10支持响应于来自客户端20的针对图像数据的 请求而到客户端20的异步流图像检索。术语异步,如本文所使用的,是指以下方面,即在各 种实施例中,与被执行以便响应于来自客户端20的针对图像数据的请求的其它操作并行 地从图像存储装置26检索图像。换言之,在各种实施例中,存档器检索器系统10将每个请 求分解成多个任务,其中的至少一些可以并行地进行。例如,在一些实施例中来自线程池14 的多个线程被用于完成由来自客户端20的请求所需的操作。
[0065] 如以上所指示的,为了满足请求,存档器检索器系统10可能需要执行多个任务。 一个示例任务是检索图像数据。另一示例任务是更新图像数据。在其中图像数据最初被存 档并且随后另外的信息变为可用的情形中可能需要更新图像数据。这可以发生在例如其中 在获得患者的所有信息之前在紧急基础上进行患者检查的情形中。可以在接收患者信息之 前存档图像数据并且更新的信息可以分离地存储。因此,在一些实施例中来自线程池14的 1线程被用于检索图像数据而来自线程池14的第二线程可以被用于更新图像信息。
[0066] 术语流,如本文所使用的,指示在各种实施例中,存档器检索器系统10在图像一 变为可用时就将所请求的图像返回到客户端20。例如,客户端20可以发送针对图像的多个 请求或者它可以发送针对多个图像的单个请求。在各种实施例中,术语"发送"如本文所使 用的那样等同于术语"传输"。例如,发送请求的客户端可以对应于通过例如网络传输请求 的客户端。在一些实施例中,当存档器检索器系统10从图像存储装置26检索所请求的图 像时,图像被单独地下载并且因此在不同时间变为可用。在一些实施例中,存档器检索器系 统10将已经由客户端20请求的图像在它们变为可用时转送到客户端20。换言之,在一些 实施例中,存档器检索器10并不在将任何图像转送到客户端20之前检索所有请求的图像。 在一些实施例中,存档器检索器10单独地将每个图像转送到客户端20。在其它实施例中, 存档器检索器10将成组的图像转送到客户端20。
[0067] 在一些实施例中,图像在它们变为可用时几乎立即被转送。在其它实施例中,图像 可能不被例行立即转送;然而,图像被单独转送并且因此存档器检索器系统10并不在向客 户端20发送任何图像之前检索所有请求的图像。这与其中在向客户端20提供任何图像之 前下载整个研究的已知系统形成对比。
[0068] 异步流检索 现在参照图2,其图示了根据各种实施例,存档器检索器系统10通过其而执行图像数 据的异步流访问的过程的流程图。
[0069] 在204处,存档器检索器10从客户端20接收针对对象的请求。在各种实施例中, 所请求的对象可以是任何适当对象。例如,在涉及医学成像的一些实施例中,对象可以是但 不限于是DIC0M对象、研究或单独的图像。在其它实施例中,对象可以是任何适当对象或存 储在存储介质上的文件。
[0070] 在206处,存档器检索器10用请求填入队列12。在一些实施例中,存档器检索器 10通过将针对所请求对象的"预留"写入队列12来填入队列12。如本领域技术人员将理 解的,预留可以被认为是用于所请求对象的"容器"。
[0071] 在208处,存档器检索器10在图像存储装置26中搜索所请求的对象。在一些实 施例中,这牵涉使用来自线程池14的线程以在图像存储装置26中搜索所请求的对象。
[0072] 在210处,存档器检索器10从图像存储装置26检索所请求的对象。在各种实施 例中,将所检索的对象放置在缓存16中。
[0073] 与206、208和210中的一个或多个并行地,存档器检索器10可以执行其它任务, 诸如例如检索其它信息以更新所检索的对象。
[0074] 在212处,存档器检索器10向客户端20发送所请求的对象。在一些实施例中,这 牵涉将所请求的对象写入网络套接字(socket)。
[0075] 应当理解的是,如本文所使用的术语"流"与在线流视频文件的上下文中使用的术 语"流"不同。如本文所公开的,存档器检索器10的各种实施例支持以任何顺序来对研究 的任何图像文件进行同步流(streaming)。
[0076] 视频流涉及编码在单个文件中的单个视频流。相比之下,存档器检索器10的各种 实施例支持其中图像可以存储在一个或多个文件中的多个图像的流。
[0077] 另外,尽管视频流可以允许一个人查看特定的情景,但是它不允许一个人以任意 顺序查看各个图像。相比之下,存档器检索器10的各种实施例支持以任意顺序的医学图像 流。特别地,客户端20可以以任意顺序请求图像。
[0078] 其中客户端20可以以任意顺序请求图像的示例是当用户(诸如放射学家之类)使 用客户端20来执行堆栈查看,其中用户以变化的"细节"层次在堆栈中"滚动"。首先,存档 器检索器10通过支持请求来自研究的图像的任意顺序来允许用户在图像的堆栈中滚动。 例如,客户端20可以被用于以特定的"方向"每η个研究图像请求一次。另外,存档器检索 器10支持通过允许值η变化来允许用户在任何方向上以变化的细节层次在堆栈中来回滚 动的来自客户端20的请求。例如,每遍经过堆栈可以具有不同的值η。例如,第一任务可以 是每十个图像,第二遍可以是每五个图像等等。可替换地,η可以在单遍中变化。可替换地, 在给定遍经过胃中,每个图像之间的间隔可以被任意选择,如方向可以的那样,使得经过不 需要从研究的一端线性进展到研究的另一端。
[0079] 有序和无序检索 在各种实施例中,存档器检索器10支持对象的有序和无序检索二者。
[0080] 有序检索 在各种实施例中,存档器检索器10支持对象的有序检索。在一些实施例中,可以针对 对象做出有序请求。例如,在涉及医学成像的实施例中,用户可以在查看研究的剩余图像之 前请求要查看的特定研究图像。例如,放射学家可能希望看到研究的某些关键图像并且在 查看那些图像时确定要查看研究的哪些其它图像。因此,在这样的情形中客户端20可以 首先发送针对关键图像的若干请求,并且然后发送对应于研究的剩余部分的一个或多个请 求。在各种实施例中,存档器检索器10以做出请求的顺序来服务多个请求,以使得所请求 的关键图像首先被检索和提供给客户端20并且然后,构成研究的剩余部分的图像被提供 给客户端20。因此,在各种实施例中,存档器检索器10在向客户端20提供所请求的关键图 像之前不下载整个研究。因此,在各种实施例中,存档器检索器10向客户端20提供关键图 像,而同时继续检索研究的剩余图像。
[0081] 现在参照图3,其图示了存档器检索器系统10通过其而响应于来自客户端20的针 对对象的有序请求的过程的流程图。
[0082] 在304处,存档器检索器10接收针对对象的有序请求,或者针对多个对象的有序 请求,或者针对多个对象的多个有序请求。
[0083] 在一些实施例中,存档器检索器10确定所请求的对象是否已经存储在缓存16中。 如果所请求的对象已经存在于缓存16中,那么在一些实施例中存档器检索器10不执行306 至314,而是在接收到请求并且确定所请求的对象已经存储在缓存16中之后执行316。
[0084] 在306处,存档器检索器10以请求被接收的顺序针对每个请求填入队列12。在一 些实施例中,每个请求可以具有相关联的优先级并且请求可以以优先级的顺序而不是它们 被接收的顺序来填入队列12。如上文所提到的,在一些实施例中,这牵涉针对每个所请求的 对象将预留写入队列12,其中每个预留对应于所请求的对象。
[0085] 在一些这样的实施例中,该过程(例如以上在306处描述的)牵涉确定所请求的图 像是否已经被检索。如以下所描述的,312存档器检索器10可以从图像存储装置26检索图 像,甚至在客户端20已发送针对该图像的请求之前。如果所请求的图像已经由存档器检索 器10检索,那么不执行308、310、312。在一些其它实施例中,被检索但尚未被请求的对象被 放置在缓存16中。
[0086] 在308处,存档器检索器10在图像存储装置26中搜索所请求的一个对象或多个 对象。在一些实施例中,来自线程池14的线程被用于搜索每个所请求的对象。
[0087] 在310处,存档器检索器10检索所请求的对象。在一些实施例中,存档器检索器 10在搜索特定研究的图像时检索来自该研究的所有图像。在一些实施例中,这通过预期到 随后但尚未接收的从客户端24请求研究的剩余图像而完成。
[0088] 在312处,存档器检索器10将所检索的对象放置到缓存16中。在其中存档器检 索器10下载研究的所有图像即便尚未针对它们做出请求的一些实施例中,被检索但尚未 被请求的项被放置到缓存16中。
[0089] 在314处,通知预留所请求的对象就绪。在一些实施例中,如果预留已阻止了请求 该对象的线程,那么预留对请求线程解除阻止。
[0090] 在316处,存档器检索器10向客户端20提供所请求的对象。在一些实施例中, 这牵涉访问与队列12中的预留相对应的所请求对象并且将其写入到网络套接字的服务线 程。服务线程可以是来自任何适当线程池的任何适当线程。在一些实施例中,线程可能在 对象已被下载并且存储在预留中之前尝试从预留访问对象。在这样的情形中,队列12中的 预留阻止尝试访问所请求对象的线程。一旦所请求的对象被写入到队列12中的预留,则预 留对请求线程解除阻止。线程然后将所请求的对象发送到客户端20。
[0091] 如以上所提到的,在一些实施例中,存档器检索器10从图像存储装置26检索研究 的所有图像并且将尚未请求的图像存储在缓存16中。在一些这样的实施例中,当接收到针 对已经被检索并存储在缓存16中的对象的请求时,存档器检索器10通过将来自缓存16的 对象写入到对应于所请求对象的队列12上的预留来响应于该请求。
[0092] 无序请求 在各种实施例中,存档器检索器10支持针对对象的无序请求。无序请求可以包括,例 如但不限于,针对研究的所有图像的请求,其中所述请求不指定要递送的图像的顺序。
[0093] 现在参照图4,其图示了存档器检索器系统10通过其而响应于针对对象的无序请 求的过程的流程图。
[0094] 在404处,存档器检索器10从客户端20接收针对一个或多个对象的无序请求。请 求可以是,例如但不限于,针对特定研究的所有图像的无序请求或针对来自特定研究的图 像集合的无序请求。
[0095] 在一些实施例中,存档器检索器10确定所请求的对象是否已经存储在缓存16中。 如果所请求的对象已经存在于缓存16中,那么在一些实施例中存档器检索器10不执行406 至410并且在接收到请求并且确定所请求的对象已经存储在缓存16中之后执行412。
[0096] 在一些实施例中,存档器检索器10并不利用队列12以用于无序请求。在其它实 施例中,存档器检索器10针对该请求而填入队列12。这可以类似于以上关于图3讨论的 306那样完成。
[0097] 在406处,存档器检索器10在图像存储装置26中搜索所请求的对象。在一些实 施例中,来自线程池14的线程被用于搜索所请求的对象。
[0098] 在408处,存档器检索器10检索所请求的对象。
[0099] 在410处,将所检索的对象放置在缓存16中。应当理解的是,在各种实施例中,对 象被单独地检索和存储在缓存16中。因此,不必从图像存储装置26中读取所有对象并且 同时将它们存储在缓存16中。
[0100] 在412处,存档器检索器10向客户端20提供所请求的对象。在一些实施例中,这 牵涉来自线程池14的线程从缓存16访问所请求的对象并且将其写入到网络套接字。在各 种实施例中,存档器检索器10将所请求的对象在它们变为可用时提供给客户端20。因此, 在这样的实施例中,存档器检索器10并不在把要检索的所有图像文件提供给客户端20之 前等待所述要检索的所有图像文件。因此,在各种实施例中,406、408和410可以至少部分 地并行操作。
[0101] 冗余请求 在各种实施例中,存档器检索器系统10能够以高效的方式应对针对图像数据的多个 冗余请求。术语冗余请求,如本文所使用的,表示针对相同图像数据的请求。在各种实施例 中,存档器检索器系统10通过仅服务请求的一个集合来应对冗余请求。因此,在这样的实 施例中,仅存在一次检索。
[0102] 当多个客户端20请求相同图像数据时,冗余请求可能发生。这可以发生在例如其 中存在会议室中的多个个体会议的情形中。每个个体都可以具有计算设备,诸如,例如但不 限于,平板计算设备或膝上型计算设备,其作为客户端20运转。每个客户端20可以通过诸 如无线网络之类的网络耦合到存档器检索器10。如果房间中的个体讨论相同的患者或研 究,则多于一个的个体可能尝试在他们各自的客户端20上访问相同的研究。在这样的情形 中,图像存档器10将会接收针对相同图像数据的请求。如果图像存档器10其通过在每次 数据被请求时从图像存储装置26检索所请求的数据来单独地服务每个请求,那么总体性 能将受损害并且所有用户将很可能注意到明显的延迟。
[0103] 因此,在一些实施例中,在其中图像存档器10接收到多个请求的情形中,图像存 档器10针对特定对象仅执行一次检索操作而不管针对该对象所接收到的请求数目如何。
[0104] 现在参照图5,其为图示了存档器检索器系统10通过其而响应于来自客户端20的 针对对象的冗余请求的过程的流程图。
[0105] 在502处,存档器检索器10接收针对一个对象的一个请求或针对多个对象的多个 有序请求。该请求可以是有序请求或无序请求。
[0106] 在504处,存档器检索器10确定是否确定所请求的对象是否已经存储在缓存16 中。如果所请求的对象已经存在于缓存16中,则在一些实施例中,存档器检索器10执行 516。另一方面,如果所请求的项尚未存储在缓存16中,则存档器检索器执行506。
[0107] 在506处,存档器检索器10确定队列12是否已经包含针对相同对象的请求。例 如,在一些实施例中,针对每个所请求的对象将预留写入到队列12并且存档器检索器10确 定针对该对象的预留是否已经存在于队列12中。在一些实施例中,针对任何所请求对象, 仅将一个预留写入到队列中。在这样的实施例中,存档器检索器10将随后的冗余请求标识 为已经在由预留所管理的队列中并且因而针对相同对象不创建另一预留。另外,在各种实 施例中,一旦检索到对象并且预留被释放,所有请求的客户端线程将同时被解除阻止。
[0108] 如果存档器检索器10确定队列12尚未包含针对对象的请求,那么存档器检索器 10进行到508。另一方面,如果队列12已经包含针对相同对象的请求,则存档器检索器10 直接进行到516。
[0109] 在508处,存档器检索器10针对该请求填入队列12。在各种实施例中,可以如以 上关于图3和4描述的那样填入队列12。
[0110] 在510处,存档器检索器10在图像存储装置26中搜索所请求的对象。在一些实 施例中,来自线程池14的线程被用于搜索所请求的对象。
[0111] 在512处,存档器检索器10检索所请求的对象。
[0112] 在514处,存档器检索器10将所检索的对象放置到缓存16中。在其中存档器检 索器10下载研究的所有图像即便尚未针对它们做出请求的一些实施例中,被检索但尚未 被请求的项也被放置到缓存16中。
[0113] 在516处,通知预留所请求的对象就绪。在一些实施例中,如果预留已经阻止了请 求对象的线程,则预留对请求线程解除阻止。
[0114] 在518处,存档器检索器10向客户端20发送所请求的对象。如果所请求的对象 尚不可用,则队列12中的预留阻止请求直到对象变为可用为止,如以上所描述的。在一些 实施例中,等待于相同预留的所有线程将同时或基本上同时被解除阻止并且可以同时在缓 存中检索对象。
[0115] 因此,在各种实施例中,存档器检索器10通过从图像存储装置26搜索和检索特定 对象仅一次并且将该对象存储在缓存16中来响应于冗余请求。当接收到针对相同对象的 附加请求时,存档器检索器10并不再次从图像存储装置26搜索和检索所请求的对象。相 反地,在各种实施例中,存档器检索器10通过首先确定缓存16是否已经存储了所请求的对 象来响应于冗余请求。如果已经存储,则存档器检索器10将所请求的对象从缓存16发送 到客户端20。如果缓存16不包含所请求的对象,那么存档器检索器10确定对应于所请求 对象的预留是否存在于队列12中。如果存在,则存档器检索器10等待,直到所请求的项变 为可用为止,并且不第二次搜索和下载它。换言之,在一些实施例中,第一请求使得在队列 12中创建预留。第二请求将发现预留已经存在并且因此将不创建新的一个,并且第二请求 将与第一请求等待于相同的预留。当最终将对象检索到缓存16时,将通知预留。预留然后 对等待于其的所有线程解除阻止。线程然后从缓存16检索对象。
[0116] 存档器检索器系统10可以使用该方法来应对冗余请求而不管它们是有序请求还 是无需请求。因此,在各种实施例中,存档器检索器系统10利用针对2个功能的阻止队列 (1)有序请求;以及(2)冗余请求(不管冗余请求是有序请求还是无序请求)。
[0117] 在各种实施例中,然后在一个或多个客户端20的显示器上显示所请求的对象。
[0118] 在前文的描述中,出于解释的目的,陈述了许多细节以便提供对实施例的全面理 解。然而,对本领域技术人员将显而易见的是这些特定细节不是要求的。在其它实例中,以 框图的形式示出众所周知的电学结构和电路以便不使理解模糊。例如,并未关于本文描述 的实施例被实现为软件例程、硬件电路、固件还是其组合来提供特定细节。
[0119] 可以将公开的实施例表示为存储在机器可读介质(也称为计算机可读介质、处理 器可读介质,或具有具体化在其中的计算机可读程序代码的计算机可用介质)中的计算机 程序产品。机器可读介质可以是任何合适的有形、非暂时性介质,包括磁学、光学或电学存 储介质,包括磁盘、光盘只读存储器(CD-ROM)、存储器设备(易失性或非易失性)或类似的存 储机制。机器可读介质可以包含各种指令集、代码序列、配置信息或其它数据,其当运行时 使得处理器执行根据本公开的实施例的方法中的步骤。本领域普通技术人员将领会到对实 现所描述的实现方式所必需的其它指令和操作也可以存储在机器可读介质上。存储在机器 可读介质上的指令可以由处理器或其它合适的处理设备运行并且可以与电路相接口以执 行所描述的任务。
[0120] 以上描述的实施例仅仅旨在作为示例。本领域技术人员可以对特定实施例实现更 改、修改和变型而不脱离于仅仅由此处随附的权利要求所限定的范围。
【权利要求】
1. 一种检索存储在存储介质上的对象的方法,所述方法包括: 从第一客户端接收针对第一对象的请求; 用针对第一对象的请求填入队列; 从存储介质检索第一对象;以及 向第一客户端发送对象。
2. 根据权利要求1所述的方法,其中请求包括针对研究的多个图像的无序请求并且其 中研究的每个图像在其被检索时被提供给第一客户端。
3. 根据权利要求1所述的方法,其中对象属于对象的集合,所述方法还包括: 从对象源接收对象的集合; 选择用于对象的集合的存储参数,将存储参数选择成优化对象的检索时间,存储参数 包括存档文件的最大大小和每个存档文件的对象数目;以及 根据所确定的存储参数将对象存储在存储介质上。
4. 根据权利要求3所述的方法,还包括: 在接收针对第二对象的请求之前,从存储介质检索第二对象;以及 将第二对象存储在缓存中。
5. 根据权利要求4所述的方法,还包括: 从第一客户端接收针对第二对象的请求;以及 向第一客户端提供第二对象。
6. 根据权利要求1所述的方法,其中用请求填入队列包括将预留写入队列,该预留对 应于所请求的对象。
7. 根据权利要求6所述的方法,还包括: 将第一对象写入缓存;以及 通知预留已经检索了第一对象。
8. 根据权利要求7所述的方法,还包括: 如果在通知预留已经检索了第一对象之前做出从预留访问第一对象的尝试,则阻止该 尝试。
9. 根据权利要求8所述的方法,还包括: 在将第一对象写入队列上的预留之后,对访问第一对象的尝试解除阻止。
10. 根据权利要求7所述的方法,还包括: 从第二客户端接收针对第一对象的第二请求; 用针对第一对象的第二请求填入队列; 确定队列包含针对第一对象的第一请求;以及 从缓存向第二客户端提供所请求的对象。
11. 一种存储用于由处理器运行以执行包括以下各项的方法的语句和指令的非暂时性 机器可读存储器: 从第一客户端接收针对第一对象的请求; 将针对第一对象的请求填入队列; 从存储介质检索第一对象;以及 向第一客户端发送对象。
12. -种用于存档和检索文件的系统,所述系统包括: 队列; 线程池; 缓存;以及 处理器,所述处理器被配置成: 从第一客户端接收针对第一对象的请求; 用针对第一对象的请求填入队列; 从存储介质检索第一对象;以及 向第一客户端发送对象。
13. 根据权利要求12所述的系统,其中请求包括针对研究的多个图像的无序请求并且 其中处理器还被配置成在检索研究的每个图像时向第一客户端提供每个图像。
14. 根据权利要求12所述的系统,其中对象属于对象的集合,处理器还被配置成: 从对象源接收对象的集合; 选择用于对象的集合的存储参数,将存储参数选择成优化对象的检索时间,存储参数 包括存档文件的最大大小和每个存档文件的对象数目;以及 根据所确定的存储参数将对象存储在存储介质上。
15. 根据权利要求14所述的系统,其中处理器还被配置成: 在接收针对第二对象的请求之前,从存储介质检索第二对象;以及 将第二对象存储在缓存中。
16. 根据权利要求15所述的系统,其中处理器还被配置成: 从第一客户端接收针对第二对象的请求;以及 向第一客户端发送第二对象。
17. 根据权利要求12所述的系统,其中处理器还被配置成通过将预留写入队列来用请 求填入队列,该预留对应于所请求的对象。
18. 根据权利要求17所述的系统,其中处理器还被配置成: 将第一对象写入缓存;以及 通知预留已经检索了第一对象。
19. 根据权利要求18所述的系统,其中处理器还被配置成: 如果在通知预留已经检索了第一对象之前做出从预留访问第一对象的尝试,则阻止该 尝试。
20. 根据权利要求18所述的系统,其中处理器还被配置成: 从第二客户端接收针对第一对象的第二请求; 用针对第一对象的第二请求填入队列; 确定队列包含针对第一对象的第一请求;以及 从缓存向第二客户端提供所请求的对象。
【文档编号】G06F17/30GK104160393SQ201280064336
【公开日】2014年11月19日 申请日期:2012年10月23日 优先权日:2011年10月25日
【发明者】K.K.S.霍, W.E.华莱士, S.J.克罗伊特施 申请人:爱克发医疗保健公司