JP2020521209A - プラグイン関数プラットフォームおよび方法 - Google Patents
プラグイン関数プラットフォームおよび方法 Download PDFInfo
- Publication number
- JP2020521209A JP2020521209A JP2019560393A JP2019560393A JP2020521209A JP 2020521209 A JP2020521209 A JP 2020521209A JP 2019560393 A JP2019560393 A JP 2019560393A JP 2019560393 A JP2019560393 A JP 2019560393A JP 2020521209 A JP2020521209 A JP 2020521209A
- Authority
- JP
- Japan
- Prior art keywords
- file
- function
- folder
- plug
- user
- 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.)
- Pending
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/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/168—Details of user interfaces specifically adapted to file systems, e.g. browsing and visualisation, 2d or 3d GUIs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/188—Virtual file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
- G06F9/452—Remote windowing, e.g. X-Window System, desktop virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/04817—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance using icons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/04842—Selection of displayed objects or displayed text elements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/75—Indicating network or usage conditions on the user display
Abstract
【解決手段】サーバが仮想マシン内で実行し、クライアントデバイスからのユーザインターフェースコマンドに応答する軽量プラグイン関数の実行を容易にする。関数は、ユーザインターフェースを実装し得なくてもさらなる処理でコマンドを拡張し、リアルタイムでデータを生成し、任意のプログラミング言語で書かれうる任意のデータレポジトリまたはデータリソースにアクセスし、無限のストレージを有すると認識する。クライアントデバイスは、カスタムソフトウェアを有する必要がなく、標準的なアプリケーションを用いて、従来のファイル−フォルダユーザインターフェースを実装する。クライアントデバイス上に表示されるフォルダおよびファイルのコンテンツは、ユーザによって具体的に要求されるまで存在する必要がない。プラグイン関数は、独自のルートファイルシステムを有するが、ネットワークネームスペースを共有してよい。データが、フォルダ名またはマイクロウェブサーバを用いて関数に入力されてよい。2つの関数が、リモートコンピュータに接続されたデータベースを共有する。関数がより多くのスペースを必要とする時に、ローカルキャッシュに格納されたファイルがトランスペアレントにリモートストレージへ移動される。【選択図】図2
Description
本願は、2017年5月5日に出願された米国仮特許出願第62/501,822号および2017年8月11日に出願された米国特許出願第15/675,193号の優先権を主張し、これらの出願は、その全体が参照によって本明細書に組み込まれる。
本発明は、一般に、エンドユーザまたはその他のプログラムのためのデータを操作するための関数の開発および実行に関する。特に、本発明は、ユーザインターフェースを実装しない場合でも従来のユーザインターフェースを拡張し、リアルタイムでデータを生成し、無限のストレージを有すると認識する軽量関数に関する。
ディスク上の従来のファイルシステム、オブジェクトストア、および、構造化されたデータベース、ならびに、ウェブサービスのようなその他のデータソースなど、幅広いタイプのデータリポジトリが、現在、利用されている。これらのデータリポジトリは、企業のデータセンタ内、クラウドストレージ内、モバイルデバイス上、企業内のコンピュータ上、レガシーデータベース内、ウェアラブルデバイス上など、基本的に、そこからデータを引き出すことができる任意の集中型または分散型の格納位置上に、配置されうる。さらに、これらのリポジトリの各々は、独自のウェブサイトと、上部に重ねられたアプリケーションとを有しうる。データソースが、文書変換など何らかの処理の結果であってもよい。さらに、ユーザが、処理または格納のために自身のデータをもたらしてもよい。
さらに、利用される多くのデータ型、そのデータへアクセスするための異なるチャネル、異なるユーザデバイス、異なるネットワーク接続、そして、まだ開発途上のインターネット・オブ・シングス全体に言及するまでもなく、ウェブ、クライアントサーバ、モバイルウェブなど、利用される多くの技術が存在する。また、ERM、CRPなどのアプリケーションによって引き起こされる、正確なデータを正しいフォーマットでユーザに提供する際の課題もある(古いか、または、高価すぎて定期的に先行して準備できない複製または同期データが用いられる場合には問題になる)。ビッグデータも、莫大な量のデータと、人間が利用するためにその情報をユーザに提供する難しさとから、課題を持ち込む。
要するに、世界は、ますます多くなるデータ、データが格納される場所の増加、データにアクセスする方法の増加、および、データを提示する方法の増加に溺れている。多くの企業は、データをそれらのビジネスの実践でアクセス可能にするために、そのデータを転送および複製しようと試みるが、一般に、必要とされうるユーザインターフェースの数を特に考慮すると、これらの努力のレベルは上がりえない。結果として、所有の総コストは高まっており、企業は、より大量なデータだけではなく、各々が独自のユーザインターフェースを必要とするより多様かつ多数のレポジトリをも扱うために、単に現在の技術を使い続ける余裕がないか、または、使い続けることができない。実際、バックエンドデータをユーザに提示する所与のカスタムアプリケーションについて、ユーザインターフェースおよびユーザ体験がプロジェクト全体の90%以上に至るまでのコストを掛けうると推定されており、エンドユーザが日常的に多数の異なるユーザインターフェースを快適に習得して利用することができないのはいうまでもない。
したがって、最小のコストおよび短い開発時間で、1または複数のソースまたはそれらのマッシュアップからのバックエンドエータへエンドユーザが簡単かつ直感的にアクセスできるようにする新たなプラットフォームおよび方法が望まれている。
以上を達成するために、本発明の目的に従って、様々な格納位置またはその他のAPIエンドポイントに対してデータのリトリーブならびにデータの格納または送信を実行でき、それら自身は必ずしもユーザインターフェースを実装する必要がない軽量プラグイン関数をホストするプラットフォームが開示されている。
プラットフォームは、ファイル(コンテンツ)およびフォルダの生成がサーバ側のすぐに開発されたプラグイン関数によって駆動される間に、消費者(エンドユーザ)側で利用されるファイルシステムの周知の階層的なファイル/フォルダ提示など、既存のユーザインターフェースを利用する。したがって、プログラム可能なファイルサーバを用いたファイルシステムの仮想化の一形態が現れる。
本発明は、上述の不利点を様々な方法で克服する。一例として、前もってデータのダウンロード、格納、同期、計算、または、結合を先制的に行うのではなく、特定の用途のためにユーザによって必要とされるデータが、単に、その元々のデータリポジトリ内で存在する場所に残され、リアルタイムで必要になった時にのみリトリーブまたは生成される。ユーザによって具体的に要求された時にのみ、単純な軽量プラグイン関数を用いて、そのデータをリトリーブする、書き込む、処理する、または、他のデータと結合する。かかるプラグイン関数は、管理者機能または管理機能(認証および許可、リソースの配分、メトリクス、データストレージ管理、ネットワーク通信、など)を実行する必要がない。プラグイン関数は、ユーザアプリケーションにとって目下必要とされる特定の1または複数のデータリポジトリからのデータの読み込みまたはデータの書き込みに焦点を絞る。プラグイン関数は、適切な結果をユーザに提示するために、そのデータを処理するか、または、他のデータと結合してもよい。プラグイン関数は、任意のデータリポジトリまたはデータソースにアクセスでき、開発者が望む任意の方法でデータを処理および結合することができる。
さらに、コストを削減すると共に、迅速な開発および実装を可能にするために、プラグイン関数がユーザインターフェースを実装することを求めるのではなく、標準的なフォーマットでデータをユーザに提示する。具体的な一実施形態において、このフォーマットは、なじみのある階層ファイルシステムである。標準的なウェブベースプロトコルを用いてバックエンドデータをフォルダおよびファイルとして単に表すことによって、多くのビジネス利用のケースで役に立つことがわかる。換言すれば、ユーザは、自分の慣れたよく知っているフォルダおよびファイルを見る。これらのフォルダおよびファイルは、プラグインが実行する時に、オンザフライでリアルタイムに作成されうる。ユーザは、ファイルとして存在せず、コンピュータサーバのディスク上のどこにもディレクトリが存在することがなく、むしろ、必要に応じて、オンザフライでリアルタイムに、任意のアクセス可能なデータリポジトリまたはデータソースから計算される構造化された情報の階層ファイルシステムを見る。
本発明は、幅広いタイプのファイル(医用画像、写真、ビデオ、インボイス、財務記録、集計表、プレゼンテーション、データベース記録、デバイス出力、ビッグデータ、人工知能、など)を扱うことに適用できる。また、本発明は、金融、保険、工業、政治、石油およびガス、情報技術、メディアおよびエンターテイメント、エンジニアリング、CAD/CAMなどの分野の幅広いビジネス利用のケースに適用できる。
第1実施形態において、方法およびシステムは、リモートコンピュータのプラグイン関数を用いて、クライアントコンピュータデバイス上にデータを読み込む。関数が実行して、クライアントデバイスのユーザインターフェースの階層内に表示されるコンテンツのリストを返すが、コンテンツは、どのストレージデバイスにもまだ存在しない。
第2実施形態において、方法およびシステムは、リモートコンピュータのプラグイン関数を用いて、クライアントコンピュータデバイス上にデータを読み込む。クライアントデバイスはファイルを選択し、関数が実行して、ファイルを作成し、クライアントデバイスで表示されるファイルのコンテンツを返す。
第3実施形態において、方法およびシステムは、リモートコンピュータのプラグイン関数を用いて、クライアントコンピュータデバイスからフォルダにファイルを書き込む。関数が実行し、ファイルをストレージに格納し、クライアントデバイス上のフォルダに表示するファイル名を返し、関数は、ユーザインターフェースを全く実装しない。
第4実施形態において、方法およびシステムは、コンピュータサーバ上で2つの関数を実行し、各関数は独自のルートファイルシステムを有し、2つの関数は同じネームスペースを共有する。各関数のための実行可能コードの層がフェッチされて解凍され、各関数が実行され、各関数は、仮想マシンの同じネットワークを用いて、リモート企業コンピュータからデータをリトリーブする。
第5実施形態において、方法およびシステムは、リモートユーザコンピュータデバイス上でユーザインターフェースを全く実行しないプラグイン関数を実行する。プラグイン関数は、サーバコンピュータ上のサーバプロセスによって呼び出され、その関数が実行する。関数は、ファイルを作成し、そのファイルを表示に向けてユーザコンピュータデバイスに送信する。
第6実施形態において、方法およびシステムは、フォルダ名を有する新規フォルダを作成するためのコマンドをユーザから最初に受信することによって、クライアントコンピュータデバイス上のデータを読み込む。新規フォルダを作成するため、および、そのフォルダをコンピュータデバイス上に表示するために、プラグイン関数が実行し、次いで、フォルダ名を入力として用いて、結果を生成する。
第7実施形態において、方法およびシステムは、フォルダ名を有する新規フォルダを作成するためのコマンドをユーザから最初に受信することによって、クライアントコンピュータデバイスからデータを書き出す。新規フォルダを作成するため、および、そのフォルダをコンピュータデバイス上に表示するために、プラグイン関数が実行する。関数が、コンピュータデバイス上でユーザによってフォルダに追加されたデジタルオブジェクトも受信した場合、そのデジタルオブジェクトを処理して、結果を生成する。
第8実施形態において、方法およびシステムは、クライアントコンピュータデバイスからメタデータを入力する。まず、プラグイン関数が、リモートコンピュータ上でデーモンモードで実行し、フォルダアイコンを含むユーザインターフェースをクライアントデバイス上に表示する。関数は、コンピュータデバイス上に表示するウェブページを送信し、ユーザによって入力されたメタデータ値を受信する。関数は、メタデータ値を用いて結果を生成するように実行する。
第9実施形態において、方法およびシステムは、クライアントコンピュータデバイスからメタデータを入力する。まず、リモートコンピュータが、フォルダ名を備えた新規フォルダを作成するためのコマンドをクライアントデバイスから受信する。プラグイン関数が実行し、そのフォルダ名を備えたフォルダを作成して、クライアントデバイス上で表示するためにそのフォルダを返す。メタデータ値がフォルダ名に割り当てられ、関数は、そのメタデータ値を用いて結果を生成するように実行する。
第10実施形態において、方法およびシステムは、クライアントデバイスが2つのプラグイン関数を介してリモートデータベースにアクセスすることを可能にする。第1関数は、データベースとの接続を開く。クライアントデバイスは、第2関数を用いて、データベースへのアクセスを要求する。第2関数は、第1関数によって開かれた接続を用いてデータベースにアクセスし、クライアントデバイスに応答する。
第11実施形態において、方法およびシステムは、クライアントデバイスからのユーザインターフェースコマンドに含まれないさらなるステップを実施するために、コンピュータサーバ上でプラグイン関数を実行する。コンピュータサーバは、パス名およびユーザインターフェースコマンドをクライアントデバイスから受信する。プラグイン関数が実行して、コマンドを実行すると共にさらなるステップを実行し、表示するために結果をクライアントデバイスに返す。
第12実施形態において、方法およびシステムは、ファイルをプラグイン関数からローカルディスクに書き込む。一意ファイル名が、通常のフォルダ名から作成され、ディスク上でファイルを識別するために一意ファイル名を用いて、ファイルが、ローカルディスク上のファイルシステムのユーザフォルダに書き込まれる。
第13実施形態において、方法およびシステムは、ローカルディスク上で利用可能なストレージスペースを増やすか否かを最初に決定することによって、ローカルディスクのスペースを管理する。増やす場合、ローカルディスクから削除されるファイルが選択され、そのファイルはリモートストレージにコピーされ、そのファイルによって利用されていたローカルディスク上のスペースが解放される。
本発明は、そのさらなる利点と共に、添付の図面に関連して行う以下の説明を参照することによって最も良く理解できる。
図1は、格納されたデータにアクセスするためにアプリケーションによって用いられる従来技術のシステムの一例10を示す。かかるシステムは、対応するサーバコンピュータ30〜34と通信する任意の数のクライアントコンピュータ20〜24を含む。データ格納技術の一例は、ファイルサーバおよびファイルシステムを用いる。サーバコンピュータ32は、なじみのあるフォルダおよびファイルを含む階層ファイル構造50が格納された1または複数の物理ディスク42と通信する。ファイルシステム52(通例、カーネル内で実行する)が、API54(POSIXなど)からディスクに格納されたフォルダおよびファイルの要求へとAPI呼び出しを変換する。次いで、ファイルサーバソフトウェア56が、ファイルシステムを、ローカルに実行するかまたはネットワーク上のクライアントコンピュータでリモートに実行するアプリケーションによって利用できるようにする。例えば、NFSまたはSMBなどのネットワーク通信プロトコル62(クライアントは図示せず)が、アプリケーション70(ブラウザなど)が実行中であるクライアントコンピュータ22と通信するために用いられてよい。最終的に、アプリケーションがサーバコンピュータ上で自身のAPI呼び出しを行っているかのように、ディスク42上のファイル構造が、クライアントマシン上のアプリケーションにとって利用可能になる。
別の例では、より新しいネットワークプロトコル63(WebDAVなど)が、クライアントとサーバコンピュータとの間の通信に用いられてもよい。この例では、WebDAVサーバ58が、サーバコンピュータ上で実行し、クライアントコンピュータ上の対応するWebDAVクライアント59とネットワークを介してそのプロトコルを用いて通信する。この場合も、最終的に、クライアントコンピュータ上のアプリケーションにとって、ディスク42上のファイルシステムおよび対応するファイル構造が利用できるようになる。例えば、NFSまたはWebDAVを用いたクライアントコンピュータからの様々な呼び出し(get、putなど)は、ディスク上のファイル構造50を露出させる(expose)ために用いられ、不利点は、データがアプリケーション70にとってそのフォーマットのディスク上でのみ利用可能であることである。
もちろん、上述のように、利用される多くの他のタイプのデータ格納技術が存在しうる。サーバコンピュータ30と適切なネットワーク接続60を介して通信するクライアントコンピュータ20も図示されている。このサーバコンピュータは、各々が適切なAPI 74を備えた任意の数の仮想マシン76を実装し、UUIDによって各々識別されるデジタルオブジェクトを格納するために用いられるオブジェクトストア78を実装する1または複数のディスク40(クライアントは図示せず)と通信してよい。同様に、クライアントコンピュータ20上で実行する適切なアプリケーション71が、API 74を用いて、ディスク上でオブジェクトストレージを露出させる。再び、ネットワーク接続60上での様々な呼び出しは、ディスク上のオブジェクトストレージを露出させるために用いられ、アプリケーションは、特定のタイプのストレージに限定される。
別のデータ格納技術は、データベースを利用する。クライアントコンピュータ24は、適切なネットワーク接続64を介してサーバコンピュータ34へ通信する。このサーバコンピュータは、1または複数のディスク44上のデータベースファイル80内に構造化データを格納するデータベースソフトウェア82と通信するのに適切なAPI 84を備える。クライアントコンピュータ24上で実行するアプリケーション72が、API 84を用いて、ディスク上の構造化データベースを露出させる。ネットワーク接続64を介しての呼び出しは、そのデータベースファイルをクライアントコンピュータ上のアプリケーションに露出させる。再び、アプリケーションは、構造化データベース内のデータの格納およびリトリーブに限定される。
上述のように、クライアントコンピュータまたはその他のデバイス上で実行する任意のアプリケーションは、異なる格納位置からデータをリトリーブするまたは異なる格納位置にデータを書き込む必要がある場合に、様々な異なるデータ格納技術に対処しなければならない。さらに、アプリケーションプログラマは、認証および許可、リソースの配分(CPUタイム、ディスクストレージ、など)、および、とりわけユーザインターフェースに対処するためのソフトウェアコードを(アプリケーションに応じて)書くという責任も持ちうる。実際、所与のアプリケーションのためのユーザインターフェースの設計および実装には、アプリケーションの開発コスト全体の90%を上回るコストが掛かりうると見積もられている。
これらの既存のシステムの1つの不利点は、レイアウト(階層)およびコンテンツ(ファイルデータ)が、アクセスに先立ち、前もって知られて作成されていなければならないファイルおよびフォルダ構造に依存していることである。典型的には、ファイルサーバが、この目的のために利用される。このサーバには、ファイル(実際のコンテンツ)およびフォルダ(実際のレイアウト)が投入されるため、ファイルおよびフォルダを前もって閲覧またはその他の利用に向けて準備するには、かかるファイルおよびフォルダの何らかの形態の同期または複製が必要になり、スケジューリング、リソース、および、コストの結果と共にプリエンプティブ(バッチ)処理を伴う。
クラウドまたはモバイルアプリケーションにおいて、および、ウェブアプリケーションにおいて、この問題は部分的に対処され、それにより、URLの背後にあるコンテンツが動的に生成されうるが、このソリューションは、クライアントUIまたはウェブUIアプリケーションの作成を必要とする。そして、このアプリケーションは、人間のユーザによるアクセスに限定される。ファイルシステムで作業する方法をすでに知りうるアプリケーション(マシンユーザ)は、仮にあったとしても、かかるウェブUIインターフェースを容易に使うことができない。
カスタムクライアントアプリケーションが、既存の制限または不利点を克服するために開発されうる。これは頻繁に起こり、結果として、多くの高価なクライアントアプリケーションが書かれることになる。プログラマは、バックエンドリポジトリのストレージおよびフォーマットに加えて、システムのすべての側面を扱わなければならない。これは、セキュリティ、リソース管理、配備、宣伝などを含み、アプリケーションデータのみに限ったものではない。したがって、既存のソリューションの主な不利点は、複雑さ、コスト、および、製品化までの時間の内の1つであり、これが、多くの重要であるがいくぶん戦略的なプロジェクトが決して始まらない理由である。バックエンドで利用可能なデータとフロントエンドで消費可能なデータとの間のギャップは広い。
したがって、クライアントコンピュータ22またはその他のデバイスのために書かれたカスタムアプリケーションは、開発および実装するには(時間およびコストの観点で)極度に高価でありうる。カスタムアプリケーションは、ネットワーク通信62、63、66、68を用いて(どのデータが必要とされるかに応じて)異なるデータ格納位置と通信するように書かれなければならないだけではなく、どのデバイスが利用されているか、アプリケーションおよびデータの性質、ならびに、ユーザのニーズに応じて、カスタムユーザインターフェースをユーザに提供するように書かれなければならない。さらに、上述のように、プログラマは、管理機能(認証、許可、リソースの配分など)を実装する必要もありうる。このすべては、異なる位置からのデータを必要とすると共にカスタムユーザインターフェースを必要としうる新しいアプリケーションの開発に費用および時間が掛かることを意味する。
カスタムサーバアプリケーションが、通常はウェブサーバまたはREST APIサーバの形態で、存在し開発されている。REST APIサーバは、クライアントアプリケーションがREST APIを用いるようプログラムされた場合にのみ有用である。これは、現在、主に、サーバに由来しブラウザで実行するウェブアプリケーションによってなされる。ブラウザアプリケーションについて、通常は、クライアント上にインストールされる必要のあるアプリケーションソフトウェアはないが、ソリューションは、ブラウザ内での利用に制限される。
したがって、新しい技術には、エンドユーザに情報を提示するためにデータの読み書きをする必要がありうるアプリケーションをアプリケーションプログラマが開発することを容易、迅速、安価にすることが望まれている。我々の新規システムは、中間の問題を解決し、開発者には、障壁を劇的に下げるサーバ側からのデータアクセスのみを気にするようにさせる。これは、迅速であるがサーバ上で管理された方法で市場に投入するためのより適時かつ戦術的なソリューションを可能にする。
システムの概説
ネットワーク通信プロトコル60〜68は、ネットワークを介して標準HTTP呼び出し(get、putなど)をファイルサーバへ送信しており、標準HTTP応答を受信していることがわかる。さらに、新規システムが、クライアントコンピュータとデータリポジトリとの間に挿入されてよく、これらのHTTP呼び出しを傍受することで、明らかな利点を提供することがわかる。
ネットワーク通信プロトコル60〜68は、ネットワークを介して標準HTTP呼び出し(get、putなど)をファイルサーバへ送信しており、標準HTTP応答を受信していることがわかる。さらに、新規システムが、クライアントコンピュータとデータリポジトリとの間に挿入されてよく、これらのHTTP呼び出しを傍受することで、明らかな利点を提供することがわかる。
図2は、図1に示した従来のシステムの不利点を克服する新規システム100を示す。一例として、図1の領域90に示したハードウェアおよびソフトウェアのすべてが、図2の領域190に示すより単純なハードウェアに置き換えられる。さらに、クライアントコンピュータまたはデバイスのいずれにも必要とされるまたはイストールされるカスタムソフトウェアがなく、WebDAVクライアントまたはインターネットブラウザなど、プレゼンテーション層を実装するための標準的なアプリケーションソフトウェアがあればよい。ユーザインターフェースは、周知の階層構造(すなわち、従来のフォルダおよびファイル)が用いられる点で固定である。そして、アプリケーション開発者は、認証、許可、リソースの配分などの管理者機能または管理機能に関心を持つ必要がない。重要なことには、企業側から見ると、格納位置40〜48(またはその他のデータリポジトリまたはデータソース)内のデータは、単にそこに「静止」したままでありうる。アプリケーションプログラミングを容易にするために、データを元々の格納位置から中央位置へ移動させる必要はない。もちろん、データの定期的なバックアップは行われてよいが、任意のアプリケーションプログラミングを容易にするために、データを移動させる必要はない。
クライアントコンピュータ22は、(ほとんどのオペレーティングシステムに含まれる)WebDAVクライアント59、プレゼンテーションアプリケーション172、および、レンダリングアプリケーション174を備える。有利なことに、ユーザインターフェースは固定であり、標準的なものである。プレゼンテーションアプリケーション172は、フォルダおよびファイルが提示または表示されるクライアントコンピュータで実行する任意の標準的なアプリケーションであってよい。例えば、アプリケーション172は、フォルダおよびファイルを表示する一般的なブラウザ(例えば、Explorer、Firefox、Safari)であってよい。あるいは、プラグイン関数がクライアントコンピュータ上にマウントされたドライブアイコンの中でフォルダとして出現する実施形態において、WebDAVクライアント59が用いられてもよい。iOSまたはAndroidオペレーティングシステムを用いるモバイルデバイスにおいて、多くのサードパーティWebDAVブラウザアプリケーションが利用可能である。さらに、REST APIを用いてサーバ150と通信すると共にフォルダおよびファイルを表示するカスタムアプリケーションが書かれてもよいが、カスタムアプリケーションを書く必要はない。一般に、HTTPベースプロトコルを用いる任意のアプリケーション172が適している。
レンダリングアプリケーション174は、データを表示できるクライアントコンピュータ上で実行する任意の標準的なアプリケーションであってよい。例えば、プラグイン関数が実行され、ユーザがプレゼンテーションアプリケーションを用いてフォルダ内のファイルを閲覧すると、レンダリングアプリケーションは、そのファイルのコンテンツを開いて閲覧するために用いられてよい。例として、アプリケーション(PDFリーダ、Vizable、または、Excelなど)が用いられてよい。アプリケーションは、ファイルを開く前に開かれてもよいし、ファイルをダブルクリックすることで、アプリケーションを開かせてもよい。
図2には、仮想マシン136を実行しているサーバコンピュータ132が示されている。仮想マシン内では、クライアントコンピュータ22上のWebDAVクライアント59と通信する際に利用するWebDAV API 152を備えたサーバソフトウェア150が実行している。もちろん、その他のネットワーク通信プロトコルが、クライアントコンピュータとサーバコンピュータとの間の通信に用いられてもよく、例えば、プロトコルがNFSであり、クライアントコンピュータがNFSクライアントを含む場合、サーバ150は、NFSファイルサーバのためのAPIを備える。HTTPベース通信プロトコルが用いられることが好ましい。具体的な一実施形態において、WebDAV API 152は、必ずしもWebDAVサーバではなく、対応するクライアント(この場合、WebDAVクライアント70)にWebDAVサーバとデータ通信していると信じさせるように設計されたAPIである。後に詳しく説明するように、WebDAV API 152は、下にあるデータリポジトリ40〜48すべてを単一のデータリポジトリだけではなくクライアントコンピュータに露出させる。
また、サーバ150内には、後にフローチャートに示す本明細書に記載の機能を実行する複数のソフトウェアモジュールが備えられる。一般に、サーバ150は、クライアントコンピュータとデータリポジトリとの間でデータをやり取りし、管理者機能および管理機能を提供し、図に示し後述するプラグイン関数を配備および呼び出し、プラグイン関数を実行できる最適環境を提供する。
任意の数のプラグイン関数160〜162が、仮想マシンにロードされ、サーバ150によって配備および呼び出されてよく、企業またはエンドユーザに必要とされる任意の機能(例えば、任意のデータリポジトリへのデータの書き込みまたは任意のデータリポジトリからのデータの書き出し、データの結合、検索機能の実行、など)を提供するために実行される。プラグイン関数は、サーバソフトウェア150と一緒にコンパイルされないという意味で「プラグイン」ソフトウェアであり、特定の機能を実行するために、後に「プラグイン」されるよう意図されている。サーバ150は、プラグイン関数の配備をサポートするために、単一のエンティティ(例えば、Esoptra NV)によって提供されるよう意図されているが、各プラグイン関数は、任意の他のプラグイン関数とは異なる目的を有してよく、各々が、異なるエンティティによって書かれてよい。プラグイン関数は、サーバ150から呼び出されるが、サーバへはコンパイルされず、別個のプロセスである。
一般に、プラグイン関数は、リトリーブしたデータを操作して、任意の形態でそのデータをコンピュータデバイスのユーザに提供することで、ユーザのデバイス上の任意の標準的なレンダリングアプリケーションがそのデータを表示できるようにしてよい。例えば、エンドユーザがVizableアプリケーションを好んでおり、そのアプリケーションがエンドユーザデバイス上で利用可能であることがわかっている場合、プラグイン関数は、CSVフォーマット(Vizableアプリケーションによって選好される1つのフォーマット)でエンドユーザのためのファイルを作成するようプログラムされる。
図に示すように、各プラグイン関数は、(適切なプロトコルを用いて)上述のデータレポジトリおよびデータソース40〜44(オブジェクトストア、ファイルサービス、ファイルサーバ、データベース、リモートウェブサービスなど)と通信してよい。プラグイン関数が、(関数160の場合のように)単一のレボジトリのみと通信することを選択してもよいし、関数が、(関数162の場合のように)任意の数のリポジトリと通信してもよい。プラグイン関数が、単に処理関数を実行してもよく、データリポジトリと通信しないことも可能であり、また、処理されるデータがユーザによって提供される(例えば、後述の「Photo]の例を参照)ことも可能である。実際、特定のタスクを実行するためにプラグイン関数がどの計算を実行すべきかを支持するのは、プラグイン関数の開発者である。また、開発者は、どのデータリポジトリにアクセスするか、および、それらのリポジトリにアクセスするためにどのプロトコルが用いられるのかを決定する。したがって、プラグイン関数は、1つの特定のタイプのデータリポジトリ(ファイルサーバなど)のみを用いて組み込まれることはない。実際に、プラグイン関数は、仮想マシン上で実行できる任意の適切なプログラミング言語(C、C++、C#、Java(登録商標、以下同じ)、Python、JavaScript(登録商標、以下同じ)、Go、Rust、Bashなど)で書かれてよい。
プラグイン関数によってアクセスされうるデータソースの他の例は、任意のウェブサービス46、他のリモートアクセス可能なデータベースまたはプロセス48、リアルタイムチャネル、AIエンジン、(ストレージおよび処理の組みあわせである)ビッグデータストアおよびデータウェアハウス、IoTセンサネットワーク、などを含む。ウェブサービスの一例は、Google社によって提供されるサービスまたは関数であり、そこでは、プラグイン関数が特定のデータセットを提供し、サービスが検索などを操作、変換、実行した後に、結果として得られるデータをプラグイン関数に返す。さらに、任意の適切なAPIを用いて、プラグイン関数が、非標準的なデータベース48(レガシーデータベースまたは多様なリモートプロセス48など)にアクセスしてよい。
上記のシステムを用いることにより、プラグイン関数の開発者は、所望のデータにアクセスして、そのデータで計算または組みあわせを実行することだけに関心を持つだけでよく、管理者機能もユーザインターフェースの実装も気にする必要がない。上述のように、標準的な階層ファイルシステムユーザインターフェースが、ユーザに提示されており、これは、プラグイン関数の開発者が、ユーザインターフェース設計または実装を全く実行する必要がないことを意味する。図2に示すように、クライアントコンピュータ22は、WebDAVクライアント59と、プレゼンテーションアプリケーション172(ブラウザなど)と、を備える。クライアント59は、標準HTTP呼び出し(get、putなど)をWebDAV API 152へ送信し、それと引き替えに標準HTTP応答を受信する。
次いで、ブラウザは、(後に詳述するように)階層ファイルシステムのフォルダおよびファイルを表示し、特定のファイルが、任意の標準的なソフトウェアアプリケーション(PDFリーダ、Excel、Picture Viewer、Vizable、Word、PowerPoint、QuickTimeなど)を用いて閲覧されてよい。クライアントコンピュータ上のフォルダおよびファイルの表示は、オペレーティングシステムによっては、自動的であってよい。Window 10を実行するデスクトップコンピュータにおいて、例えば、ビルトインWebDAVクライアントが表示を実行するが、ユーザは、Windows File Explorerを見るだけである。Appleオペレーティングシステムでは、明示的なマウントされたディスクが表示を実行する。iOSなどのモバイルオペレーティングシステムでは、例えば、アップロードまたはダウンロードを可能にするカバーの下でWebDAVを利用する専門のオペレーティングシステムコンポーネントが存在する。表示は、必ずしもHTTP応答に基づいて自動的になされなくてよく、一部の環境(オペレーティングシステム、ブラウザ)では、いくつかのデフォルトが適用される。Microsoftの”Office”アプリケーションは、Windowsオペレーティングシステムとよく統合されており、HTTP応答に基づいてさらなる機能(シングルサインオン認証など)を可能にする。
特に、特定のプラグイン関数によって提供される情報にアクセスして閲覧するために、クライアントコンピュータ上または任意のエンドユーザデバイス上で必要とされるカスタムソフトウェアはない。エンドユーザアプリケーションを提供するために、開発者は、単にプラグイン関数を書き、それはサーバ150内で実行され、実行の結果は、ファイルシステム階層内のクライアントコンピュータ上でエンドユーザに表示される。この固定ユーザインターフェースが従来のフォルダおよびファイルの例えとして記載されているが、階層構造の動的なグラフベースブラウザ(直線または曲線によって相互接続された様々なサイズのカラーボールまたは長方形)など、その他の形態の固定ユーザインターフェースが用いられてもよい。
図3は、システム100の1つの可能な実施例のよりハイレベルな図200を示す。任意の数のサーバ150a、150b、150cが各々、専用ホストコンピュータ上、もしくは、例えば、クラウドコンピューティングプラットフォーム、企業内のデータセンタ、または、おそらくは特定のプラットフォーム(Amazonウェブサービス、Azure、VMwareなど)の中のコンピュータサーバ上の仮想マシン内で実行する。上述のように、そして、以下で詳述するように、サーバ150aは、プラグイン関数の実行を容易にすると共に様々なデータリポジトリとエンドユーザデバイスとの間の通信を支援するEsoptra NVから利用可能なコンパイル済ソフトウェアである。具体的な一実施形態において、サーバ150aは、カーネルバージョン3.16以降のLinux X86_64システム上での利用のために実行可能な静的にコンパイルされたバイナリであり、Goプログラミング言語で書かれ、Debian8.2オペレーティングシステム上で実行する。サーバは、ホストネットワーキングのオーナーシップを引き受け、独自のルーティングテーブルを作成し、ファイヤウォールルールを置き換え、仮想イーサネットアダプタ、Linuxブリッジ、および、複数の内部ネットワーク(シェアごとに1つ)を作成する。また、サーバは、実行前にコンパイルされるが、コンパイル済コードは、プラグイン関数を全く含まない。
プラグイン関数は、通例、企業の独自のデータベースに対する読み出しまたは書き込みを行うことが想定されるが、プラグイン関数が、将来の利用に向けて自身の専用格納位置にデータを単に書き込む必要がある可能性もある。そのことを考慮して、プラグイン関数がデータを書き込みデータを読み出すことができるキャッシュ210およびオブジェクトストア220も提供される。アクセスは、サーバ150aのモジュールによって提供され、様々な方法で実施されてよい。キャッシュ210は、高速で一時的なストレージを提供するために、サーバ150aに関連する仮想マシン上で実行する任意のプラグイン関数によって利用可能になっている。通例、キャッシュは、仮想マシンが実行するコンピュータサーバに直接接続されたローカルな物理ドライブである。
オブジェクトストア220は、典型的にはネットワーク接続を介してプラグイン関数に提供されるリモートストレージであるが、サーバ150aと同じサービス内に配置されてもよい(例えば、サーバ150aおよびオブジェクトストア220の両方が、AWS内にホストされる)。オブジェクトストアは、データが格納されている場所(例えば、後の検索およびリトリーブに向けた写真のストレージ)に関してユーザまたは企業がとらわれない場合に、プラグイン関数が長期ストレージにデータを格納できるように提供される。適切なオブジェクトストアの例は、Caringo社のSWARM、AmazonウェブサービスS3、Microsoft Azure Blobストレージ、などを含む。
別のサーバコンピュータ内の仮想マシン上では、サーバ150の内のいずれかに対してさらなるサービスを提供する中央サーバソフトウェア230が実行している。例えば、このサーバは、ユーザおよび企業が、適切なプラグイン関数を検索し、サーバ150の内に1つにそれらをダウンロードした後に、それらを実行することを可能にするプラグイン関数”store”にウェブインターフェースを提供してよい。それに応じて、リポジトリ234(GitHubリポジトリなど)が、プラグイン関数のためのソースコードおよび実行可能なバイナリコードを格納する。このリポジトリから、プラグイン関数が選択され、次いで、実行に向けてサーバ150の内の1つに転送されてよい。再び、プラグイン関数は、サーバ150がホストされた仮想マシンの内の1つの仮想マシン上で実行または解釈できる任意の適切なプログラミング言語で書かれてよい。プラグイン関数が独自の孤立環境で実行される時に、インタプリタ型言語(例えば、bashまたはJavaScript)のためのランタイムが投入された場合、このコードをコンパイルおよび実行する代わりに解釈することが可能である。
プラグイン関数”store”に加えて、中央サーバ230は、どのエンティティが、どれだけの頻度、そして、どれだけの期間にわたって(CPUサイクル、ネットワーク帯域幅、永続ストレージ容量、I/Oトランザクションなどを用いて)プラグイン関数を利用しているのかを、中央サーバが追跡し、利用について報告し、ユーザおよび企業にインボイスを送信することを可能にする利用計量サービスも提供する。
記載したWebDAVインターフェースを介して、サーバ150の各々は、様々なエンドユーザコンピュータデバイス242〜246のいずれかと通信する。例えば、携帯電話242、タブレットコンピュータ244、もしくは、ラップトップまたはデスクトップコンピュータ246の各々が、フォルダを開く、フォルダを閉じる、ファイルおよびフォルダを開く、新規名称で新規フォルダを作成する、フォルダ間でファイルを移動する、など、一般に、ファイルシステム階層においてユーザが利用可能な従来の相互作用すべてに加えて、プラグイン関数によって提示されたファイルシステム階層を閲覧するために用いられてよい。
クライアントデバイスを利用する個人からコマンドを受信し、個人へ情報を表示することに加えて、プラグイン関数は、RESTインターフェースまたはSOAP(ウェブサービス)インターフェースなどのHTTPベースプロトコルを用いてサーバコンピュータ248のアプリケーションと通信してもよい。図3に示すように、プラグイン関数は、ユーザへの表示のためにコンピュータデバイスと直接通信してデータを提供する代わりに(またはそれに加えて)、サーバコンピュータ248上で実行する任意の適切なアプリケーションまたはウェブサイトとサーバ150cを介して通信してもよい。この実施形態において、後に詳述するように、サーバ150cは、(個人とは対照的に)任意のソフトウェアアプリケーションがプラグイン関数に要求を送信できるように、REST APIも提供する。例えば、企業のコンピュータサーバ上で実行するウェブサイトは、特定のデータにアクセスする必要がある場合があり、そのために、そのウェブサイトを実装するソフトウェアプログラムが、サーバ150cのREST APIを用いて、サーバ150cと共に実行するプラグイン関数に要求を送信し、そこから応答を受信してよい。
ESOPTRAサーバ
図4は、サーバ150のソフトウェアモジュールをさらに詳細に示すブロック図300である。上述のように、サーバ150は、プラグイン関数を書く人が、自分の操作する必要があるデータに関心を持つだけでよく、より迅速かつ安価にプラグイン関数を書くことができるように、できる限り多くの管理者機能、管理機能、および、セキュリティ機能を扱う。そして、先に説明したように、プラグイン関数は、標準的な固定ユーザインターフェースが標準的なプレゼンテーションアプリケーションによってクライアントコンピュータ上に提供されるので、ユーザインターフェースを実装する必要がない。サーバ150は、その後、どのプラグイン関数の目的とも無関係な機能を提供し、その機能は、仮想マシン上で実行する任意のプラグイン関数によって用いられてよい。
図4は、サーバ150のソフトウェアモジュールをさらに詳細に示すブロック図300である。上述のように、サーバ150は、プラグイン関数を書く人が、自分の操作する必要があるデータに関心を持つだけでよく、より迅速かつ安価にプラグイン関数を書くことができるように、できる限り多くの管理者機能、管理機能、および、セキュリティ機能を扱う。そして、先に説明したように、プラグイン関数は、標準的な固定ユーザインターフェースが標準的なプレゼンテーションアプリケーションによってクライアントコンピュータ上に提供されるので、ユーザインターフェースを実装する必要がない。サーバ150は、その後、どのプラグイン関数の目的とも無関係な機能を提供し、その機能は、仮想マシン上で実行する任意のプラグイン関数によって用いられてよい。
WebDAVモジュール304が、任意のクライアントコンピュータのWebDAVクライアント59と通信するためのAPIを提供し、クライアントコンピュータには、それが実際のWebDAVサーバであるかのように見える。任意のWebDAVサーバと同様に、モジュール304は、HTTPを介して要求をリッスンし、また、通信62を介して応答を送信する。このように、モジュール304は、クライアントコンピュータからプラグイン関数へのデータパスを提供する。WebDAVプロトコルは、ファイルシステム階層を提供し、例えば、WebDAVクライアントは、或る親フォルダに含まれるファイルおよびフォルダの情報の要求を送信し、その後、応答のファイルおよびフォルダを表示する。
WebDAVは、好ましいプロトコルであり、表示に向けてファイルシステム階層をプレゼンテーションアプリケーションに提供することができる。例として、HTTPベースではないNFSプロトコル(または同様のプロトコル)、もしくは、特定の性能または機能の理由で専用プロトコルを実装してよい。あるいは、Microsoft社のOne Driveサービスが用いられてもよいし、その他のサービスおよびプロトコル(Google・Drive、DropBox、および、多くの同様のサービス)が用いられてもよい。一般に、どのプラグイン関数が実行しているのかに関わらず、プレゼンテーションアプリケーションがユーザに固定ユーザインターフェースを提示することを可能にする任意の適切な技術およびプロトコルが用いられてよい。
モジュールの上の層には、クライアントコンピュータとプラグイン関数との間のデータパスを提供し、ひいては、ユーザにデータを見えるようにするウェブサーバユーザインターフェースモジュール308が提供されている。モジュール308は、クライアントコンピュータ上のプレゼンテーションアプリケーション(ブラウザなど)と通信し、また、管理者コンピュータ310のブラウザとも通信する。管理者は、REST APIと共にCLIユーティリティなどのアプリケーションを用いて、モジュール308と通信する。モジュール304内には、専用ポート上で管理者のための制御パスを提供するサーバ側REST APIも備えられている。このAPIは、”start−up share:シェアの開始”、”shutdown plug−in function:プラグイン関数のシャットダウン”、”create user:ユーザの作成”などの典型的なコマンドを備える。
認証/許可モジュール312は、クライアントデバイスからの任意のユーザログインの認証、および、どのプラグイン関数を利用できるのかに関してのユーザの許可を扱う。このモジュールは、アイデンティティプロバイダ314(オープンIDコネクト、OAuth2パスワード、アクティブディレクトリ、Google、Facebookなど)のサービスを用いて、ユーザを認証してよく、企業のLDAPディレクトリ316を用いて、特定のユーザを許可してよい。このモジュールは、外部サービスに依存する代わりに、独自の認証および許可ソフトウェアを備えてもよい。
モジュール312のセントラルオブジェクトは、グループである。ユーザは、グループのメンバにされてよく、プラグイン関数は、(管理者によって決定されたように)グループに関連付けられ、したがって、グループを介して、ユーザが、特定の関数にアクセスする。サーバは、シェアごとに、ユーザおよびグループの管理のためのビルトインファシリティ(REST APIおよびウェブUI)を有する。この機能は、関数ではなく、モジュール312によって操作されるので、各関数は、すべての要求が適切に認証および許可されると仮定する。(管理者によって決定された)アイデンティティプロバイダに基づいたより高度な認証および許可が、サーバに構成されてもよい。アクティブディレクトリの場合、どのユーザがどのグループひいてはどの関数にアクセスしたのかを決定するのは、アクティブディレクトリ管理者であってよい。任意の1ユーザに見える関数のコレクションは、そのユーザがメンバであるグループに関連付けられた関数セットすべての累積(すなわち、和集合)である。したがって、各プラグイン関数は、ユーザの認証および許可に全く関わる必要も実施する必要もなく、任意の数のユーザに簡単な拡張性を提供する。
割り当て/メトリクスモジュール320は、リソースの配分、および、利用されているそれらのリソースの測定を提供する。例えば、仮想マシン上で実行するプラグイン関数の間でリソース(CPU、メモリ、ストレージ、および、帯域幅など)を配分し、また、どの特定の個人または企業がこれらのリソースおよびプラグイン関数を利用しているのかを測定する。プラグイン関数をグルーピングして、それらを特定のユーザへ割り当てるためのテナント−シェア技術については、後述する。
オブジェクトストレージモジュール328は、ネットワークを介してオブジェクトストア220と通信し、プラグイン関数が長期間ストレージにデジタルオブジェクトを格納することを可能にし、プラグイン関数がそのストレージの管理に関与する必要がないように、そのストレージの管理面のすべてを扱う。キャッシングモジュール324は、ローカルネットワークを介してキャッシュ210と通信し、プラグイン関数が短期ストレージにファイルシステムを用いてファイルを格納することを可能にし、プラグイン関数がそのストレージの管理に関与する必要がないように、そのストレージの管理面のすべてを扱う。
仮想化モジュール332は、後に詳述するように、プラグイン関数が、全く依存関係になく、仮想マシン上で実行する他のプラグイン関数とコンフリクトしないように、Linuxカーネルのフィーチャを用いて、各プラグイン関数に分離をもたらす。
プラグイン関数階層および仮想化
図5は、サーバ150の内の1サーバ内の(オブジェクト指向プログラミングの意味での)テナント−シェア−プラグインオブジェクト階層のブロック図である。テナントクラスが、インスタンス化され、そのクラスの各インスタンスは、システム200内のアカウントを表し、各テナント(テナント410またはテナント440など)は、異なるエンティティ(個人、企業、デパートメント、アドホックグループなど)を表し、これは、最終的に、サーバ150の任意の計測された利用量の責任を負う。テナント410は、サーバ150内に表されたものとしてのみ図示されているが、各テナントは、複数のサーバ150のいずれにおいて表されてもよく、これらの異なるサーバ上の様々なプラグイン関数の実行に責任を負ってよい。データの格納およびそのストレージの計測を容易にするために、各テナントインスタンスに関連付けられた一意識別子があり、この識別子は、オブジェクトストアに格納された任意のデジタルオブジェクトに対するプレフィックス(第1パスコンポーネント)としてそれを用いるなどして、テナントによって格納されたデータを追跡するために、様々な方法で用いられてよい。
図5は、サーバ150の内の1サーバ内の(オブジェクト指向プログラミングの意味での)テナント−シェア−プラグインオブジェクト階層のブロック図である。テナントクラスが、インスタンス化され、そのクラスの各インスタンスは、システム200内のアカウントを表し、各テナント(テナント410またはテナント440など)は、異なるエンティティ(個人、企業、デパートメント、アドホックグループなど)を表し、これは、最終的に、サーバ150の任意の計測された利用量の責任を負う。テナント410は、サーバ150内に表されたものとしてのみ図示されているが、各テナントは、複数のサーバ150のいずれにおいて表されてもよく、これらの異なるサーバ上の様々なプラグイン関数の実行に責任を負ってよい。データの格納およびそのストレージの計測を容易にするために、各テナントインスタンスに関連付けられた一意識別子があり、この識別子は、オブジェクトストアに格納された任意のデジタルオブジェクトに対するプレフィックス(第1パスコンポーネント)としてそれを用いるなどして、テナントによって格納されたデータを追跡するために、様々な方法で用いられてよい。
上述のように、各テナントのテナントインスタンスは、実行時に存在し、プロパティの中でも特に、各テナントのシェアのリストを含む。テナントと同様に、シェアは、シェアインスタンス(シェア420およびシェア430など)を作成するためにインスタンス化されるシェアクラスがある論理概念である。テナントとは異なり、シェアは、テナント内に固有のものであり、シェアは、テナント間で共有できない。各シェアは、関数422および424を含むシェア420など、プラグイン関数の人為的なグルーピングを作成する。図に示すように、シェア430は、関数432および434を含む。プロパティの中でも特に、各シェアインスタンスは、それに関連するプラグイン関数のリストを含む。各シェアの一意識別子が、オブジェクトストア内のオブジェクトに名称をつける際に、第2パスコンポーネントとして用いられる。
シェアインスタンスは、エンドユーザのためのエントリポイントとしても用いられ、したがって、各シェアインスタンスは、そのシェアのIPアドレスおよびポートであるプロパティを有する。WebDAVモジュール304は、シェアとエンドユーザとの間の通信を容易にするために、シェアあたりに1つのWebDAVリスナを提供する。単一のシェアに関連するすべてのプラグイン関数が、そのシェアのサブネットのIPアドレスを用いるので、それらはすべて、同じネットワーク上にある(すなわち、同じサブネット上にある)ように見え、これについては、後に詳述する。例えば、サーバ150およびプラグイン関数がパブリッククラウド内で実行する場合でも、VPNが、シェアを用いて、そのシェアのプラグイン関数による企業のファイヤウォール内のデータへの安全なアクセスを可能にし得る。
テナントおよびシェアと同様に、プラグイン関数のためのクラスがあり、各プラグイン関数は、関連のランタイムオブジェクトを有する。1つのシェアが、任意の数の異なるプラグイン関数と関連付けられてよいが、所与のプラグイン関数が、異なるシェアのコンテキスト内で実行されてもよい(例えば、関数422が、シェア420のコンテキスト内と、シェア450のコンテキスト内で実行する)ことに注意されたい。シェアによるプラグイン関数のグルーピングは、後に説明するように仮想化技術の利用を容易にする。プラグイン関数を呼び出すのはシェアであり、そのプラグイン関数がリモートネットワークベースのサービスに働きかけることを可能にするためにソースネットワークアドレス変換を実行するのもシェアである。プラグイン関数の名称は、シェア内のルートフォルダの名称である。
各テナント(すなわち、各個人、企業など)についての情報、各シェアについての情報、および、各プラグイン関数についての情報を含む構成ファイルも存在する。具体的には、サーバが、各テナント、シェア、および、プラグイン関数に対して1つずつのファイルを含む.yaml構成ファイルのツリーを維持する。この.yamlファイルは、管理者によって間接的に(例えば、CLIを介して)制御パスREST API呼び出しを行った結果として作成および更新される。
図6は、プラグイン関数を含む視覚化階層460のブロック図である。当技術分野で周知のように、ハイパーバイザ134が、任意の数の仮想マシン136をホストするために、物理マシン132上で実行してよい。先に説明したように、サーバ150は、それが呼び出す任意の数のプラグイン関数422、424と共に、この仮想マシン内で実行する。
実行中に各プラグイン関数に対して分離を提供するために、本発明は、現在利用されている仮想化技術とは異なるLinuxカーネルから利用可能な仮想化技術を利用する(ただし、新規の方法で)。通例は、実行中に完全な分離を提供するために、プロセスが、コンフリクトなしにプロセスが実行することを可能にするいわゆるソフトウェア「コンテナ」内で実行するよう構成される。コンテナを実装する一般的なソフトウェアアプリケーション(Docker)は、コンテナ内の各プロセスが、独自のルートファイルシステム(RFS)を有するだけでなく、各プロセスが独自の排他的なネームスペースを有することを必要とする。しかしながら、本発明は、本発明の目的に従って利点を提供するために、異なる方法で分離を実施する。
ソフトウェアコンテナと同様に、各プラグイン関数422、424は、独自のルートファイルシステム(RFS)を備えたサーバ150によって呼び出され、したがって、仮想マシン内にインストールされた他のプロセスとのコンフリクトを防ぐために必要とする分離を各プラグイン関数に提供する。しかし、現在の技術とは異なり、各プラグイン関数は、独自のネームスペースを提供されない。それは、シェアのネットワークネームスペース内にネストされたネットワークネームスペースを取得して、そのシェアと他のネームスペース(プロセス(PID)ネームスペースなど)を共有する。
本発明の目的の1つは、企業によるプラグイン関数の開発を容易にすることであり、その企業の様々なデータリポジトリにアクセスするために、および、プラグイン関数の開発に掛かる費用および時間を削減するために、プラグイン関数ごとの非共有ネームスペースが不利になることがわかる。企業がファイヤウォールの背後の自身のデータベースの1つにアクセスするために必要なプラグイン関数一式の例を考える。単一のプラグイン関数がそのデータベースにアクセスすることを可能にするようにVPNが設定された場合、プラグイン関数がVPNを利用するのを可能にするために特定の量のネットワーキングが必要とされる。一式のプラグイン関数が第1プラグイン関数と同じネットワークネームスペースを共有することを可能にすることにより、一式全体が、ネットワークを共有し、すべての関数が、VPNを利用できる。この結果は、Dockerで行うなど、分離のために従来のソフトウェアコンテナを用いても実現できない。ソフトウェアコンテナを用いた場合、各関数は、独自の排他的なネームスペースを有することになり、ネットワーキングは、各関数のために個別に設定される必要があるため、各関数の開発者の作業が多くなり、関数の開発が困難になる。
より具体的には、ネットワークネームスペースを共有するために、サーバは、ソフトウェアブリッジおよびファイヤウォールベースのソフトウェアルーティング(iptables)で内部ソフトウェア定義ネットワークを作成する。各シェアは、独自のサブネット(すなわち、そのシェアのためのプライベートネットワーク)を有する。シェアのプラグイン関数はすべて、そのシェアのサブネットに接続される。サーバのホストコンピュータのIPアドレスは、外部世界へのゲートウェイであり、内部では、本当のTCP/IPネットワークのように見え、ソフトウェア定義ネットワークとして構築される。したがって、シェアが、ネットワークデバイスのように見えるプラグイン関数を備えた独自のネットワークを有するかのように見える。ネットワークは、(192.168.Y.Z/16である)ホームネットワークによく似た非インターネットルーティングネットワーク10.X.Y.Z/8である。ファイヤウォールは、SNAT(Source NATting)を用いて、インターネットへのこのネットワークアクセスを与える。
したがって、本発明の一実施形態は、特定のシェア内のプラグイン関数がネットワークネームスペースを共有することを可能にし、例えば、関数422および424がネームスペース480を共有し、実質的には、それらがすべて、同じネットワーク490上にあることを意味する。より具体的には、ネームスペースを共有するプラグイン関数が、IPスタックを共有し、プロセス識別子のセットも共有する。したがって、シェアの概念は、プラグイン関数が共通のネットワークネームスペースなど様々なネームスペースを共有できるようにプラグイン関数をグループ化することを可能にする。サーバは、仮想イーサネットペア(vethペア)を用いて、分離されたネットワークを作成し、各シェアとホストコンピュータとの間および各プラグイン関数とシェアとの間にvethペアを作成する。したがって、シェアのプラグイン関数は、同じサブネット上にある。
具体的な一実施形態において、サーバは、Linux上で動作し、Linuxは、複数のネームスペースを提供する。この実施形態において、今、Network、PID、UTS、および、Control Groupsを利用する。各シェアは、独自のNetwork、UTS、および、PIDネームスペースを有する。また、各プラグイン関数は、さらなるネストされたネットワークネームスペースを有する。テナント、シェア、および、プラグイン関数は各々、会計および割り当ての管理のための対応する”cgroup”を有する。ネットワークネームスペースは、効果的に、別個のIPスタックのように見える。プロセスネームスペースは、効果的に、別個のセットのプロセス識別子のように見える。
各プラグイン関数に独自のRFSを提供し、プラグイン関数がネームスペースを共有するためにグループ化されることを可能にすることが、好ましい実施形態であるが、本発明は、各プラグイン関数が独自のネームスペースを割り当てられる従来のソフトウェアコンテナを用いて実施されてもよいと考えられる。
図7は、プラグイン関数のためのルートファイルシステムがどのように作成されうるのかを示す図500である。上述のように、サーバ150に関連する仮想マシン上で実行する各プラグイン関数は、分離を提供するために、独自のルートファイルシステムを有する。仮想マシンが実行しているサーバコンピュータ132の物理ディスク510上のローカルフォルダが示されている。ルートファイルシステムは、”Plug−in Rootfs”520という名称のそのディスク上のフォルダに解凍される。
好ましくは、ルートファイルシステムは、複数の層に構築され、第1層は、C#、Phython、または、Javaファイルなど、特定のプログラミング言語のためのベース層を典型的に含むベースルートファイルシステム530である。このベース層は、その特定のプログラミング言語で書かれた任意のプラグイン関数によって必要とされるコードを含むので、典型的には、サーバ150に関与するエンティティによってローカルディスク上に提供される。一例として言語Phytonを用いると、このベース層は、Phytonランタイム環境のためのコンパイル済コードを含み、典型的には、zipファイル”base.tar.gz”に格納される。ルートファイルシステムは、単純であってもよいし、Java仮想マシンくらい高度であってもよい。
第2層は、依存層540であり、典型的には、1または複数のプラグイン関数が必要とする特定のプログラミング言語における追加のライブラリを含む。この第2層は、多くの関連プラグイン関数(単独の企業によってまたはシステムインテグレータによって作成された関連プラグイン関数など)が必要とする依存を含む可能性があるので、企業またはシステムインテグレータによって作成され、特定のプログラミング言語で書かれた関連プラグイン関数による利用に向けてリポジトリ234に格納される可能性がある。この層は、プラグイン関数のためのホストフォルダ内でベース層の上に解凍される。Pythonプラグイン関数については、この層は、Pythonクラスおよびライブラリを含み、典型的には、zipファイル”ependencies.tar.gz”に格納される。
第3層は、プラグイン関数550のための実際のコードであり、仮想マシン上で実行できる任意の適切なプログラミング言語で書かれている。プラグイン関数は、非常に特殊なデータ操作タスクのために書かれ、したがって、そのバイナリコードは、リポジトリ234に格納される。Pythonについては、これは、タスクを実行する実際のPythonコードである。
以下にさらに詳細に説明するように、プラグイン関数が配備されると、これらの層が、時間501〜503に1つずつ重なって、物理ディスク上のフォルダ520へ解凍される。集合的に、これらの層は、プラグイン関数のためのルートファイルシステムを提供する。
プラグイン関数の配備
図8Aは、プラグイン関数がサーバ150にどのように配備されるのか、すなわち、すぐに実行できるようにサーバ150上にプラグイン関数を配置するのに必要な工程、を示すフローチャートである。プラグイン関数を実際に書くことに加えて、プラグイン関数の配備は、管理者によってまたはサーバ150によって自動的に対処されるため、開発者の負担が取り除かれる。上述のように、サーバの管理のためにサーバ150内に制御パスREST APIが存在する。クライアント側の管理アプリケーションを開発するためのSDKが、LinuxコンソールまたはBashスクリプトで用いられるCLI管理ツールである別個の実行可能ファイルを開発するために用いられる。CLI(またはSDKまたは生REST API)を用いて、管理者は、層をアップロードする、様々なプロパティを設定するなど、テナントシェアプラグイン関数の階層をナビゲートおよび管理する。配備後に、層が解凍され、ルートファイルシステムは、サーバのディスク上のフォルダに実際にインストールされる。こうして、プラグイン関数は、ユーザHTTP要求でトリガされたサーバによる呼び出しの準備が整う。この配備の詳細は、以下の通りである。
図8Aは、プラグイン関数がサーバ150にどのように配備されるのか、すなわち、すぐに実行できるようにサーバ150上にプラグイン関数を配置するのに必要な工程、を示すフローチャートである。プラグイン関数を実際に書くことに加えて、プラグイン関数の配備は、管理者によってまたはサーバ150によって自動的に対処されるため、開発者の負担が取り除かれる。上述のように、サーバの管理のためにサーバ150内に制御パスREST APIが存在する。クライアント側の管理アプリケーションを開発するためのSDKが、LinuxコンソールまたはBashスクリプトで用いられるCLI管理ツールである別個の実行可能ファイルを開発するために用いられる。CLI(またはSDKまたは生REST API)を用いて、管理者は、層をアップロードする、様々なプロパティを設定するなど、テナントシェアプラグイン関数の階層をナビゲートおよび管理する。配備後に、層が解凍され、ルートファイルシステムは、サーバのディスク上のフォルダに実際にインストールされる。こうして、プラグイン関数は、ユーザHTTP要求でトリガされたサーバによる呼び出しの準備が整う。この配備の詳細は、以下の通りである。
図8Aの第1工程604において、開発者が、特定のデータ操作タスクを実行するために適切なプログラミング言語でプラグイン関数を書く。各プラグイン関数は、上述のように、リポジトリ234に格納されてよく、異なる層を備えてよく、各層は、”.zip”ファイルとして格納されることが好ましい。
クライアントコンピュータ上での標準的なファイルシステム階層の提示を容易にするために、各プラグイン関数は、プラグイン関数のAPIを形成するコマンドセットのサブセットを実装する。すべてのコマンドが必ずしも実装される必要はなく、プラグイン関数は、他のコマンドが要求されないので、それらの他のコマンドを実装しないことが好ましい。このAPIのコマンドを実装することにより、関数は、クライアントコンピュータ上のプレゼンテーション層におけるユーザ動作(例えば、フォルダを開く、フォルダの名前を変える、など)、すなわち、フォルダおよびファイルと相互作用する際のユーザによく知られた動作、をサポートする。関数は、開発者が望むような他の機能で各コマンドを拡張してもよい。
表1は、APIのそれらのコマンド、コマンドをWebDAVクライアントからプラグイン関数に送信させるクライアントコンピュータ上のプレゼンテーションアプリケーション内での特定のユーザ動作、クライアントコンピュータ上に表示される結果、および、(コマンドを拡張するために関数が行いうる動作の中でも特に)プラグイン関数がコマンドを実装するために行いうる動作、を挙げたものである。有利なことに、プラグイン関数は、開発者のニーズに応じて、例えば、どのフォルダが開かれるまたは除去されるか、フォルダの名称、エンティティがどこへ移動されるか、などを用いて、これらの標準的なユーザインターフェースコマンドの1つから通常期待されるものに加えて、他の動作を行ってもよい。例えば、ファイル(またはフォルダ)をフォルダに移動させると、そのファイルに関連付けられたユーザの名称をフォルダに関連付けられたグループに追加する動作も行われ、または、他の処理が、フォルダまたはファイルの名称に基づいて行われてもよい。もしくは、ファイルまたはフォルダの除去が、コンテキストに応じた時間の長さだけ遅延され、または、他の処理が、フォルダまたはファイルの名称またはコンテンツに基づいて行われる。もしくは、ファイルの削除時に、他のクリーンアップタスク(コピーの保存、データベースの更新など)が実行される。したがって、ユーザがファイルシステム階層の従来のユーザインターフェースで期待する単純な機能をはるかに超えうる機能で、標準的なファイル/フォルダユーザインターフェース意味論が拡張される。プラグイン関数の必要なフォーマットは、バイナリである実際のファイルデータを除けば、JSON要求および応答本文である。
工程608において、管理者は、適切なネットワーク接続69を介して、上述の階層を用いて(典型的には、スクリプトまたはコマンドを用いて)、特定のサーバ150のためのテナント、シェア、および、プラグイン関数を定義する。これらのエンティティの各々は、プロパティを有し、各プラグイン関数のプロパティは、一意識別子、どの層が関数を構成するか、および、各層のURLまたはコンテンツアドレス、を含む。URLまたはコンテンツアドレスは、サーバ150が後にプラグイン関数を見つけてリトリーブすることを可能にする。次に、工程612において、サーバは、各テナント、シェア、および、プラグイン関数のための構成ファイルをディスク上に(例えば、管理者からのスクリプトを用いて)自動的に作成し、各々をメモリ内でランタイムオブジェクトとしてインスタンス化する。各ランタイムオブジェクトは、適切なプロパティを備えており、例えば、各シェアは、上述のように、関連するプラグイン関数の間でのネームスペースの共有を実施するために、ネットワーキングプロパティを備える。これらのメカニズムを通して、サーバ150は、そのテナントおよびシェア、ならびに、どのプラグイン関数が利用されるかを知る。工程616において、各プラグイン関数について、サーバ150は、関数の各層をフェッチして、サーバ150のローカルディスク上のルートファイルシステムフォルダへ解凍する。この工程は、サーバ上の各シェアに対して行われる。
次に、工程620において、サーバは、特定のプラグイン関数が”start”コマンドを実装するか否かを判定する。この工程において、サーバは、”options”コマンドで関数にクエリし、関数は、それが実装するコマンド(例えば、get、put、listなど)を返す。上述のように、関数は、「コマンドライン」モード、すなわち、呼び出された時に関数が実行してその後終了する一時的なモードで実行してもよいし、「デーモン」モード、すなわち、実行された時にプロセスが関数に対して作成され、プロセスが実行し続けるモードで実行してもよい。”start”を実装する関数は、デーモンモードで実行しうる。関数がこのコマンドを実装する場合、工程624で、サーバは、デーモンモードで関数を呼び出す(後述の図8B)。実装しない場合、以下でさらに詳細に説明するように、制御は、サーバおよびプラグイン関数がユーザからの関数呼び出しの任意の要求を待つ工程628に進む。関数は、デーモンとして実行する関数については工程624でローカルディスク上のルートファイルシステムフォルダから仮想マシンへロードされ、例えば、工程720において関数がコマンドモードで実行される度に繰り返しロードされる。
図8Bは、プラグイン関数についてデーモンモードの利用を記載するフローチャートである。この技術は、デーモンモードでプラグイン関数を起動して、関数が連続的に実行することを可能にし、これは、プラグイン関数だけのためのユーザインターフェースを実装するプラグイン関数に固有のマイクロウェブサーバを提供するものである。また、デーモンモードの利用は、プラグイン関数が、さらなる利点となるデータベースへの連続的な接続を維持することも可能にする。
デーモンモードは、プラグイン関数によって実装される任意のコマンド(データの読み出しまたは書き込みなど)と併せて用いられてもよいし、プラグイン関数のためのメタデータまたはその他の命令を収集するために前もって用いられてもよい。デーモンモードでのプラグイン関数の実行は、関数が長期間(例えば、サーバ150が実行している限り)実行し続けることを可能にし、プラグイン関数が、マイクロウェブサーバを介してユーザから入力を収集するまたはデータベース接続を維持することを可能にする。
工程640において、プラグイン関数は、上述したように配備され、工程642において、サーバは、工程624に関して上述したように、プロセスを作成し、そのプロセス内でデーモンとしてプラグイン関数を実行する。この時点で、プラグイン関数は、連続的に実行しており、ユーザ要求を待つ以外に、さらなる明示的な動作を行う必要はない。ただし、有利なことに、連続的に実行しているプラグイン関数は、工程644または工程654で始まる以下に記載の2つの任意選択的な目的で用いられてもよい。
工程644において、プラグイン関数は、ユーザがそのプラグイン関数に入力を提供することを特に可能にするシングルページウェブアプリケーションを実装するマイクロウェブサーバを作成する。シングルページウェブアプリケーションは、開発者の望む任意のフォーマットを有してよく、任意の入力データを要求してよい。この内部ウェブサーバは、ユーザがアクセスできない内部ポートでリッスンしている。サーバは、クライアントデバイス上に表示される単一のアイコン(「ギア」アイコン、「設定」ボタン、または、ユーザ入力が利用可能であることを示すその他のアイコンなど)をクライアントデバイスに返す。工程646において、ユーザは、このアイコンを選択することによって、ひいては、サーバにそのポートで送信される標準”get”HTTP要求を作成することによって、(例えば、クライアントデバイス上のブラウザを介して)マイクロウェブサーバにナビゲートする。次に、サーバは、この要求を、内部ポートでリッスンしているプラグイン関数に渡す。
次に、工程648において、マイクロウェブサーバは、クライアントデバイス上に表示されたシングルウェブページアプリケーションに応答する。工程650において、ユーザは、ウェブページ上で要求されたメタデータ(クエリ、タグ、ラベル、キーワード、ユーザ情報、アップロード時刻など)を入力する。入力すると、このデータは、クライアントデバイスからサーバ150への”put”要求を用いて、プラグイン関数のファイルに書き込まれる。このファイルは、ユーザには見えない隠しファイルであるが、メタデータ、命令などを含むものとしてプラグイン関数に知られた特別なファイル名を有する。通例、このファイルは、後述するバックエンドキャッシュ技術を用いて、キャッシュ210に格納される。次いで、プラグイン関数は、このファイル内のメタデータを用いて、検索を実行する、ファイルを格納する、または、プラグイン関数の処理を他の方法で変更する。
別のオプションとして、工程654において、デーモン関数はデータベース、(ローカルまたはリモートデータベースもしくは接続プールなど)への接続を開き、その接続を維持する。データベースの任意の適切なAPIが用いられてよく、目標は、できる限り長く接続を維持することである。データベースへの接続を開いて維持するには、比較的長い時間がかかり、パフォーマンスに影響するので、他のプラグイン関数によって利用されうる接続を開いて維持すれば(つまり、それらの関数自身は開いて維持する必要がない)、これらのプラグイン関数のための応答時間が大幅に高速化する。通例は、工程642において実行し始めたのと同じプラグイン関数が、コマンドラインモードで異なるプロセスにおいて再び(または何度も)呼び出されて実行されうる。次いで、この他のプラグイン関数は、工程654でデーモン関数によって確立されたデータベースへのオープン接続を利用してよい。デーモン関数と同じではないプラグイン関数が、オープン接続を利用してもよい。
したがって、工程656において、デーモン関数は、特定のREST API要求のためのリスナを開始する。一般に、プラグイン関数が同じホスト上で互いに通信することを可能にするために、プロセス間の通信技術が必要である。様々な技術が用いられてよいが、この例では、デーモン関数はRESTサーバを実装しており、任意の他のプラグイン関数がコマンドラインモードで、RESTクライアントとして機能する。今、デーモン関数は、データベースへの接続に関して他のプラグイン関数からの任意の要求に応答できる。
工程658において、他のプラグイン関数は、REST APIを介してデータベースに関する要求をデーモンプラグイン関数に送信し、応答を待つ。この要求は、データベースの任意の要求(データベースからのデータの読み出しまたはデータベースへのデータの書き込みなど)であってよい。これらのプラグイン関数の1または複数の開発者は、任意の数のプラグイン関数が単一のデーモンプラグイン関数によって確立されたオープン接続を利用することを可能にするために、このプロセス間の通信技術を利用するように関数を書いている。工程660において、デーモン関数は、要求を受信し、そのオープン接続を用いてデータベースにアクセスし、他の関数によって要求された(場合に応じて)読み出しまたは書き込みを実行し、データベースから結果(要求されたデータまたは書き込みの確認など)を受信する。次いで、工程662において、デーモン関数は、REST APIを介してこの結果を他のプラグイン関数へ中継する。
もちろん、プラグイン関数は、様々な他の理由のためにデーモンモードで開始されてもよい。例えば、連続的なバックグラウンド処理が必要な場合、または、ユーザによって要求された後の或る時点に書き込みを実行することが有利である場合、プラグイン関数は、それらの利点を提供するためにデーモンモードで開始されてよい。
プラグイン関数を用いたデータの読み出し
図9A〜図9Cは、データを読み出してユーザに表示するためにプラグイン関数が利用される一実施形態を記載するフローチャートである。”の例では、プラグイン関数”EOD”が、前もって作成され、リポジトリ234に格納されており、上述のようにサーバコンピュータ132内に配備されている。関数EOD(終値を表す)は、ユーザにフォルダを提示し、そのフォルダが開かれると、様々な証券取引所のフォルダを表示し、それらのフォルダの各々が開かれると、様々な商品のいずれかの終値をリストするファイルを表示する。本発明の1つの利点は、ユーザの知る限り、ユーザが行うことは、フォルダを開いてファイルを選択することだけであり、すなわち、プラグイン関数が裏で実際に実行して、情報を収集し、フォルダおよびファイルをオンザフライで作成し、リアルタイムでユーザにデータを表示していることに、ユーザが気付かないことである。ユーザには、ハイレベルEODフォルダの中のフォルダおよびファイルが最初から永久的にどこかに存在するように見えるが、これらのフォルダおよびファイルは、EODプラグイン関数が実行するまで作成されず、作成される場合にも、ファイル閲覧インターフェースに表示するかまたはエンドユーザアプリケーション内にレンダリングするためにすぐに必要とされるフォルダおよびファイルのみである。
図9A〜図9Cは、データを読み出してユーザに表示するためにプラグイン関数が利用される一実施形態を記載するフローチャートである。”の例では、プラグイン関数”EOD”が、前もって作成され、リポジトリ234に格納されており、上述のようにサーバコンピュータ132内に配備されている。関数EOD(終値を表す)は、ユーザにフォルダを提示し、そのフォルダが開かれると、様々な証券取引所のフォルダを表示し、それらのフォルダの各々が開かれると、様々な商品のいずれかの終値をリストするファイルを表示する。本発明の1つの利点は、ユーザの知る限り、ユーザが行うことは、フォルダを開いてファイルを選択することだけであり、すなわち、プラグイン関数が裏で実際に実行して、情報を収集し、フォルダおよびファイルをオンザフライで作成し、リアルタイムでユーザにデータを表示していることに、ユーザが気付かないことである。ユーザには、ハイレベルEODフォルダの中のフォルダおよびファイルが最初から永久的にどこかに存在するように見えるが、これらのフォルダおよびファイルは、EODプラグイン関数が実行するまで作成されず、作成される場合にも、ファイル閲覧インターフェースに表示するかまたはエンドユーザアプリケーション内にレンダリングするためにすぐに必要とされるフォルダおよびファイルのみである。
本発明の一実施形態の1つの利点によると、これらの例で示したフォルダおよびファイルの階層は、プラグイン関数が実行してその階層を生成するまではメモリまたはストレージのどこにも実際に存在せず、その後、すぐに必要とされるサブセットだけを生成する。従来のファイルサーバとは異なり、開発者は、この階層および特定のファイルを事前に作成する必要がなく、階層およびファイルコンテンツは、必要な時、すなわち、ユーザがフォルダを開くためにタップした時、または、ファイルのコンテンツを見るためにファイルをタップした時に、プラグイン関数によって生成されればよい。ユーザインターフェースは、ファイルのアイコンおよびファイル名を表示してよいが、そのファイルの実際のデータは、まだ生成もリトリーブもされておらず、ユーザが具体的にそれを要求するまで、プラグイン関数は、データの生成もリトリーブも行う必要がない。有利なことに、プラグイン関数が作成する階層は、望むだけ深くまたは広くすることが可能であり、実際的に制限がない。ファイルサーバの従来の階層は、利用可能なディスクスペースによって制限される。
図10A〜図10Fは、プラグイン関数にアクセスしてデータをリトリーブおよび表示するためにユーザが利用しているエンドユーザコンピュータデバイス242〜246を示す。この例において、コンピュータデバイスは、携帯電話であるが、様々なエンドユーザコンピュータデバイスのいずれであってもよい。実際、デバイスは、アプリケーションが、後述のデータをナビゲート、リトリーブ、および、表示するために、RESTインターフェースを用いてサーバ150と相互作用しているコンピュータ248であってよく、その場合、以下のユーザに起因する動作は、アプリケーションによって実行されてよい。以下の説明では、ユーザが指を使ってタッチスクリーン上で選択を行うよう記載されているが、コンピュータマウス、スタイラス、トラックパッド、音声コマンドなど、任意の他の適切な入力デバイスが用いられてもよい。
第1工程702において、ユーザは、認証/許可モジュール312を用いて、適切なサーバ150にログインする。上述のように、エンドユーザデバイスに応じて、ユーザは、コンピュータの標準ブラウザを用いて、コンピュータスクリーン上に表示されたマウント済みのドライブアイコンを用いて、または、WebDAVプロコトルを用いて、サーバ150にアクセスしてよい。このプロトコルは、ほとんどのコンピュータに組み込まれており、モバイルデバイス上でアプリケーションとしても利用可能である。
図10Aは、エンドユーザデバイスが携帯電話760である一実施形態を示しており、携帯電話760上では、アプリケーションWebDAV Nav+762(WebDAVプロトコルの実装例)が実行中であり、よく知られたフォルダとして現れている。この例において、ユーザは、サーバによってすでに認証されている(ユーザ名/パスワードダイアログボックスの提示によるか、それらの項目両方を格納する予め埋められたプロフィールを用いることによる)。アイコン762を選択すると、アプリケーションは、接続できるサーバのリストを提示し、スクリーンは、図10Bに示すようになる。この例では、”Esoptra Demo”という名称のサーバ150への単一の接続764だけが利用可能である。
工程704において、ユーザは、接続764を選択することによってサーバ150の特定のシェア(シェア420など)にアクセスする。この例では、WebDAVプロトコルを用いて、デバイス760とシェア420との間の接続が確立される。別の例では、図5に示したものなど、標準ブラウザに入力されたURLが、直接的にシェアにアクセスしてもよい。シェアは、技術的にはエンドポイント(すなわち、サーバ150のエントリポイント)であるので、いずれもネットワークにおいて同じネームスペースを共有する関数422および424など、そのシェアに関連付けられたプラグイン関数のグループを識別することができる。アプリケーションからサーバへの要求は、シェアのルート(/)に送信されたWebDAVプロトコルのverb”propfind”を用いて、シェアのコンテンツをリスト化する。そのシェアのWebDAVリスナは、そのシェアのプラグイン関数をそれぞれ表すフォルダ名のリストを返す。
次に、工程706において、764を選択したことに応答して、”Esoptra Demo”内のハイレベルフォルダがユーザに表示され、図10Cに示すようになる。選択されると、サーバ150は、そのシェア内で利用可能なプラグイン関数の名称を表示し、それらのプラグイン関数は、ログインした特定のユーザによって利用可能である。3つのハイレベルフォルダEOD768、Words770、および、Photo771が示されている。領域766は、現在の階層を表示しており、すなわち、フォルダ768、770、および、771が”Esoptra Demo”という名称のシェア内にある。これらのプラグイン関数は、図8Aに記載したように、先に配備されているので、サーバは、どのプラグイン関数を表示するかを知っている。特定のシェアのすべてのプラグイン関数が、ログインしてそのシェアに接続するすべてのユーザによって利用可能でなくてもよい。例えば、シェア420へログインするユーザが、関数422へのアクセス権だけを有し、関数424へはアクセスできなくてもよい。ユーザが認証されると、サーバは、ユーザがメンバであるグループのリストを集める。ユーザは、(管理者によって直接割り当てられた)グループの直接のメンバであってもよいし、アイデンティティプロバイダ(例えば、Active Directory)を介した間接的なメンバであってもよい。すべてのグループが知られると、サーバは、最も広いセットの許可(すなわち、各グループに関連付けられた関数のリスト)を集め、読み出し/書き込みアクセスプロパティを含む唯一のセットを計算する。したがって、サーバは、シェアのどのユーザがグループを介して間接的にどのプラグイン関数にアクセスできるのかを判定する。
どのプラグイン関数が特定のユーザに見えるのかを制限できれば、ハイレベルフォルダ内のすべてのファイルおよびフォルダが典型的に、ハイレベルフォルダを開いた任意のユーザに見える従来のファイルサーバよりも有利である。特定のユーザだけにアクセスを制限することにより、或る特定のユーザが関数リストの独自のビューを見ることになり、各関数内で、そのユーザに固有のファイル/フォルダ階層を作成することができる(すなわち、特定のファイルまたはフォルダが、ユーザに固有またはユーザの役割(グループメンバーシップ)に固有であってよい)という利点がある。ユーザが誰であるかによって、より多い、より少ない、または、異なるファイルを見せることができるため、ファイルサーバがユーザにとって特別かつ排他的に作成されたかのように見せることができる。別の利点は、見るべきではないファイルおよびフォルダ名(メタデータ)を単に見えないようにできることである。
この時点で、関数768、770、または、771はどれも、データの収集も、それらが行うようプログラムされた関数の実行も開始しておらず、ユーザが知る限り、これらは、実行する関数ではなく、単に、ユーザが見たいデータを含むフォルダの名称である。もちろん、アイコン768、770、および、771、ならびに、これらのフォルダの名称でさえも、異なる形態を取ってもよく、異なる名称を有してもよく、必ずしも、従来のフォルダまたはファイルのように見える必要はなく、また、対応するプラグイン関数の正確な名称を有する必要もない。しかしながら、ユーザは、フォルダ”EOD”が、様々な証券取引所のサブフォルダを含んでおり、これらの証券取引所のフォルダ内に、様々な株式、債権、および、商品の終値をリストする様々なファイルがあることを知っている。ただし、ユーザは、初めて”Esoptra Demo”764を選択して、フォルダEOD768を見た時に、フォルダEOD768のサブフォルダおよびファイルがまだ存在せず、どのストレージにも格納されていないことに気づく必要はない。
ユーザは、特定の商品の終値を見たいと思うので、工程708でフォルダ768を選択する。選択されると、プラグイン関数EODが工程710で呼び出され、次いで、工程712において、図10Dに関連して後に詳述するように、フォルダ768のサブフォルダがユーザに表示される。ユーザは、ユーザの非常に慣れている動作(フォルダを選択する、ダブルクリックするなどして、フォルダを開く動作)を単に実行しているだけであるが、実際に起きていることは、プラグイン関数が呼び出され、実行を開始し、表示される階層に以前は存在していなかったデータを収集して表示し始めることであるのだと、おそらくは気付かない。ユーザが実際にデータを要求するまで、所望のデータの収集、処理、および、格納が行われる必要がないことが利点である。
図9Bは、ユーザがフォルダを選択した時、ファイルを選択した時、または、ユーザインターフェース上で別の同様の動作を行った時に、プラグイン関数がどのように呼び出されるのかを記載するフローチャートである。ユーザ動作およびコンテキストに応じて、後述のWebDAV要求は、プラグイン関数が処理する以下のコマンドのいずれかを含んでよい。stat、list、get、put、mkdir、remove、および、move。例えば、ユーザは、フォルダをタップすると、フォルダが開かれ、そのコンテンツが表示され、ひいては、コマンド”list”が送信されることを期待する。ユーザは、ファイルを選択またはダブルクリックすると、ファイルが開かれ、そのコンテンツが表示され、ひいては、コマンド”get”が送信されることを期待する。ユーザがファイルをアップロードすると、コマンド”put”が送信され、ユーザがフォルダを作成すると、コマンド”mkdir”が送信され、ユーザがファイルまたはフォルダを削除すると、コマンド”remove”が送信される。ファイルをフォルダにドラッグすることで、コマンド”move”が送信される。ユーザが気づき得ないこと(またはユーザが聞いた可能性のあること)は、プラグイン関数が、従来のものではない他の処理、すなわち、標準的なユーザインターフェースコマンドの一部として通常は期待されない他の処理で、この期待された視覚的ユーザインターフェースを拡張している場合があることである。
ユーザは、図10Cのアイコン768をタップする時、フォルダが開かれ、あらゆるコンテンツが表示されることを望んでおり、したがって、クライアントデバイス760は、そのWebDAVクライアント59を介して、工程716でWebDAV要求を生成する。これは、フォルダEODを開くための要求であり、フォルダEODは、単に”/EOD”であるパスのコンポーネントと共に”list”コマンドを含む。要求は、サーバ150のWebDAVモジュール304で受信され、シェア420にダイレクトされる。工程612で説明したように、シェア420は、ランタイムオブジェクトである。ユーザが、上記のコマンドおよびパスを生成するために、ユーザインターフェース上で動作を実行していることが本明細書で記載されているが、実際には、少なくとも、要求に必要とされるのは、任意のフォルダおよびファイル名、ならびに、関連コマンド(”put”、”get”、”list”など)を含むパスである。ユーザが特定の動作を実行することは、厳密には必要ではない。
すべての要求は、要求行と、関連パス(例えば、”/EOD”)、コマンド(例えば、”list”)、および、1セットのヘッダ(そのうちの1つは、ホスト名またはIPアドレスである)との組みあわせを用いるHTTP要求である。これは、有線で実際に送信されるものである。その前に、アプリケーション(HTTPクライアント)は、シェア(ホスト:URLのポート部分)との接続を確立している。したがって、効果的に、URLは、複数部分に分割される。
次に、工程718において、シェアは、キャッシュ210がこの要求についてこの特定のユーザのこのプラグイン関数に対して有効であるか否か、すなわち、プラグイン関数が実行されるべきか、または、プラグイン関数の最後の実行からキャッシュに格納された結果が再び利用されうるのかを判定する。最初に、シェアは、パス名の第1コンポーネント”EOD”を、そのシェアに関連付けられたプラグイン関数の名称と比較することによって、要求がどのプラグイン関数に宛てられたのかを判定する。第2に、シェアは、キャッシュがこのユーザに対して有効であるか否かを判定する。各ユーザは、キャッシュ内にフォルダを有しており、そのフォルダ内の各ファイルまたはフォルダは、関数によって設定された有効期限タイムスタンプを有するので、シェアは、そのタイムスタンプによって有効性を判定する。また、シェアは、最後の類似の要求から経過した時間に基づいて、キャッシュがこの要求に対して有効であるか否かを判定する。パス(この例では、”/EOD”)に基づいて、シェアは、これが最初の要求であるのか、または、要求が以前になされていたのかを判定する。最初の要求(プラグイン関数が、このパスに対する要求にまだ応答していないことを示す)である場合、または、キャッシュの期限が切れている場合、制御は、工程720に進む。最初1の要求ではなく、かつ、キャッシュが失効していない場合、制御は、工程728に進む。
工程720において、プラグイン関数は、コンピュータおよびオペレーティングシステムに応じて、様々な方法で操作されうる実行を開始する。一実施形態では、プロセスが、サーバ150によってオペレーティングシステム内で最初に作成され、プロセスは、特定のネームスペースに加わり、カーネルを用いて、”jailroot”へのシステムコールがなされる。次いで、プラグイン関数コードは、このプロセス内で実行を開始する。次いで、サーバ150は、関数を呼び出し、ユーザからのコマンド(例えば、”list”)とパス名とを渡す。上で説明したように、プラグイン関数は、任意のタイプのデータ収集、データ処理、または、データ書き込みタスクを実行するように書かれてよい。この例において、EOD関数は、ハイレベルEODフォルダが開かれた時に、証券取引所および商品取引所を含むフォルダを表示するように書かれている。したがって、EOD関数は、”list”コマンドを入力し、図10Dにおいて最終的に表示されるデータを生成する。
”list”コマンドへの応答の生成が完了すると、工程722において、プラグイン関数は、さらに、標準および拡張メタデータを生成する。標準メタデータは、フォルダおよびファイルに関連するメタデータ、すなわち、アイテムがフォルダであるかファイルであるか、日付、時刻など、応答を見る時にデバイスのユーザに有用な典型的な情報、を含む。拡張メタデータも生成され、拡張メタデータは、この特定の要求(パスおよびコマンド)のためのキャッシュがどれだけの期間有効かについての期限を含む。換言すると、”/EOD,list”は、”EOD,stat”とは異なる要求である。
あるタイプの拡張メタデータは、フラグ、タイムスタンプ、および、その他のメタデータであり、最近生成されたデータが特定のユーザのためのキャッシュ内で有効である期間を示す。例えば、図10Dは、3つの異なるフォルダを含む応答を示しており、EOD関数の開発者が毎週様々な取引所をリストするための関数をプログラムした場合には、期限は、1週間であってよい。したがって、この工程で期限メタデータを生成することにより、サーバ150は、キャッシュがまだ有効であるか否かを、工程718で判定できる。第2のタイプの拡張メタデータは、キャッシュ内のファイルに配置されたフラグに関連しており、ファイルがユーザによって編集可能であるか否かまたは除去可能であるか否かを示す。かかるメタデータは、プラグイン関数に有用であり、プラグイン関数がユーザコマンドを解釈するのに役立つ。これらのフラグは、ブラウザウェブUIで用いられ、UIをレンダリングする、もしくは、ファイルまたはフォルダに対して許可された動作を無効にする(グレイメニューアイテム)のに役立つ。1つの重要なフラグは、アイテムが仮想ファイル(すなわち、関数によって所有されるファイル)である時に設定される「仮想ビット」であり、アイテムがユーザによってアップロード(所有)されたファイル(すなわち、非仮想ファイル)である時には消去される。
次に、工程724において、プラグイン関数は、サーバ150のための自身の応答(生成されたメタデータを含む)をフォーマットする。プラグイン関数は、それが望む任意のタスクを実行できる場合でも、特定のコマンド(”list”コマンドなど)に応答する場合、そのコマンドへの応答を特定のフォーマットにする。この例において、”list”コマンドへの応答は、名称のリスト、名称がファイルであるかフォルダである、および、メタデータ(日付、時刻など)を提供する。具体的な一実施形態において、このリストは、JSONアレイとして提供される。
工程726において、サーバは、キャッシュ210にこの応答を保存する。この時点で、応答は、メモリ内およびキャッシュ内に存在しているが、キャッシュが有効である限りにおいてのみ存在しうる。応答は、サーバがキャッシュにスペースが必要であると判断した時に、キャッシュから除去されてよい。応答(または任意のデータ)が、キャッシュの内部フォーマットで格納され、応答は、一実施形態では、一意識別子と、ファイル、サブフォルダ、および、その他の項目メタデータの名称を含む1セットのメタデータファイル(”ロースタ(roster)”ファイル)(フォルダごとに1つずつ)とを備えたオブジェクトのコレクションである。ロースタファイルも、一意識別子を備えたオブジェクトである。この内部フォーマットは、バックエンドオブジェクトストアリポジトリでの利用を容易にするために特に作成されるが、もちろん、その他の内部フォーマットが用いられてもよい。キャッシュおよびオブジェクトストアについては、後に詳述する。
次いで、工程730において、サーバは、クライアントデバイスにこの応答を中継して返し、この時点で、デバイスのスクリーンは、図10Dに示すようになる。領域766は、閲覧中の現在の階層をまだリストしており、アイコン772は、親フォルダ768であること、および、1つ上のレベルへ移行できることを表し、3つのサブフォルダ、すなわち、Amsterdam Commodities(アムステルダム商品取引所)774、American stock exchange(アメリカン証券取引所)、および、Hong Kong stock exchange(香港証券取引所)、が表示されている。ここで、工程728に戻ると、キャッシュが有効であった場合、工程728において、サーバは、キャッシュ内のデータからこの応答を生成することができ、制御は、キャッシュからの同じ応答がクライアントデバイスに表示される工程730に進む。最後に、プラグイン関数は、アイコン768へのユーザタップに応答してその関数を実行したので、工程732において終了する。
ここで、図9Aの工程712に戻ると、ユーザがアイコン768をタップしたことに応答して、サブフォルダが、図10Dに示すようにデバイス上に表示される。プラグイン関数がこれらの3つのフォルダを作成したところであり、それらのフォルダが表示されたところであるが、この時点では、フォルダはコンテンツを全く持たないことに注意されたい。換言すると、コンテンツは、プラグイン関数が、ユーザ動作に応答して再び呼び出された時に作成される。この例を単純化するために、フォルダ774は、それが属する実際の取引所(すなわち、ユーロネクスト・アムステルダム)の代わりに表示されている。より複雑な例においては、アイコン768をタップすると、フォルダ”EuroNext Amsterdam(ユーロネクスト・アムステルダム)”も表示され、これがタップされると、フォルダ”Amsterdam Commodities”774を表示する。
次に、工程740において、ユーザは、アムステルダム商品取引所の終値を見ようとし、アイコン774をタップする。ユーザがこのアイコンをタップすると、工程742において、プラグイン関数が、図9Bに記載したように再び呼び出される。ただし、今回は、WebDAV要求が、パス名”/EOD/Amsterdam Commodities”と、フォルダを開くためのコマンド(すなわち、”list”コマンド)」とを含み、それらは両方ともプラグイン関数に提供される。図9Bに記載したように、キャッシュがその要求に対して有効である場合、応答はキャッシュから生成され、そうでない場合、プラグイン関数が応答を生成する。
図10Eは、ユーザがアイコン774をタップしたことに応答したデバイス760のディスプレイを示す。工程744は、このサブフォルダのコンテンツを表示し、図に示されているのは、このサブフォルダ内に含まれる2つのファイル、すなわち、CSVフォーマットのファイル778およびTXTフォーマットのファイル780である。ファイル778は0バイト782を有しており、この時点でそのファイル(および他方のファイル)が空であることを示していることに注意されたい。各ファイルの名称およびタイプが表示されていても、プラグイン関数がこれらのファイルに投入するためのデータをまだ生成もリトリーブもしていないので、これらのファイルは空である。
次に、工程746において、ユーザは、これらのファイルの1つを、そのコンテンツを見たいので選択する。ユーザは、任意の適切なインターフェース(タッチスクリーン上の指、コンピュータマウス、トラックパッドなど)を用いてファイルを選択し、当技術分野で周知のように、デバイス760は、ユーザが、ファイルを開くのにどのアプリケーションを用いるのかを選択することを可能にするインターフェースを提供する。したがって、工程748において、デフォルトアプリケーションが、デバイスによって提供されてもよいし、ユーザが、開くのに適切なアプリケーションを選択してもよい。例えば、ファイルの選択時に、デフォルトテキストエディタが、自動的にファイルを開いてもよいし、ユーザが、標準的なインターフェースウィンドウ(”Open With”ウィンドウなど)を用いて、より高度なアプリケーション(CSVフォーマットを必要とする”Vizable”など)を選択することを許容されてもよい。いずれの場合でも、アプリケーションが開かれ、(すでに実行中でなければ)実行を開始する。
次に、工程750において、アプリケーションは、ファイルコンテンツの要求をトリガすることによって、選択されたファイル778のコンテンツを要求し、プラグイン関数は、図9Bに記載したように、工程752で再び呼び出される。ただし、今回は、WebDAV要求が、パス名”EOD/Amsterdam Commodities/history.CSV”と、ファイルコンテンツを読み込むためのコマンド(すなわち、”get”コマンド)とを含み、それらは両方ともプラグイン関数に提供される。図9Bに記載したように、キャッシュがこの要求に対して有効である場合、応答はキャッシュから生成され、そうでない場合、プラグイン関数が応答を生成する。したがって、ファイルのコンテンツがまだ生成またはリトリーブされていない場合、プラグイン関数は、この時にファイルコンテンツを生成またはリトリーブする。フォルダコンテンツをリストした上記の工程710および742とは異なり、工程752は、”get”コマンドを含んでおり、これは、プラグイン関数が、CSVフォーマットで工程724において応答をフォーマットしてよく、工程739においてクライアントに返される応答は、ファイルの実際のコンテンツになることを意味する。この例において、EODプラグイン関数は、ファイル778〜780の親フォルダがタップされた時にそれらのファイルを提示するように書かれており、クライアントデバイス上の適切なアプリケーション(”Vizable”など)がファイルフォーマットを利用してデータをレンダリングできるように、ファイル778が選択された時にCSVフォーマットでファイル778のデータを生成するように書かれている。この例において、関数は、ファイルを生成するためにデータを収集する必要があり、開発者によってプログラムされたように、データリポジトリにアクセスすることによってそれを行う。
図10Fは、ユーザがファイル778をタップしたことに応答したデバイス760のディスプレイを示す。工程754において、工程748で開かれたアプリケーションは、工程784に示すように、ファイルのコンテンツを表示する。列786は日付をリスト化し、列788は、特定の商品についてのその日の終値をリストする。ファイルデータ784は、そのデータが工程752でプラグイン関数によって生成またはリトリーブされるまで、ファイル778内には存在しなかったことに注意されたい。変形例において、プラグイン関数は、フォルダ774がタップされた時にデータをリトリーブしてファイル784を作成し、そのキャッシュ内にファイル784を格納するようにプログラムされてもよい。
プラグイン関数を用いたデータの書き込み
図11A〜図11Cは、データをアップロードした後にそのデータを処理するためにプラグイン関数が利用される一実施形態を記載するフローチャートである。この例では、プラグイン関数”Words”が、前もって作成され、リポジトリ234に格納されており、上述のようにサーバコンピュータ132内に配備されている。関数Wordsは、フォルダをユーザに提示し、テキストファイルがそのフォルダにアップロードされた時に、そのテキストファイルを格納し、単語頻度を計算し、結果を含む2つの新たなファイルを作成する。上述のように、本発明の1つの利点は、ユーザの知る限り、ユーザが行うことは、フォルダを開いてファイルを追加することだけであり、すなわち、プラグイン関数が裏で実際に実行して、フォルダおよびファイルをオンザフライで作成し、リアルタイムでユーザにデータを表示していることに、ユーザが気付かないことである。フォルダ内に特定のファイルが存在するようにユーザには見えるが、これらのファイルは、ユーザがファイルを追加してプラグイン関数が実行するまで作成されない。
図11A〜図11Cは、データをアップロードした後にそのデータを処理するためにプラグイン関数が利用される一実施形態を記載するフローチャートである。この例では、プラグイン関数”Words”が、前もって作成され、リポジトリ234に格納されており、上述のようにサーバコンピュータ132内に配備されている。関数Wordsは、フォルダをユーザに提示し、テキストファイルがそのフォルダにアップロードされた時に、そのテキストファイルを格納し、単語頻度を計算し、結果を含む2つの新たなファイルを作成する。上述のように、本発明の1つの利点は、ユーザの知る限り、ユーザが行うことは、フォルダを開いてファイルを追加することだけであり、すなわち、プラグイン関数が裏で実際に実行して、フォルダおよびファイルをオンザフライで作成し、リアルタイムでユーザにデータを表示していることに、ユーザが気付かないことである。フォルダ内に特定のファイルが存在するようにユーザには見えるが、これらのファイルは、ユーザがファイルを追加してプラグイン関数が実行するまで作成されない。
図12A〜図12Fは、プラグイン関数にアクセスして、データを追加、リトリーブ、および、表示するためにユーザが利用しているエンドユーザコンピュータデバイス242〜246を示す。この例において、コンピュータデバイスは、タブレットコンピュータであるが、様々なエンドユーザコンピュータデバイスのいずれであってもよい。実際、デバイスは、アプリケーションが、後述のデータをナビゲート、アップロード、リトリーブ、および、表示するために、RESTインターフェースを用いてサーバ150と相互作用しているコンピュータ248であってよく、その場合、以下のユーザに起因する動作は、アプリケーションによって実行されてよい。以下の説明では、ユーザが指を使ってタッチスクリーン上で選択を行うよう記載されているが、コンピュータマウス、スタイラス、トラックパッドなど、任意の他の適切な入力デバイスが用いられてもよい。
最初の工程802において、ユーザは、工程702〜704で上述したように、サーバ150のシェアにログインおよびアクセスする。この例では、WebDAV Nav+アプリケーションを用いたナビゲーションを説明しているが、コンピュータ上の標準ブラウザが、ナビゲーションを実行するために用いられてもよい。工程804において、シェアのハイレベルフォルダ(プラグイン関数を表す)がユーザに表示され、ユーザがそれらのフォルダの内の1つを選択し、そのフォルダのコンテンツが表示される。この工程は、以下の変更を加えて工程706〜712について上述したように実行されてよい。
図12Aは、ハイレベルフォルダの表示後で、ユーザがフォルダの内の1つを選択する前のタブレットコンピュータ860を示す。EODフォルダ768、Wordsフォルダ770、および、Photoフォルダ771が示されており、それぞれのプラグイン関数を表している。図12Bは、ユーザがアイコン770をタップし、プラグイン関数が実行されて、そのフォルダのコンテンツを返した後のタブレット860を示す。この例において、この時点でのフォルダは空であり、アイコン850は、親フォルダであること、および、フォルダ階層の1つ上のレベルへ移行できることを表す。この例では、ファイルが、開かれたばかりのフォルダ770にアップロードされる。しかしながら、開いたフォルダが文脈を提供するのだが、ファイルをアップロードする前にフォルダを開くことは必須ではない。
図12Cは、工程806においてユーザがフォルダ770にアップロードするファイルをどのように選択するのかを示す。ファイルの選択は、標準ブラウザを用いてアップロードされるローカルファイルにナビゲートする、ファイルをクリックまたはドラッグする、もしくは、任意のブラウザまたはオペレーティングシステム内にあるダイアログボックスを用いる、など、様々な方法で実行されてよい。ファイルは、タブレットコンピュータにローカルであってもよいし、任意のリモートサーバから来てもよい。この例において、ユーザは、リモートファイルを選択するための特定のサービス(iCloudドライブ、Googleドライブ、OneDrive、Dropboxなどであるが、そのウィンドウは示されていない)を選択するために、アイコン852を選択し、Dropboxサービスを選択した結果として、ダイアログボックス854がスクリーン上に現れている。この例において、Dropboxアカウント内には唯一、ファイル”Works Shakespeare.txt”853があり、ユーザは、指、マウス、スタイラスなどを用いてそれを選択する。
選択されると、スクリーン上でナビゲートするために用いられるアプリケーション(標準ブラウザ、または、この例におけるWebDAVNav+アプリケーションなど)は、工程808でファイルをWordsフォルダ770に書き込む。アプリケーションは、ファイルのコンテンツを読み出し、”Words/Works Shakespeare.txt”である関連パス名へのそれらのコンテンツの”put”動作をトリガする。次いで、パス名および”put”コマンドは、サーバ150によって受信され、工程810でプラグイン関数”Words”にダイレクトされる。
図11Bは、ユーザが”put”コマンドなどでユーザインターフェースを用いてアップロードされるファイルを選択した時に、プラグイン関数がどのように呼び出されるかについて記載するフローチャートである。ユーザが(例えば、選択する、ドラッグする、ダイアログボックスを用いるなどして)ファイルをフォルダ内に入れる時、そのユーザは、ファイルがそのフォルダに移動または書き込まれることを期待し、したがって、この例では、コマンド”put”が送信される。それに応じて、クライアントデバイス860は、そのWebDAVクライアントを用いて、工程814でWebDAV要求を生成する。これは、ファイル853をWordsフォルダに配置するための要求であり、その要求は、上記のパス名と共に”put”コマンドと、ファイルの実際のコンテンツとを含む。要求は、サーバ150のWebDAVモジュール304で受信され、プラグイン関数”Words”を含むシェア430にダイレクトされる。ユーザが、上記のコマンドおよびパスを生成するために、ユーザインターフェース上で動作を実行していることが本明細書で記載されているが、実際には、少なくとも、要求に必要とされるのは、任意のフォルダおよびファイル名、ならびに、関連コマンド(”put”、”get”、”list”など)を含むパスである。ユーザが特定の動作を実行することは、厳密には必要ではない。
次に、工程816で、サーバは、(例えば、工程818などで)後の要求で用いるために、(フロントサイドキャッシングを用いて)受信ファイルをそのキャッシュ210に書き込む。ファイルは、ユーザによってアップロードされるまで、実際にはキャッシュ内に存在しない。工程818において、プラグイン関数”Words”は、実行を開始し、標準的な入力を用いて工程820においてサーバを介してキャッシュからファイルを読み出す。工程822において、関数は、任意選択的に、その選択の格納位置にアップロードしたファイルを書き込む。図2に示したように、プラグイン関数の開発者は、開発者がコードを書き込む人物であるため、所望の任意の格納位置40〜48(およびその他)に書き込んでよい。この例において、開発者は、2つの新規ファイルをさらに含む新規フォルダ(”Works Shakespeare”)の中にそのファイルを配置したいとも思っているため、新規フォルダの中のストレージにそのファイルを書き込む。この新規フォルダにファイルを書き込むのは開発者の選択であり、ファイルは、この時点で(バックサイドキャッシング、プラグイン関数ストレージを用いて)キャッシュに存在する。
もちろん、開発者は、任意の数のフォルダ内にファイルをネストさせる、任意の数の新規フォルダおよび新規ファイルを作成するなど、このファイルの格納をどのように操作したいのかに関して完全な決定権を有しており、開発者は、新規フォルダの中にファイルを配置することも任意の新規ファイルを作成することもなしに、単にファイルをディスクに書き込んでもよい。
工程824において、プラグイン関数は、すべての単語の頻度分析を生成するためにファイル内のデータを処理して、2つの新規ファイル(CSVファイルおよびPDFファイル)を作成し、各ファイルは、オリジナルファイル内の各単語の頻度を含む。次いで、工程826において、関数は、これら2つの新規ファイルをオリジナルテキストファイル853も格納された新規フォルダ内の格納位置に書き込む。開発者は、異なる位置にこれら2つの新規ファイルを書き込むよう選んでもよい。この例において、プラグイン関数の開発者は、オリジナルファイルの書き込み時に、オリジナルファイルの処理および2つの新規ファイルの作成を実行するよう選択した。もちろん、2つの新規ファイルの作成は、開発者によって選択された別の時、例えば、読み込み時、(工程746〜754で行われたように)ユーザが表示されるファイルを選択した時に、行われてもよい。通例、新規ファイルを作成するためのオリジナルファイルまたはデータの処理は、オリジナルファイルが書き込まれた後またはユーザがオリジナルファイルの読み込みを要求した時に行われてよい。図10A〜図10Fの例では、データが日々変化することから、開発者は、ユーザがファイルを要求した時にのみファイルのコンテンツを生成するよう選択している。現在の例において、新規ファイル内の頻度は変化しないので、オリジナルファイルが書き込まれた時に、それら2つの新規ファイルを作成するのが適切である。
次に、工程828において、サーバは、書き込みが成功したことを示す応答を工程808のアプリケーションに送信する。通例、この応答は、成功を示すコードまたは発生した特定のエラーを示すコードからなる。工程830において、プラグイン関数は、そのタスクを実行し終わったため終了する。ここで、図11Aに戻ると、工程834において、アプリケーション(WebDAV Nav+アプリケーションまたはブラウザのいずれか)は、フォルダ”Words”を、そのフォルダのパス名とコマンド”list”とを含む要求をトリガすることによってリフレッシュする。通例、ブラウザは、現在のフォルダをリフレッシュするために、”put”要求後に”list”要求を実施するが、各ブラウザが、この機能を異なって実施してもよい。工程834は、パスおよび”list”コマンドについて図9Bに記載したように実行される。
図12Dは、リフレッシュ要求後のタブレット860を示しており、現在の”Words”フォルダが、プラグイン関数の作成した新規フォルダ”Works Shakespeare”855を含むことを示す。ユーザは通常、ファイル853が現れることを期待するが、この例では、プラグイン関数は、そのファイルを書き込むだけではなく、2つの新規ファイルを作成して、新規フォルダ855にそれらのすべてのファイルを配置していることに注意されたい。次に、工程836において、ユーザは、結果を見たいと思い、デバイス上のフォルダ855を選択する。この動作は、図9Bで説明したように、パス名”Words/Works Shakespeare”および”list”コマンドを含む別の要求をトリガし、その結果として、デバイス860上でこの新規フォルダのコンテンツを表示する工程838につながる。
図12Eは、工程836および838の後のデバイス860のディスプレイを示す。プラグイン関数が格納位置に格納した3つのファイル、すなわち、オリジナルのアップロードされたファイルであるファイル853、CSVフォーマットの頻度であるファイル862、および、PDFフォーマットの頻度であるファイル864、が表示されている。866および867において、これらのファイル両方が、具体的なサイズを有しており、これは、それらが実際に存在してディスクに書き込まれたことを意味し、ファイルのファイル名が現れているが、ユーザがファイルの1つを選択するまでファイルコンテンツは実際には存在しなかった図10Eの例とは異なることに注意されたい。開発者は、ファイルがユーザによって選択された時にのみ、これらのファイル862〜864を作成するよう選択してもよい。
次に、工程840において、ユーザは、ファイル864を見たいと思い、ユーザの指を用いてそのファイルを選択する。その選択時に、図9Bで説明したように、パス名”Words/Works Shakespeare/Works Shakespeare.pdf”および”get”コマンドを含む別の要求がトリガされ、その結果として、デバイス860上でその新規ファイルのコンテンツを表示する工程842につながる。図12Fは、そのファイルの頻度の部分的なリストを示す。
プラグイン関数を用いたその他のデータ読み込みおよびデータ書き込みの例
プラグイン関数を用いたデータの読み込みの他の例は、以下を含む。SQLデータベースクエリから全体的または部分的にExcelファイルを作成する工程、集められたフラグメント、画像、および、テキスト検索から提示文書を作成する工程、ならびに、ストリームされるビデオを静止画mp4ファイルから作る工程。プラグイン関数を用いてデータを書き込む別の例は、情報をファイルに追加することを可能にする。例えば、インボイスを表すファイルがドラッグされ、プラグイン関数を表すコンピュータデバイス上のフォルダ(フォルダ770など)にドロップ(または他の方法でアップロード)された時に、プラグイン関数は自動的に、タイムスタンプをそのファイルに追加する。タイムスタンプは、ファイルに直接挿入されてもメタデータとして追加されてもよく、次いで、ファイルは、オブジェクトストアにオブジェクトとして格納され、格納されたオブジェクトは、後に、時刻と日付で検索できる。また、プラグイン関数は、インボイスを異なるフォーマットに変換する、そのデータを解析する、インボイスをカテゴリで分けて異なるフォルダに格納する、などしてもよい。
プラグイン関数を用いたデータの読み込みの他の例は、以下を含む。SQLデータベースクエリから全体的または部分的にExcelファイルを作成する工程、集められたフラグメント、画像、および、テキスト検索から提示文書を作成する工程、ならびに、ストリームされるビデオを静止画mp4ファイルから作る工程。プラグイン関数を用いてデータを書き込む別の例は、情報をファイルに追加することを可能にする。例えば、インボイスを表すファイルがドラッグされ、プラグイン関数を表すコンピュータデバイス上のフォルダ(フォルダ770など)にドロップ(または他の方法でアップロード)された時に、プラグイン関数は自動的に、タイムスタンプをそのファイルに追加する。タイムスタンプは、ファイルに直接挿入されてもメタデータとして追加されてもよく、次いで、ファイルは、オブジェクトストアにオブジェクトとして格納され、格納されたオブジェクトは、後に、時刻と日付で検索できる。また、プラグイン関数は、インボイスを異なるフォーマットに変換する、そのデータを解析する、インボイスをカテゴリで分けて異なるフォルダに格納する、などしてもよい。
プラグイン関数への入力の提供
上記で言及し図示したように、本発明の様々な実施形態は、従来のファイル/フォルダユーザインターフェースを用いて、ユーザに単純でなじみのあるインターフェースを提供すると共に、特定のユーザインターフェースを実装する必要性からプラグイン関数の開発者を解放する。ファイル/フォルダインターフェースの利用は、ユーザがプラグイン関数に引数を入力する機会をあまり提供することがない。
上記で言及し図示したように、本発明の様々な実施形態は、従来のファイル/フォルダユーザインターフェースを用いて、ユーザに単純でなじみのあるインターフェースを提供すると共に、特定のユーザインターフェースを実装する必要性からプラグイン関数の開発者を解放する。ファイル/フォルダインターフェースの利用は、ユーザがプラグイン関数に引数を入力する機会をあまり提供することがない。
したがって、さらなる実施形態は、ユーザがプラグイン関数に引数を提供することを可能にする。図8Bに関して上述した1つの技術は、デーモンモードでプラグイン関数を起動して、関数が連続的に実行することを可能にするための技術であり、これは、プラグイン関数だけのためのユーザインターフェースを実装するプラグイン関数に固有のマイクロウェブサーバを提供するものである。また、デーモンモードの利用は、プラグイン関数が、さらなる利点となるデータベースへの連続的な接続を維持することも可能にする。(すぐ下に記載する)別の技術は、実際にプラグイン関数への引数である名称を有するフォルダを作成する技術である。ユーザが機能的に重要な名称でフォルダを作成するのを可能にすることは、プラグイン関数の機能を強化すると共にエンドユーザがユーザの環境をカスタマイズすることを可能にする本発明の重要なデフォルトのユーザインターフェース要素である。
図13は、引数がフォルダの名称を介してプラグイン関数に渡される一実施形態を記載するフローチャートである。この例では、プラグイン関数”Photo”が、前もって作成され、リポジトリ234に格納されており、上述のようにサーバコンピュータ132内に配備されている。関数Photoは、任意の写真、ビデオなどをアップロード、タグ付け、格納、ならびに、後の検索、ダウンロード、および、表示に利用可能にすることのできるフォルダをユーザに提示する。上述したように、本発明の1つの利点は、ユーザの知る限り、ユーザが行うことは、写真をアップロードすること、フォルダを開くこと、フォルダを作成することなどだけであり、プラグイン関数が裏で実際に実行して、写真にタグ付けし、それらを格納し、検索語を作成して、写真を検索していることに、ユーザが気付かないことである。特定の写真が実際に特定のフォルダ内に存在するようにユーザには見えるが、ユーザがフォルダを選択するまで写真は検索および発見されず、ユーザが写真を選択するまで写真はリトリーブされない。
図14A〜図14Dは、プラグイン関数にアクセスして、データを追加、リトリーブ、および、表示するために用いられる任意のエンドユーザコンピュータデバイス242〜246を示す。この例において、コンピュータデバイスは、携帯電話であるが、様々なエンドユーザコンピュータデバイスのいずれであってもよい。ユーザは、ユーザの電話760でベルギーのヘールの町で写真を撮り、後にリトリーブできるようにその写真をストレージにアップロードしようとする。もちろん、ユーザが、アップロードされた数百または数千(もしくはそれより多く)の写真を撮影していてもよいし、任意の数の他のユーザが、任意のユーザによる後のリトリーブに向けて同じ格納位置に格納されるようにPhoto関数を用いて写真をアップロードすることも可能である。
図14Aは、ユーザが利用可能な関数768、770、および、771を示す携帯電話760の図を示す。関数Photo771は、ユーザにとって、任意の数の写真、ビデオ、または、同様のファイルをドラッグ、ドロップ、アップロードなどできるなじみのあるフォルダに見える。もちろん、別の実施形態において、任意のタイプのデジタルオブジェクト(文書など)が、本明細書で記載の技術を用いて後にリトリーブするためにフォルダ771に配置されてもよい。ユーザは、ユーザがフォルダ内に写真を配置した後にそれらを検索する時に、バックグラウンドでプラグイン関数が実行していることに気付く必要はない。デバイス760または別のコンピュータデバイスによって提供される標準ユーザインターフェースを用いて、フォルダ771に写真を配置するために、ドラッグ、ドロップ、選択など、様々な技術のどれがユーザによって用いられてもよい。具体的な一実施形態において、ユーザは、ログインして、ハイレベルフォルダを表示し、フォルダ771を選択し、ヘールの写真をそのフォルダにアップロードするために、図11Aの工程802〜824を実施してよい。写真は、ユーザの電話、Dropboxなどのアーカイブ、または、任意の他のリモート位置に由来してよい。
工程802〜824は、この例のために変形されてよい。ユーザは、写真をフォルダ内に配置する前に(上述したように)フォルダ771を最初に開いてもよいし、図14Aに示すような状態のフォルダ771に、単にドラッグまたは他の方法で写真を配置してもよい。特に、プラグイン関数”Photo”が入力写真を処理する工程824は、以下のように変形される。関数は、写真を受信し、位置(例えば、X−Y座標、経度、緯度など)のようなメタデータと、タイムスタンプとを抽出する。次に、関数は、バックエンドサービス(Google位置サービスなど)に位置データを送信し、バックエンドサービスは、位置データを取り込んで、写真が撮られた場所(例えば、”ベルギーのヘール”)を示す文字列を返す。次いで、関数は、この場所の文字列を取り込んで、オブジェクトストア220内に写真と共にメタデータとして格納する。この時点で、写真は格納されており、以下で記載するように検索およびリトリーブに利用可能である。もちろん、プラグイン関数”Photo”は、開発者の望む任意の他の処理工程を取ってもよく、同じ方法で(少なくとも)数千枚の写真を格納してもよい。そして、プラグイン関数によって生成またはリトリーブされた任意のその他の様々なメタデータが、写真またはその他のデジタルオブジェクトと共に格納されてもよい。
後に、ユーザ(または任意のその他のユーザ)が、写真の撮影場所を示す検索語を用いて、関数”Photo”によって格納された全写真を検索したくなる。したがって、ユーザは、工程702〜706または802〜804に記載したように、ログインしてユーザのデバイスで利用可能なフォルダ(すなわち関数)を見るための工程を行う。図14Aは、ユーザのデバイス760がフォルダPhoto771をどのように表示するのかを示す。
図13の工程902において、ユーザは、写真を見つけるための検索語を提供するために、フォルダPhoto771内の適切なフォルダにナビゲートする。ユーザは、図14Aのフォルダ771を選択し、そのファブフォルダが、工程708〜712で上述したのと同様に表示される。図14Bは、フォルダ”Photo”が選択された後にデバイス760がどのようになるのかを示しており、フォルダ920(1つ上のレベルに移行するために用いられる)および子フォルダ”Queries”922が表示されている。関数の開発者は、フォルダ”Photo”内に永久的に存在し、その名称が検索語として用いられるサブフォルダを保持するように、フォルダ”Queries”を作成している。プラグイン関数”Photo”は、任意のかかるサブフォルダの名称が実際に、写真を見つけるために用いられる検索語であることを知っている(むしろ、開発者が知っている)。もちろん、開発者は、フォルダ”Queries”を省いて、ユーザがフォルダ”Photo”の中にサブフォルダを直接作成することを可能にしてもよい。
次に、工程904において、ユーザは、ベルギーで撮影した任意の写真を見つけるために、ストレージに保存されたすべての写真の検索の実行しようとする。したがって、ユーザは、”Create Folder(フォルダの作成)”オプション926を選択するために、オプションドロップダウンメニュー924を開く。新規フォルダが、デバイス、オペレーティングシステム、および、プレゼンテーションアプリケーションに応じて、様々な標準ユーザインターフェース技術を用いて特定のコンピュータデバイス上で作成されてよい。ユーザは、ブラウザ内のボタンをクリックする、オペレーティングシステム内、または、ディスクドライブアイコン上、フォルダ内で”右クリック”を実行する、などしてよい。この例において、ユーザは、メニュー924を見るために、WebDAV Nav+アプリケーション内のオプションを選択する。ユーザは、”Queries”フォルダを開いた後にその中に新規フォルダを作成するようにも選択してもよいが、この例の文脈では、任意の新規フォルダがフォルダ922内に作成される。
ユーザがオプション926を選択すると、ユーザが検索語を入力することを可能にする空白のサブウィンドウ928が開く。ユーザは、格納された写真すべてに検索語として用いる新規サブフォルダの名称として文字”bel”をタイプする。次いで、ユーザは、「リターン」を押すか、または、他の方法で入力を終え、”Create Folder”コマンドおよび名称”bel”が、プラグイン関数”Photo”に送信される。
工程710、716〜732、および、712において、”list”コマンドがパスと共にプラグイン関数に送信されたのと同様に、工程906において、クライアントデバイスは、パス”Photo/Queries/bel”と共に”mkdir”コマンドをプラグイン関数に送信し、プラグイン関数は、このコマンドおよびパスを、”bel”と名付けた”Queries”の下の新規フォルダを作成する要求として解釈する。また、関数は、文字列”bel”が検索のための引数としても用いられることを知っている。したがって、サーバによって生成される応答は、”Queries”の下のこの新規サブフォルダのリスト化である。図14Cは、この時点でデバイス760がどのようになるか、すなわち、新規サブフォルダ”bel”932を表示する様子を示す。そのユーザに関する限り、サブフォルダ”bel”は今、文字列”bel”を含む場所で撮影されて以前に格納されたすべての写真を含む。ただし、具体的な一実施形態において、プラグイン関数が行ったことは、サブフォルダ”bel”を作成してそのキャッシュに格納したことだけである。サブフォルダは、ユーザがまだサブフォルダを選択またはその他の方法で開いていないので、まだ写真を全く含まない。しかしながら、別の実施形態において、このサブフォルダには、以下に記載するように、サブフォルダが作成された時にこの工程で適切な写真が投入されてもよい。例えば、プラグイン関数は、(ユーザがサブフォルダを開く前に)サブフォルダ”bel”が作成された時に写真を検索してリトリーブし、そのキャッシュに写真を格納する。この実施形態は、ユーザが開かない写真をリトリーブしうるので、効率が悪い。
工程908において、ユーザは、ベルギーで撮影したすべての写真を見たいと思い、したがって、フォルダ932を選択する。このフォルダが開かれ、プラグイン関数が工程910で再び実行し、プラグイン関数”Photo”に独特な方法で引数”bel”を用いて処理が行われることを除けば、工程740〜744に関して上述したのと同様に、結果が返される。関数が実行され、パス”photo/Queries/bel”およびコマンド”list”を受信すると、検索語”bel”を含むメタデータの場所文字列を有するストレージ内のすべての写真の名称を返さなければならない、したがって、サブフォルダの名称を引数として用いて写真の名称を返さなければならないことを知る。関数は、開発者が関数をどのようにプログラムしたかに応じて、写真の名称、サムネイル、JPEGファイル全体、などを返してよい。
好ましくは、関数は、名称のリストを提示するのに十分な情報を返すが、必要な時に後で写真をすばやくリトリーブするために、写真のコンテンツアドレス(UUID−汎用一意識別子)またはURLなど、何らかの内部情報も格納してよい。したがって、プラグイン関数は、サムネイルなど、写真についての中間(メタ)情報を格納できるが、返されるリストは、名称、サイズ、修正日またはPOSIXモードフラグ、保存時刻、および、リソースなど、基本的なプロパティを含むだけでよい。変形例において、関数の開発者によっては、関数が、”bel”引数に応答して実際の写真を返すことが可能であるが、これは必須ではない。
したがって、関数は、上述したベルギー(Belgium)のヘールで撮影された写真の名称と、検索語を含む任意のその他の写真(ベラルーシ(Belarus)で撮影された写真など)の名称とを返す。ユーザは、サブフォルダ”Belgium”と名付けることによって、ベルギーでの写真だけを排他的に検索できる。フローは、写真名がクライアントデバイスに返されると終了する。図14Dは、写真の名称が返されるとデバイス760がどのようになるのかを示す。図示されていないが、ユーザは、この時点で、任意のファイルを開く技術(図10Eまたは12Eに関して上述した技術など)を用いて、ダウンロードするかまたは表示のために開く写真934を選択してよい。したがって、写真は、実際に選択されるまでユーザデバイスにダウンロードされる必要がなく、選択された時点で”get”が実行される。
もちろん、ユーザがフォルダ(または、さらに言うなら文書)を作成し、プラグイン関数の利用および実行の際にメタデータとして機能的に利用される名称をそれに与える多くの他の状況がある。例えば、周知のIMDB国際ムービーデータベースへの公共のデータインターフェースを用いる関数”iMOV”においては、図13および図14に記載したのと同様のメカニズムが用いられる。ユーザが、”Bear”という名称のフォルダを作成すると、タイトルにテキスト文字列”Bear”を有するすべてのムービーのリストが、中に表示される。あるいは、名称”PDF”を有するフォルダを備えた関数が、フォルダ内にドロップされたファイルをPDFファイルへ変換するか、または、出力をPDFファイルへ変換し、このように、プラグイン関数への引数として”PDF”を利用する。
別の技術では、キー/値ペアの形態で(対象のフォルダ内の隠しファイルに格納された)関連メタデータプロパティを有するフォルダのエンドユーザによる作成を可能にする。プラグイン関数”Vacations”内に、ユーザは、”2016”という名称のフォルダを作成する(工程902〜906を用いて、パス”/vacations/2016”およびコマンド”mkdir”を送信する)。この例において、関数”Vacations”は、ユーザによって指示されたように新規フォルダを作成し、ユーザによってフォルダにドラッグされた写真を受け入れ、写真にメタデータプロパティを追加し、その後、その写真をそのメタデータプロパティと共にオブジェクトストアに格納するようにプログラムされる。
新規フォルダ”2016”がユーザに返されると、マイクロウェブサーバが、工程644〜652のように作成され、ユーザは、その新規フォルダのためのメタデータプロパティ”vacation type”の値(”beach”など)を入力することを許容され、すなわち、キー/値ペアは、”vacation type?/beach”である。したがって、関数は、フォルダ”2016”に関連する値”beach”を提供される。したがって、任意のオブジェクト(例えば、写真)がそのフォルダにアップロード(またはドラッグ)されると、そのオブジェクトは、値”beach”で「スタンプされ」、”vacation type”=”beach”をそのオブジェクトのメタデータヘッダとして用いて、オブジェクト格納システム(例えば、Caringo Swarmオブジェクトストア)に送信され、そこに格納される。関数は、フォルダ”Vacations”にオブジェクトを格納せず(すなわち、フォルダを開いても何も表示されない)、オブジェクトは、ストレージに直接送信される。したがって、その後、そのメタデータプロパティは、オブジェクトストア内のオブジェクトをクエリするために利用できる。例えば、図13に記載したような関数”Photos”または同様の関数は、検索文字列を入力するために用いられてよく、関数は、検索文字列を用いて、オブジェクトストア内のオブジェクトのメタデータヘッダを検索する。
オブジェクトの書き込みに関する変形例において、関数”Vacations”は、図8Bのようにデーモンとして実行する必要はなく、ユーザは、メタデータプロパティの値”beach”を提供するためにマイクロウェブサーバと相互作用する必要はない。関数”Vacations”は、任意の作成されたサブフォルダの名称を、任意の追加された写真上に「スタンプされた」メタデータプロパティ値として用いるようプログラムされている。したがって、ユーザは、”Vacations”の下のサブフォルダ”beach”を作成し、関数によってプログラムされたように、キー”vacation type”={ParentFolder}である。写真をフォルダ”beach”にアップロードすると、その写真に関連するメタデータキー/値ペアは、”beach”になり、次いで、Caringo Swarmに格納された写真は、キー/値メタデータペアとして投入された”vacation type” =”beach”を有することになる。
任意の数のユーザが、このようにタグ付けされた写真をオブジェクトストアへアップロードしてよく、任意の数のユーザが、プラグイン関数を用いてオブジェクトストア内の写真を検索してよい。本発明は、任意の数のユーザに対して容易に規模を変える。
同様の例において、プラグイン関数は、ユーザがテキスト文書をケース名または番号を備えたフォルダにドロップすることを可能にする。各文書は、自動的にその名または番号を「スタンプ」され、オブジェクトストアに格納される。任意の文書のリトリーブが、(図13のように)検索文字列をフォルダ名として提供されたプラグイン関数または最小限のユーザ入力のためのマイクロウェブサーバを有するデーモンモードのプラグイン関数を用いて実行される。
キャッシングサブシステム
本発明の別の実施形態は、無限のストレージに見えるものを(プラグイン関数の開発者の観点から)提供するキャッシングサブシステムを提供し、したがって、ディスク容量がキャッシングサブシステムによって動的に割り当てられるので、ディスクがいっぱいになることを開発者が心配する必要がなくなる。
本発明の別の実施形態は、無限のストレージに見えるものを(プラグイン関数の開発者の観点から)提供するキャッシングサブシステムを提供し、したがって、ディスク容量がキャッシングサブシステムによって動的に割り当てられるので、ディスクがいっぱいになることを開発者が心配する必要がなくなる。
ディスクがいっぱいになることは、しばしば、管理者(および開発者)にとって困難な問題になる。通例、ディスク上のローカルフォルダは、限られた量のバイトスペース(すなわち、ファイルデータのためのスペース)、および、限られた量のアイノードスペース(ディスク上に格納できるファイルおよびフォルダの数(オブジェクト数の限界)を制限する)を有する。アプリケーションは、通常、ディスクがいっぱいになると、機能しなくなる以外にはほとんど選択肢がない。(CPU、メモリ、および、帯域幅のような)ディスク容量は、管理者が注意深く管理する必要がある貴重なリソースであり、さもなければ、そのユーザアプリケーションが機能を停止する。ほとんどの場合、ディスクがいっぱいになると、アプリケーションは、ユーザにメッセージを表示する。一部の例では、アプリケーション(またはサーバー)は、単にクラッシュする。ホストによっては、管理者は、これに対処する選択肢をほとんど持っておらず、何もしないことが最適であり、例えば、LinuxLVMは、複数のディスクにわたってファイルシステムを拡張することを可能にするが、これは、スペアディスクと、これらのディスクを置く余分なサーバスペースがある時にだけ役立つ。多くの場合、高価なディスクアレイおよびiSCSIが、問題解決のために用いられる。予測できない量のデータが収集および格納されるサービス(すなわち、サーバ)を実行している場合、この問題は、極度に困難になるか、莫大な費用が掛かるか、または、その両方である。オブジェクトストアは、非常に多くの拡張性があり、管理しやすく(拡大しやすく)、コスト効率のよいストレージリソースであるが、ファイルシステムインターフェースを持たない。
我々のソリューションは、アプリケーション(プラグイン関数またはサーバ150)とオブジェクトストレージとの間のバッファとしてローカルディスク210(例えば、高速ソリッドステートディスク)を利用し、プラグイン関数にファイルシステムインターフェースを提示しつつオブジェクト格納技術を用いて実際にファイルを格納することである。ファイルシステムの容量を最終的に決定するのは、バックエンドオブジェクトストアの容量であるが、我々の実装は、オペレーティングシステムが許容する限り大きくファイルシステムの容量を開発者に利用できるようにするものであり、これは、すべての実際的な目的にとっては無限である。もちろん、管理者はそれでも、オブジェクトストアの容量および利用を管理しなければならないが、この管理は、実際のサーバストレージまたはディスクのiSCSIアレイよりもずっと容易であり、はるかにコスト効率がよい。
特に、後述するように、サーバ150の中のFUSE(オープンソースライブラリ)を用いてファイルシステムを実装し、3つの既知のサブフォルダを備えたローカルフォルダが単に見えるファイルシステムをプラグイン関数プロセスに提示する。FUSEは、Linuxファイルシステムを実装するが、その他のファイルシステムおよびインターフェースが用いられてもよい。プラグイン関数は、FUSEを間接的かつトランスペアレントに利用し、開発者は、FUSEに関して何も知る必要がない。
これらの関数からのファイルI/Oはすべて、ローカルディスクへの書き込みまたはローカルディスクからの読み出しを行う時に、専用のキャッシングサブシステムコードを用いて処理される。下層のローカルディスクにアクセスするので、キャッシングサブシステムモジュール1002も、ディスクがどれだけ満たされたのかを見るために、ディスクの容量を管理することもできる。より多くのスペースを必要とする場合、モジュール1002は、ファイルの「エビクト」(スワップアウト)を開始し、必要な時、すなわち、キャッシュ210に存在しないファイルがFUSEを介して要求された時に、ファイルを戻すことができるように、各ファイルのコピーがまだオブジェクトストア220内にあることを確認する。プラグイン関数は、このファイル管理には気付かない。したがって、最も長い間利用されていないファイルをキャッシュからエビクトするので、関数には、キャッシュの利用可能なストレージが無限に大きいように見せることができる。
この実施形態は、各プラグイン関数に無限のストレージを提供するのに役立ち、バックサイドキャッシングとして知られ、サーバ150によって利用される第2実施形態は、ユーザごとに独自のビューを提供し、フロントサイドキャッシングとしても知られる。フロントサイドおよびバックサイドキャッシングは、この「無限の」ストレージを利用できるアプリケーションである。それらは両方とも、ローカルディスクの一部をキャッシュとして利用するが、それらのファイルは、最終的にはリモートオブジェクトストア220内に格納されてよい。主な違いは、通例は、バックサイドキャッシングで格納されたファイルの方がフロントサイドキャッシングで格納されたファイルよりもキャッシュ内に長く存在することである。バックサイドファイルは、プラグイン関数の開発者によって決定されたように格納され、後述するように、必要に応じてオブジェクトストアに移動されてよい。フロントサイドファイルは、有効期限(例えば、(開発者によって決定されたように)24時間)を有してよく、フロントサイドファイルが有効期限を有しており、まだ期限が切れていないがスペースが必要である場合に、かかるファイルは、一時的に、オブジェクトストアへスワップアウトされる。フロントサイドファイルがすでに期限切れである場合、エビクトされるとオブジェクトストアに格納されない。
キャッシングサブシステムのブロック図
図15は、キャッシングサブシステム1000のブロック図である。上述した仮想マシン136、サーバ150、キャッシュ210、および、オブジェクトストア220が示されている。ローカルな直接接続されたディスク210は、短期間の一時的なファイルストレージを提供する一方で、ネットワーク接続されたオブジェクトストア220は、いわゆる「バケット」内に長期間の永続的なストレージを提供する。一般に、キャッシュは、容量に制限があるが、実際的な目的にとっては、オブジェクトストレージ内のバケットは、プラグイン関数の観点からは無限の容量に見える。キャッシュは高速かつ高価である一方で、オブジェクトストレージは低速であるがコスト効率がよい。キャッシングサブシステムモジュール1002は、後述の機能を実装するソフトウェアコードであり、他のサーバモジュールがファイルの読み出しまたは書き込みならびにフォルダの管理を行うためのAPIを有する。プラグイン関数は、例えば、プラグイン関数が、ローカルまたはリモートディスク上の階層ファイルシステムにファイルを格納することを可能にするAPI(POSIXなど)を利用する。ローカルフォルダ1004は、仮想マシンホストに直接接続されたディスク210上にあるファイルシステム上の通常のフォルダである。ディスク技術は、高速I/Oおよび低遅延アクセスのためのタイプSSDまたは等価物の技術であってよい。
図15は、キャッシングサブシステム1000のブロック図である。上述した仮想マシン136、サーバ150、キャッシュ210、および、オブジェクトストア220が示されている。ローカルな直接接続されたディスク210は、短期間の一時的なファイルストレージを提供する一方で、ネットワーク接続されたオブジェクトストア220は、いわゆる「バケット」内に長期間の永続的なストレージを提供する。一般に、キャッシュは、容量に制限があるが、実際的な目的にとっては、オブジェクトストレージ内のバケットは、プラグイン関数の観点からは無限の容量に見える。キャッシュは高速かつ高価である一方で、オブジェクトストレージは低速であるがコスト効率がよい。キャッシングサブシステムモジュール1002は、後述の機能を実装するソフトウェアコードであり、他のサーバモジュールがファイルの読み出しまたは書き込みならびにフォルダの管理を行うためのAPIを有する。プラグイン関数は、例えば、プラグイン関数が、ローカルまたはリモートディスク上の階層ファイルシステムにファイルを格納することを可能にするAPI(POSIXなど)を利用する。ローカルフォルダ1004は、仮想マシンホストに直接接続されたディスク210上にあるファイルシステム上の通常のフォルダである。ディスク技術は、高速I/Oおよび低遅延アクセスのためのタイプSSDまたは等価物の技術であってよい。
キャッシングサブシステムモジュール1002は、図4のキャッシングモジュール324およびオブジェクトストレージモジュール328を備える。上述のように、キャッシングモジュール324は、任意のプラグイン関数がファイルシステムを用いてキャッシュ210にファイルを格納できるように、ファイルシステムを実装するためにFUSEオープンソースソフトウェアを利用する。このファイルシステムを用いて、プラグイン関数は、ログインした特定のユーザのコンテキストで(一時ファイルのためのフォルダに加えて)2つのフォルダにアクセスできる。一方のフォルダは、プラグイン関数が特定のユーザのデータのみを書き込むことのできるユーザ固有のフォルダであり、もう一方のフォルダは、任意のユーザのためにプラグイン関数が利用できる関数固有のフォルダである。ユーザ固有のフォルダの利点は、ユーザのデータがうっかり上書きされないことが保証される点である。一実施例において、ファイルシステムは、オブジェクトストアおよびキャッシュの上の層に提供される。
オブジェクトストアモジュール328およびキャッシングモジュール324は、1または複数の特定のディスクがいっぱいになるか否かを追跡することなど、それぞれのデータリポジトリのすべての管理面を扱うので、各プラグイン関数は、プラグイン関数の観点からは、無限のストレージに見えるものを提供される。プラグイン関数の開発者は、その視点からはディスク容量の追跡を気にする必要はなく、データを無限に格納し続けてよい。より多くのディスクスペースが必要な場合、オブジェクトストレージモジュールまたはキャッシングモジュールのいずれかが、より多くのディスクスペースを割り当てる責任を負い、プラグイン関数は、このタスクを実行する必要がない。
図16は、キャッシングサブシステムモジュール1002を実装するために用いられるインメモリキャシュオブジェクト1008の表現を示す。キャッシュオブジェクト(タイプCacheのクラスに対応するサーバメモリ内のRAMのインスタンス化されたチャンクを意味する)は、ローカルフォルダプロパティおよびバックエンドオブジェクトストアプロパティを備えるよう構成される。インメモリキャシュオブジェクトは、内部コンポーネントが呼び出しを行うための呼び出し可能なAPI 1010を有し、リモートオブジェクトストレージシステム(例えばオブジェクトストア220)のクライアントである1または複数のオブジェクトストレージプロキシオブジェクト1012、1013、および、1014を埋め込む。多くのかかるリモートシステムが存在しうるが、通例、一度にアクティブにされるのは、1つのリモートオブジェクトストレージシステムだけである。モジュールは、様々なタイプのリモートオブジェクトストア(Amazon S3、Caringo Swarm、または、Azure Blobなど)をサポートする。リモートストア実装例は、キャッシュ実装を容易にするために、ストアインターフェースの背後では抽象的である。フロントサイドおよびバックサイドキャッシングの両方が、同じキャッシュオブジェクトのインスタンスを用いる。API 1010がファイルデータの書き込みに用いられると、キャッシュオブジェクト1008は、次にローカルディスク210にファイルデータおよび関連メタデータを書き込む。動作が完了するとすぐに、動作(書き込みまたは読み出し)の結果が、呼び出し元に返される。バックグラウンドで、キャッシングサブシステムモジュールは、後述するように、必要に応じて新しいデータをリモートオブジェクトストアに書き込む。
サーバ150は、バックサイドキャッシングを利用するプラグイン関数とは異なり、ユーザ要求を処理する時に、API 1010をインラインで呼び出すことによって直接的にフロントサイドキャッシングを利用する。サーバは、通例、関数(GET)からリトリーブされた後、または、関数(PUT)に進む前に、フロントサイドキャシングで文書を格納している。要求がエンドユーザによってなされ、ユーザが見るビューを反映するエンドユーザごとのフロントサイドキャッシュ部分がある。フロントサイドおよびバックサイドキャッシングは両方とも、キャッシュサブシステムモジュール内に実装され、サーバプロセス内で実行する。プラグイン関数プロセスは、サーバプロセスとは異なるので、ファイルシステムを介して(後述のカーネルおよびFUSEを介して)バックサイドキャッシングを利用可能にする。フロントサイドキャシングは、サーバによって直接アクセスされ、FUSE層を利用しない。フロントサイドキャッシングは、HTTP GET/PUT要求を処理するパスにある。バックサイドキャッシングは、ファイルI/O要求を介して関数によって利用され、開発者の自由である。
図17は、バックサイドキャッシングアーキテクチャのブロック図である。サーバ150、関数160、および、その他のコンポーネントが示されている。上述のように、サーバおよびプラグイン関数は、異なるプロセスである。関数が利用できるストレージを提供するのはサーバであるが、サーバは、マウントポイント1020を介して、ひいては、オペレーティングシステムのカーネルを介して、それを行う。Linuxカーネルの一部であり、サーバ150が自身のプロセス内に真のファイルシステムを実装することを可能にするFUSE(file system in user space:ユーザ空間内のファイルシステム)オープンソース技術を利用する。FUSEは、ユーザ空間部分1024およびカーネル空間部分1022を備える。
任意のプラグイン関数プロセス160にとっては、単に読み出しおよび書き込みできる1セットのフォルダが与えられているかのように見える。しかし、それらの読み出しおよび書き込みの要求を処理するのはサーバである。サーバは、これらのファイルシステム要求すべてを処理するので、その内部キャッシングサブシステムモジュールを用いて、マウントポイントがプラグイン関数プロセスの観点からは無限の容量を有するかのように見せることができる。関数の開発者もシステム管理者も、ディスクがいっぱいになることを心配する必要はなく、したがって、プラグイン関数を用いて開発者および管理者にとってのあらゆる障壁を下げようとする我々の試みに明らかな利点を提供する。
図18は、プラグイン関数にとって利用可能なフォルダの象徴的に示すブロック図である。サーバ150は、モジュール1002を介して、これらのフォルダをローカルキャッシュ210にマッピングし、キャッシュからリモートストレージ220にマッピングする。無限に見えるストレージ容量を提供することに加えて、サーバ150は、データへのアクセス制御も提供し、関数によって誤って上書きされないようにユーザデータを保護する。関数によって見られる無限ストレージは、1セットのフォルダを露出させる単一のマウントポイント1020である。マウントポイント1020は、関数160に、以下の3つのサブフォルダ1032、1034、および、1036を有するローカルフォルダ1004を提示する:一時ファイル用サブフォルダ1032、関数所有状態のサブフォルダ1034(ユーザがI/O要求を行うのとは無関係に、関数がデータの書き込みまたはデータの読み出しを行うことができる関数によって所有された共有ファイル)、および、ユーザ所有状態のサブフォルダ1036(I/O要求を行うユーザによって所有されたフォルダであり、そのユーザによってのみアクセス可能であり、他の誰もアクセスできない)。各々が関数を呼び出す多くのユーザが存在しうるため、数多くのユーザフォルダ1036〜1038が示されている。特に、プラグイン関数は、”/mnt/storage”1004およびこれらのサブフォルダを見る:
/mnt/storage/tempdir:一時ファイルのためのスクラッチ領域
/mnt/storage/function:関数共有状態
/mnt/storage/private:ユーザごとのプライベート状態
/mnt/storage/tempdir:一時ファイルのためのスクラッチ領域
/mnt/storage/function:関数共有状態
/mnt/storage/private:ユーザごとのプライベート状態
このアーキテクチャの重要な結果は、各プラグイン関数が、同じマウントポイント1020と、それの同じ3つのフォルダ(一時ファイル、関数所有状態、および、ユーザ所有状態のためのフォルダ)とを見る一方で、関数の開発者は、ユーザが実際に誰なのかも、関数が実際に実行されているのかも気にする必要がないことである。関数は、単に、マウントポイントから読み出しまたはマウントポイントに書き込みできる。かかる階層も存在しうる古典的なファイルシステムまたはファイルサーバでは、ファイルおよびサブフォルダが、容易に上書きされうる。このアーキテクチャにおいて、可視状態のフォルダは、これらのフォルダが一定の周知の名称を有するにもかかわらず、真に一意的であり、要求およびその要求を行うユーザに依存する。関数固有またはユーザ固有の状態のみが、これらのフォルダ1034および1036に存在する。ユーザXのために実行する関数が、ユーザYに属するデータをリスト、読み込み、書き出し、または、上書きすることは不可能である。関数Aが、関数Bの状態をリスト、読み込み、書き出し、または、上書きすることもできない。さらなる詳細を以下に提供する。以下に記載のパス名スキームは、関数がそのユーザのために実行されているユーザにとって、フォルダ/mnt/storage/privateが真にプライベートであることを保証する。したがって、ユーザのプライベートデータは、その関数が別のユーザのために実行している間に、上書きされることがない。
キャッシングサブシステムユーザファイルおよびプレフィックスパス名
各関数のプロセスは、要求を行うユーザのために呼び出される。例えば、関数にPUT要求をするユーザが、そのユーザのために関数を呼び出させる。これが意味するのは、要求を行うユーザにUIDが対応し、アドレスされる関数にGIDが対応するように、その関数プロセスのUIDおよびGIDプロパティが設定されることである。これらのUID/GID番号は、一時的なものである。サーバが、GID番号を関数に割り当て、UID番号を認証されたユーザセッションに割り当てるが、これらの番号は、サーバおよびカーネル内のメモリにのみ存在する。それらは、永続的ではない。
各関数のプロセスは、要求を行うユーザのために呼び出される。例えば、関数にPUT要求をするユーザが、そのユーザのために関数を呼び出させる。これが意味するのは、要求を行うユーザにUIDが対応し、アドレスされる関数にGIDが対応するように、その関数プロセスのUIDおよびGIDプロパティが設定されることである。これらのUID/GID番号は、一時的なものである。サーバが、GID番号を関数に割り当て、UID番号を認証されたユーザセッションに割り当てるが、これらの番号は、サーバおよびカーネル内のメモリにのみ存在する。それらは、永続的ではない。
サーバは、プラグイン関数のためのプロセスをフォークする時、そのプロセスのUIDおよびGIDプロパティを設定する。露出されたマウントポイントに対して関数プロセス内でなされる任意のファイルシステムコールが実行されるので、UID/GIDペアのために、各I/O要求について、そのペアは、FUSE層を通してサーバに返される。サーバに戻り、ユーザuuidおよび関数uuidを見つけるために、UID/GIDペアに関する対応するランタイムオブジェクトを見つける。シェアuuidおよびテナントuuidと共に、サーバは、後述するように、キャッシュサブシステムおよび対応するリモートストレージに適切にアクセスするために必要な全情報を有する。
オブジェクトストレージシステムには、多くの欠点があり、ユーザデータファイルならびにファイル関連およびフォルダ関連のメタデータがキャッシングサブシステムによってオブジェクトストレージに直接書き込まれない理由になっている。オブジェクトストレージシステムは、オブジェクト階層を有するように見えるが、実際には、名称に可能な”/”文字を有するフラットネームスペースを提示する。さらに、オブジェクトストレージバケットは、ファイルシステムのような動作も意味論も持たず、通例は、”move”または”rename”動作を欠く。そして、POSIX拡張属性と同様のファイル関連メタデータ動作へのサポートがない。さらに、リモートバケットに格納される前に、データおよびメタデータを圧縮および暗号化できることが望ましい。関数、ユーザ、シェア、および、テナントのレベルの全ストレージを、しかも、同じバッキングオブジェクトストアをいずれもが用いる複数のサーバ全体にわたって、考慮できる必要もある。
キャッシングサブシステムモジュールは、これらの問題に対処する。データは、ローカル接続されたディスク上で暗号化および圧縮されずに存在するが、ファイルがリモートに格納される時、サーバは、それらをオブジェクトストレージに送信する前にすべてのファイルを最初に暗号化および圧縮する。ファイルがオブジェクトストレージから読み出される時に、逆の動作が実行される。
フォルダ情報ならびにファイルおよびフォルダのメタデータが、ロースタファイルにパッキングされる。ロースタファイルは、効率的な格納およびメタデータへの高速アクセスを可能にするカスタムバイナリフォーマットである。ロースタファイルは、エンティティ名、モード、作成タイムスタンプなど、標準的なPOSIX属性を含むが、サーバに固有のカスタムメタデータプロパティもエンコードする。ロースタファイルは、ファイルデータを全く含まない。各ユーザファイルは、個別に格納されるが、その真のファイル名(例えば、”Works Shakespeare”)は、ロースタファイルに記録され、システムが、リモートに格納する時に各ユーザファイルに用いる代替名(汎用一意識別子(UUID)など)を利用することを可能にする。このソリューションの二次的な利点は、リモートに情報を格納する時に、ユーザデータおよびユーザメタデータの両方を機密にできることである。したがって、ロースタファイルは、ファイルおよびサブフォルダの名称と、UUIDに対する名称のマッピングとを含むシリアライズされたフォルダである。それらは、バイナリシリアライゼーションフォーマットを利用し、オブジェクトストレージに格納する前に暗号化および圧縮される。キャッシングサブシステムモジュールも、必要とされるファイルシステムのような動作(”move”および”rename”など)を実装する。サブシステムAPI 1010は、フォルダをまたぐ動作、標準および拡張メタデータの管理、および、ネームスペース動作など、すべてのファイルシステムのようなプロパティを提供する。
ローカルディスク210上およびリモートバケット220内には、UUIDを名称としたオブジェクトのみが存在する。リモートオブジェクトが暗号化および圧縮される一方で、ローカルオブジェクトは復号され未圧縮であるが、ローカルディスク上でもオブジェクトストレージ内でも、ファイルの一意名は(ユーザファイルおよびロースタファイルの両方について)、同じUUIDを有する。すべてのファイルおよびフォルダ動作は、フォルダオブジェクトのコンテキストで行われる。任意のフォルダが、何らかの階層に属する。階層は、パスにプレフィックスを付けることによって形成された指定ルートから始まる。
オブジェクト(ユーザファイルおよびロースタファイル)をリモートバケット220に格納する時、フォルダ階層のためのルートを形成する4つのパスコンポーネントをオブジェクト名のプレフィックスにする。オブジェクト名の一例は、UUIDに拡張子(“.folder”(ロースタファイル用)または“.file”(ユーザファイル用)など)を追加したものである。オブジェクト名は、ローカルキャッシュに格納されてもオブジェクトストアに格納されても、4つのパスコンポーネントをプレフィックスとして付けられる。サーバに入る要求は、最初に認証および許可される。ユーザが誰であるかわかると、そのUUIDもわかり、要求は特定のシェアになされるので、そのシェアのUUID、および、そのシェアを所有するテナントのUUIDもわかる。各要求の第1パスコンポーネントは、関数UUIDを提供する関数に対応する。したがって、各要求に対して、すべての4つのUUIDを見つけて、プレフィックスを形成することができる。最上位パスコンポーネントは、テナントUUIDである。次のパスコンポーネントは、シェアUUIDである。シェアUUIDの下には、関数UUIDまたはユーザUUIDの組みあわせがある。可能なプレフィックス付きパスは:
tenant−uuid/share−uuid/user−uuid/user−uuid
tenant−uuid/share−uuid/function−uuid/function−uuid
tenant−uuid/share−uuid/function−uuid/user−uuid
tenant−uuid/share−uuid/user−uuid/user−uuid
tenant−uuid/share−uuid/function−uuid/function−uuid
tenant−uuid/share−uuid/function−uuid/user−uuid
2つの”user−uuid”を備えた最初のプレフィックスは、ユーザごとのフロントサイドキャッシングに関連するファイルおよびフォルダに用いられる。すべてのユーザが、関数ならびにそのファイルおよびフォルダの独自のビューを有する。このビューは、プレフィックス”tenant−uuid/share−uuid/user−uuid/user−uuid”を備えたキャッシュに格納される。
2つの他のプレフィックスは、バックサイドキャッシングに用いられる。関数によって見られる無限ストレージは、上述のように、3つの既知のフォルダのセットを露出させる単一のマウントポイントである。関数フォルダに書き込まれるオブジェクトは、tenant−uuid/share−uuid/function−uuid/function−uuidパスをプレフィックスとして付けれ、一方、関数内のユーザごとのフォルダに書き込まれるオブジェクトは、tenant−uuid/share−uuid/function−uuid/user−uuidパスをプレフィックスとして付けられる。3つのプレフィックスを用いて、サーバは、格納された様々なオブジェクトを考慮して、ユーザ、関数、シェア、または、テナントによって用いられるストレージなどの集計を計算することもできる。したがって、ファイル名がこれらのプレフィックスと共に、ローカルディスク上に格納されるかオブジェクトストア内に格納されるかに関わらず、そのファイルのためのUUIDを生成する。
有利なことに、関数は、ファイル名に追加される一意的なプレフィックス故に、(両方が同じ真のファイル名であったとしても、および、両方が同じユーザフォルダに書き込まれたとしても)別の関数によって書き込まれたファイルに上書きすることはできない。従来のファイルシステムは、アクセス制御(POSIX属性)を用いて、読み出し/書き込みアクセス制御の読み書きを組織化する。したがって、ファイル名は、フォルダ内で可視であってよいが、所有者以外の誰かによって読み書きされることはできない。この従来のファイルシステムの問題は、名称がまだ「可視」であり、この名称が「専有される」、すなわち、名称がもはや他の誰にとっても利用可能ではないことである。対照的に、本発明の実施形態において、各ユーザは、基本的に、独自のプライベートファイルシステムまたはプライベートフォルダを有する。
キャッシングサブシステムのフローチャート
図19は、プラグイン関数がローカルディスクにデータを書き込む一実施形態を記載するフローチャートである。このフローは、どれだけのディスクスペースが利用可能かを気にする必要なしに、プラグイン関数が任意のデータをローカルディスク210上のキャッシュのフォルダに書き込むバックサイドキャッシングを記載する。第1工程1140において、ユーザは、工程702〜708または802〜804に記載したようにコンピュータデバイスにログインし、上述したように様々なプラグイン関数の内のいずれかを呼び出す。プラグイン関数は、実行を開始し、そのコードに従って、工程1142の或る時点に、データファイルを作成するか、ユーザによってアップロードされたデータを取得してもよく、または、何らかの他の方法で(例えば、データリポジトリまたはリモートサービスから)データファルを取得してもよい。工程806および824でも、例について上述した。このファイルは、”Works Shakespeare”などのファイルファイルの読み出しおよび書き込みのためにプラグイン関数によって利用される(そして、おそらくユーザに対して表示される)真のファイル名を持つことになる。
図19は、プラグイン関数がローカルディスクにデータを書き込む一実施形態を記載するフローチャートである。このフローは、どれだけのディスクスペースが利用可能かを気にする必要なしに、プラグイン関数が任意のデータをローカルディスク210上のキャッシュのフォルダに書き込むバックサイドキャッシングを記載する。第1工程1140において、ユーザは、工程702〜708または802〜804に記載したようにコンピュータデバイスにログインし、上述したように様々なプラグイン関数の内のいずれかを呼び出す。プラグイン関数は、実行を開始し、そのコードに従って、工程1142の或る時点に、データファイルを作成するか、ユーザによってアップロードされたデータを取得してもよく、または、何らかの他の方法で(例えば、データリポジトリまたはリモートサービスから)データファルを取得してもよい。工程806および824でも、例について上述した。このファイルは、”Works Shakespeare”などのファイルファイルの読み出しおよび書き込みのためにプラグイン関数によって利用される(そして、おそらくユーザに対して表示される)真のファイル名を持つことになる。
工程1144において、上述のように、サーバは、真のファイル名と4つのプリフィックスコンポーネントとを連結することによって完全なファイル名を作成する。したがって、完全なファイル名は、真のファイル名に対応する汎用一意識別子であり、両方とも、上述のように、ロースタファイルに関連して記録される。もちろん、真のファイル名に対応する汎用一意識別子が、当業者に周知のその他の方法で作成されてもよい。この工程は、ローカルディスク上のユーザフォルダにファイルが書き込まれることをプラグイン関数が要求した後の工程1148の後に実行されてもよい。
工程1146において、プラグイン関数は、このファイルをこのユーザに固有のフォルダに保存することを望み、フォルダ”/mnt/storage/private”にアクセスする。有利なことに、プラグイン関数(むしろ、関数の開発者)は、具体的にユーザが誰であるかを知る必要がない。プラグイン関数は、プラグイン関数が別のユーザによって呼び出された時でも、ファイルがうっかり上書きされないことを保証して、真のファイル名を用いてフォルダ”private”にファイルを単に書き込む。サーバによって実施される上述の命名規則は、ファイルがうっかり上書きされないことを保証する。
工程1148において、ファルの真のファイル名を用いて上述したように、プラグイン関数は、マウントポイントおよびFUSEファイルシステムを介して、このファイルをローカルディスク上のキャッシュ内のユーザ固有のフォルダ”private”に書き込む。ロースタファイルは、同様にこの時に書き込まれてもよいし、定期的に後で書き込まれてもよい。この時点で、モジュール1002は、工程1144で上述したように、真のファイル名に基づいて完全なファイル名を作成してよい。次いで、ファイルは、汎用一意識別子であるその完全なファイル名を用いてモジュールによってキャッシュに書き込まれる。図18に示したように、プラグイン関数160は、ユーザ固有のデータに利用可能な「プライベート」フォルダであるフォルダ1036にアクセスした。有利なことに、プラグイン関数160は、フォルダ1036にデータを書き込むたびに、その時にどのユーザがログインしていても、その他のユーザデータにうっかり上書きすることがない。
次に、或る時点で、関数は終了してよく、制御は、別のユーザがログインする工程1140に戻り、同じプラグイン関数が、キャッシュ(フォルダ1032〜1036のいずれか)にデータを書き込み続ける。または、制御が工程1142に戻り、関数は、同じユーザのためにキャッシュにデータを書き込み続ける。有利なことに、プラグイン関数(すなわち、その開発者)およびサーバ150の管理者は、どれだけ多くのデータがキャッシュに書き込まれても、キャッシュ内でどれだけのディスクスペースが利用可能であるかを気にする必要がない。工程1150において、キャッシングサブシステムモジュール1002のバックグラウンドプロセスは、スペースが利用可能であるかを確かめるために継続的にチェックを行い、より多くのスペースがキャッシュ内で必要とされた場合に、ファイルをエビクトする。この工程については、図20において以下でより詳細に説明する。
図20は、データがキャッシュからリモートオブジェクトストアに移動される一実施形態を記載するフローチャートである。このフローは、プラグイン関数がキャッシュにデータを書き込もうとするたびにバックサイドキャッシング中に行われ、また、定期的に行われてもよいし、モジュール1002の何らかの警告メカニズムまたはローカルディスク210上で利用可能なデータの監視メカニズムによってトリガされてもよい。さらに、このフローは、サーバ150がキャッシュにデータを書き込もうとした時に、フロントサイドキャシング中にも行われる。換言すると、エビクトが行われうる明確な時点が存在する。いくつかのファイルをエビクトすることで、いつでも少しのキャッシュスペースを解放するプロアクティブなバックグラウンドタスクがある。その他の可能性は、新しいデータを書き込まなければならないが十分なスペースが利用できないプレッシャーの大きい状況で利用されるオンデマンドエビクトである。
例えば、工程1160において、プラグイン関数は、工程1148で記載したように、ファイルをキャッシュに書き込むことを決定する。モジュール1002は、この書き込みコマンドを傍受し、工程1162において、キャッシュ内に利用可能なスペースがあるか否かを工程1162で判定する。ファイルのサイズが、キャッシュ内の残りのディスクスペースと比較されてもよいし、残りのスペースが、所定の数(例えば、1MB)よりも少ない時に、利用可能なスペースがないと自動的に判定されてもよい。利用可能な物理的スペースに基づいて判定する代わりに、利用可能なアイノードスペースの量に基づいて判定がなされてよい。スペース(すなわち、物理的スペースもアイノードスペースの両方)が利用可能である場合、工程1164において、データは、プラグイン関数によって要求されたように、キャッシュに書き込まれる。
その一方で、キャッシュプレッシャー時、すなわち、キャッシュのデータスペースまたはアイノードスペースが尽きた時、最も長い間利用されていないファイルが、工程1166でキャッシュからエビクトされる。キャッシュ内で最も長い間利用されていないファイルは、例えば、そのUUIDを用いて、どのファイルが最も過去に書き込まれたのかまたは最も過去に読み出されたのか、に基づいて決定される。エビクトするファイルを選択する他の方法の中でも時に、エビクトに向けてランダムにファイルを選んでもよい。
或る程度の量のスペースがファイルの書き込みに必要である場合、または、或る程度の量のスペースを利用可能にしなければならない場合に、2以上のファイルが特定されてもよい。1または複数のファイルが特定されると、エビクトの前に、モジュール1002は、工程1168において、エビクトされる1または複数のファイルのコピーがオブジェクトストレージ内にあることを確実にする。したがって、1または複数のファイルは、最初にオブジェクトストレージ220にコピーされ、最初に暗号化および圧縮される。上述のように、1つの例外がある、フロントサイドキャシングで格納されたファイルが、エビクトの対象として選択されても、期限が切れていれば、オブジェクトストレージへコピーされず、単に削除される。この動作を見る1つの方法は、ローカルファイルがキャッシュからリモートストレージにスワップアウトされるスワップ動作として見ることである。コピーされると、ローカルファイルは、ディスクから効果的に削除される。
工程1170において、エビクトされるファイルまたはフォルダによって利用されていたスペースは、キャッシュ内で解放される。次に、スペースが、プラグイン関数からの書き込み要求のために必要とされた場合に、工程1164において、データは、上述のようにキャシュに書き込まれる。ファイルが、オンデマンドエビクトではなく、バックグラウンドのプロアクティブなプロセスのためにエビクトされた場合、工程1164は、この時には実行されない。
スワップアウトされたファイルが、プラグイン関数(またはサーバ)によってしばらく後に必要とされた時、逆の動作が実行される。有利なことに、プラグイン関数が必要としうるファイルがローカルディスクから削除されて、今ではリモートオブジェクトストア内にあることは、プラグイン関数にとってトランスペアレントである。したがって、プラグイン関数は、単に、(工程1148において、ファイルをキャッシュに書き込むために用いたのと同じ真のファイル名およびフォルダ名を用いて)ユーザ固有のフォルダ1036から自身の必要とするファイルを読み出すよう要求する。真のファイル名に対応する完全なファイル名は、ロースタファイルからリトリーブされ(または、上述のように作成されてもよい)、読み出し要求は、上述のようにマウントポイント1020、FUSE 1022、1024を通して渡され、モジュール1002がその要求を受信する。モジュールは、所望のファイルがローカルキャッシュに存在しないと認識すると、完全なファイル名を用いて、リモートオブジェクトストア220内でファイルを検索して見つけ、その後、ファイルは、リモートオブジェクトストアからコピーされ、解凍、復号され、ディスク210上にローカルに格納される。ファイルは、オブジェクトストアから消去されても消去されなくてもよい。ディスク210上にローカルに格納されたファイルは、その後、要求側のプラグイン関数に返される。
したがって、このファイルエビクト処理は、バックグラウンドで自動的に起こり、関数またはサーバがファイルをキャッシュに書き込もうとした時にオンデマンドで必要に応じても起こるので、プラグイン関数もサーバも、キャッシュ内でどれだけのディスクスペースが利用可能であるのかを気にする必要がない。各々、ストレージが無限であるかのように、キャッシュにデータを書き込み続けてよい。
さらなる実施形態
本発明の方法実施形態の多くは、システムとして実施されてもよく、これらは以下を含む。
本発明の方法実施形態の多くは、システムとして実施されてもよく、これらは以下を含む。
第1実施形態は、クライアントコンピュータデバイス上にデータを読み込むためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。コンピュータサーバからクライアントコンピュータデバイスへ、表示に向けて、情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信する工程で、それにより、アイコンがクライアントコンピュータデバイス上に表示され工程、パス名と、フォルダを開くためのユーザインターフェース上でのユーザの選択を示すコマンドとを、コンピュータデバイスからリモートコンピュータで受信する工程、パス名およびコマンドを用いてリモートコンピュータのプラグイン関数を実行する工程、プラグイン関数からコンピュータデバイスへフォルダのコンテンツのリストを返す工程、それにより、フォルダのコンテンツがユーザインターフェース上で階層に表示され、コンテンツは、どのストレージデバイス上にもまだ存在しない工程。
第2実施形態は、クライアントコンピュータデバイス上にデータを読み込むためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。コンピュータサーバからクライアントコンピュータデバイスへ、表示に向けて、情報のファイルを表すアイコンを含むユーザインターフェスデータを送信する工程、それにより、アイコンがクライアントコンピュータデバイス上に表示され、ファイルは、どのストレージデバイス上にもまだ存在しない、パス名と、ファイルを開くためのユーザインターフェース上でのユーザの選択を示すコマンドとを、コンピュータデバイスからリモートコンピュータで受信する工程、ファイルを作成するために、パス名およびコマンドを用いてリモートコンピュータのプラグイン関数を実行する工程、プラグイン関数からコンピュータデバイスへファイルのコンテンツを返す工程、それにより、ファイルのコンテンツが、クライアントコンピュータデバイスのアプリケーションを用いてクライアントコンピュータデバイス上で表示される工程。
第3実施形態は、クライアントコンピュータデバイスからデータを書き出すためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。コンピュータサーバからクライアントコンピュータデバイスへ、表示に向けて、情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信する工程、それにより、アイコンがクライアントコンピュータデバイス上に表示され工程、クライアントコンピュータデバイスから、パス名と、ファイルのコンテンツと、ファイルをフォルダに追加するためのユーザインターフェース上でのユーザの選択を示すコマンドとを、リモートコンピュータで受信する工程、パス名およびコマンドを用いてリモートコンピュータのプラグイン関数を実行して、ファイルをストレージに格納する工程、プラグイン関数は、ファイルをクライアントコンピュータデバイス上に表示するためのユーザインターフェースを全く実装せず、クライアントデバイス上でユーザインターフェースのフォルダ内に表示するために、プラグイン関数からコンピュータデバイスへファイルの名称を返す工程。
第4実施形態は、コンピュータサーバ上でプラグイン関数を実行するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。第1および第2プラグイン関数のための実行可能コードの層をリポジトリからフェッチして、コンピュータサーバのローカルディスク上の前記プラグイン関数の各々のためのルートファイルシステムフォルダ内に層を解凍する工程、コンピュータサーバの仮想マシン上で実行するサーバプロセスによって、プラグイン関数の実行可能コードをロードして、プラグイン関数の各々を実行する工程、プラグイン関数の各々は、独自のルートファイルシステムを有し、プラグイン関数の各々は、同じネームスペースを共有し、第1プラグイン関数によって、仮想マシンのネットワークを用いて、リモート企業コンピュータから第1データをリトリーブする工程、第2プラグイン関数によって、仮想マシンのネットワークを用いて、リモート企業コンピュータから第2データをリトリーブする工程、第1および第2プラグイン関数の各々が、それぞれの第1および第2データを用いて、クライアントコンピュータデバイスに各々送信されるそれぞれの第1および第2データファイルを作成する工程。
第5実施形態は、コンピュータサーバ上でプラグイン関数を実行するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。サーバコンピュータ上のサーバプロセスによってプラグイン関数を呼び出す工程、プラグイン関数は、独自のルートファイルシステムを持つが、独自のネームスペースを持たず、工程、コンピュータサーバ上でプラグイン関数を実行し、リモートユーザコンピュータデバイスからコマンドを受信する工程、データソースからデータを読み出す工程、データに基づいてファイルを作成し、ファイルの表示に向けてリモートユーザコンピュータデバイスにファイルを送信する工程、プラグイン関数は、リモートユーザコンピュータデバイス上にユーザインターフェースを全く実装しない。
第6実施形態は、クライアントコンピュータデバイス上にデータを読み込むためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。コンピュータサーバからクライアントコンピュータデバイスへ、表示に向けて、情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信する工程、それにより、アイコンがクライアントコンピュータデバイス上に表示され工程、ユーザによって入力されたフォルダ名を有する新規フォルダを作成するためにユーザインターフェース上でユーザによってなされた選択を示すコンピュータデバイスからのコマンドをリモートコンピュータで受信する工程、リモートコンピュータのプラグイン関数を実行して、フォルダ名を有する新規フォルダを作成し、コンピュータデバイスのユーザインターフェース上で表示するために新規フォルダを返す工程、フォルダ名に依存する結果を生成するために、フォルダ名を入力として用いてプラグイン関数を実行する工程。
第7実施形態は、クライアントコンピュータデバイスからデータを書き出すためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。ユーザによって入力されたフォルダ名を有する新規フォルダを作成するためにユーザインターフェース上でユーザによってなされた選択を示すクライアントコンピュータデバイスからのコマンドをリモートコンピュータで受信する工程、リモートコンピュータのプラグイン関数を実行して、フォルダ名を有する新規フォルダを作成し、コンピュータデバイスのユーザインターフェース上で表示するために新規フォルダを返す工程、コンピュータデバイスのユーザインターフェースを用いてユーザによって新規フォルダに追加されたデジタルオブジェクトをリモートコンピュータで受信する工程、プラグイン関数を実行し、フォルダ名を用いてデジタルオブジェクトを処理することで、フォルダ名に依存する結果を生成する工程。
第8実施形態は、クライアントコンピュータデバイスからメタデータを入力するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。リモートコンピュータのプラグイン関数をデーモンモードで実行して、プラグイン関数を表すフォルダアイコンとユーザ入力アイコンとを備えたユーザインターフェースをクライアントコンピュータデバイス上に表示する工程、ユーザインターフェース上でユーザによってなされたユーザ入力アイコンの選択を示すコンピュータデバイスからのコマンドをリモートコンピュータで受信する工程、プラグイン関数によって、コンピュータデバイス上に表示するウェブページを送信する工程、プラグイン関数によって、ユーザによってウェブページ上で入力されたメタデータ値を受信する工程、メタデータ値に依存する結果を生成するために、メタデータ値を入力として用いてプラグイン関数を実行する工程。
第9実施形態は、クライアントコンピュータデバイスからメタデータを入力するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。ユーザによって入力されたフォルダ名を有する新規フォルダを作成するためにユーザインターフェース上でユーザによってなされた選択を示すクライアントコンピュータデバイスからのコマンドをリモートコンピュータで受信する工程、リモートコンピュータのプラグイン関数を実行して、フォルダ名を有する新規フォルダを作成し、コンピュータデバイスのユーザインターフェース上で表示するために新規フォルダを返す工程、ユーザによって入力されたフォルダ名にメタデータ値をプラグイン関数によって割り当てる工程、メタデータ値に依存する結果を生成するために、メタデータ値を入力として用いてプラグイン関数を実行する工程。
第10実施形態は、クライアントコンピュータデバイスからデータベースと通信するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。リモートコンピュータの第1プラグイン関数をデーモンモードで実行し、第1プラグイン関数によってデータベースとの接続を開く工程、リモートコンピュータの第2プラグイン関数を介して、データベースにアクセスするためのクライアントコンピュータデバイスからの要求をリモートコンピュータで受信する工程、リモートコンピュータの第2プラグイン関数を実行し、要求を実行中の第1プラグイン関数に送信する工程、要求で第1プラグイン関数によってデータベースにアクセスし、データベースから応答を受信する工程、応答を第1プラグイン関数から第2プラグイン関数に送信する工程、応答を第2プラグイン関数からクライアントコンピュータデバイスに送る工程。
第11実施形態は、クライアントコンピュータデバイス上にデータを表示するためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。コンピュータサーバからクライアントコンピュータデバイスへ、表示に向けて、情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信する工程、それにより、アイコンがクライアントコンピュータデバイス上に表示され、パス名と、ユーザインターフェースのアイコンに関する動作を示すクライアントコンピュータデバイスからのユーザインターフェースコマンドとを、コンピュータサーバで受信する工程、パス名およびユーザインターフェースコマンドを用いてコンピュータサーバのプラグイン関数を実行して、ユーザインターフェースコマンドを実行する工程、ユーザインターフェースコマンド内に含まれないさらなるステップを実行するために、プラグイン関数を実行する工程、表示するために、結果をクライアントコンピュータデバイスに返す工程。
第12実施形態は、プラグイン関数からファイルシステムに書き込みを行うためのシステムを含み、システムは、以下の工程を実行するよう構成された装置を備える。リモートコンピュータデバイスの第1ユーザの要求に応じて、仮想マシンのプラグイン関数を実行する工程、ファイル名を有するファイルをプラグイン関数で受信する工程、プラグイン関数の識別子および第1ユーザの識別子に基づいて、ファイル名に対して一意ファイル名を作成する工程、コンピュータのローカルディスク上でファイルを識別するために一意ファイル名を用いて、プラグイン関数によってローカルディスク上のファイルシステムのユーザフォルダにファイルを書き込む工程。
第13番目の実施形態は、コンピュータのローカルディスクのスペースを管理するためのシステムを含み、前記システムは、以下の工程を実行するよう配置された装置を含む。前記仮想マシンのサーバプロセスによって、前記ローカルディスク上で利用可能なストレージスペースをより多く作成するか否かを決定する工程、利用可能なより多くのストレージスペースを作成すると決定する時、前記ローカルディスクから除去される格納されたファイルを選択する工程、前記ローカルディスクからリモート記憶域へ前記格納されたファイルをコピーする工程、および、前記格納されたファイルによって使用されていた前記ローカルディスク上のスペースを解放する工程。
コンピュータシステム実施形態
図21Aおよび図21Bは、本発明の実施形態の実施に適したコンピュータシステム1500を示している。図12Aは、コンピュータシステムの物理的形態の一例を示している。もちろん、コンピュータシステムは、集積回路、プリント回路基板、小型ハンドヘルドデバイス(携帯電話、タブレット、または、PDAなど)、パーソナルコンピュータ、もすくは、スーパーコンピュータなど、多くの物理的形態を有してよい。コンピュータシステム1500は、モニタ1502、ディスプレイ1504、筐体1506、ディスクドライブ1508、キーボード1510、および、マウス1512を備える。ディスク1514は、コンピュータシステム1500とデータをやり取りするために用いられるコンピュータ読み取り可能な媒体である。
図21Aおよび図21Bは、本発明の実施形態の実施に適したコンピュータシステム1500を示している。図12Aは、コンピュータシステムの物理的形態の一例を示している。もちろん、コンピュータシステムは、集積回路、プリント回路基板、小型ハンドヘルドデバイス(携帯電話、タブレット、または、PDAなど)、パーソナルコンピュータ、もすくは、スーパーコンピュータなど、多くの物理的形態を有してよい。コンピュータシステム1500は、モニタ1502、ディスプレイ1504、筐体1506、ディスクドライブ1508、キーボード1510、および、マウス1512を備える。ディスク1514は、コンピュータシステム1500とデータをやり取りするために用いられるコンピュータ読み取り可能な媒体である。
図21Bは、コンピュータシステム1500のブロック図の一例である。システムバス1520には、様々なサブシステムが取り付けられている。1または複数のプロセッサ1522(中央処理装置すなわちCPUとも呼ぶ)が、メモリ1524などの記憶装置に接続されている。メモリ1524は、ランダムアクセスメモリ(RAM)およびリードオンリーメモリ(ROM)を含む。当業者に周知のように、ROMは、CPUに対して単方向的にデータおよび命令を転送するよう機能し、RAMは、通例、双方向的にデータおよび命令を転送するために用いられる。これらの種類のメモリは両方とも、後に示す任意の適切なコンピュータ読み取り可能媒体を含んでよい。CPU1522には、さらに、固定ディスク1526が、双方向的に接続されており、さらなるデータ記憶容量を提供している。固定ディスク1526は、後に示すコンピュータ読み取り可能媒体のいずれを含んでもよい。固定ディスク1526は、プログラム、データなどを格納するために用いられてよく、通例は、一次記憶装置よりも遅い場合があるがデータを永続的に保持する二次マスストレージ媒体(ハードディスク、ソリッドステートドライブ、ハイブリッドドライブ、フラッシュメモリなど)である。固定ディスク1526内に保持された情報は、必要に応じて、メモリ1524内の仮想メモリとして標準的な方法で組み込まれてよいことを理解されたい。リムーバブルディスク1514は、後に示すコンピュータ読み取り可能な媒体のいずれの形態を取ってもよい。
CPU1522は、さらに、ディスプレイ1504、キーボード1510、マウス1512、および、スピーカ1530など、様々な入力/出力装置に接続されている。一般に、入力/出力装置は、ビデオディスプレイ、トラックボール、マウス、キーボード、マイク、タッチセンサ式ディスプレイ、トランスデューサ式カードリーダ、磁気または紙テープリーダ、タブレット、スタイラス、音声または手書き認識装置、バイオメトリクスリーダ、もしくは、他のコンピュータ、のいずれであってもよい。CPU1522は、任意選択的に、ネットワークインターフェース1540を用いて、他のコンピュータや電気通信ネットワークに接続されてもよい。かかるネットワークインターフェースを用いて、CPUは、上述の方法の工程を実行する際に、ネットワークから情報を受信、または、ネットワークに情報を出力してよい。さらに、本発明の方法の実施形態は、CPU1522単体で実行されてもよいし、インターネットなどのネットワークを介して、処理の一部を分担する遠隔CPUと協働で実行されてもよい。
さらに、本発明の実施形態は、コンピュータによって実現される様々な動作を実行するためのコンピュータコードを有するコンピュータ読み取り可能な媒体を備えたコンピュータストレージ製品に関する。媒体およびコンピュータコードは、本発明のために、特別に設計および構成されてもよいし、コンピュータソフトウェア分野における当業者にとって周知および利用可能なものであってもよい。コンピュータ読み取り可能な媒体の例としては、ハードディスク、フロッピーディスク、磁気テープなどの磁気媒体、CD−ROM、ホログラフィック素子などの光学媒体、フロプティカルディスクなどの光磁気媒体、特定用途向け集積回路(ASIC)、プログラム可能論理デバイス(PLD)、ROMおよびRAMなど、プログラムコードを格納および実行するよう特別に構成されたハードウェア装置、が挙げられるが、それらに限定されない。コンピュータコードの例としては、コンパイラによって生成されたコードなどのマシンコードや、インタープリタを用いてコンピュータによって実行される高級言語コードを含むファイルが挙げられる。
理解を深めるために、上述の発明について、ある程度詳しく説明したが、添付の特許請求の範囲内で、ある程度の変更や変形を行ってもよいことは明らかである。したがって、上述の実施形態は、例示的なものであって、限定的なものではないとみなされ、本発明は、本明細書に示した詳細事項に限定されず、添付の特許請求の範囲およびその等価物の範囲によって規定される。
Claims (88)
- クライアントコンピュータデバイス上にデータを読み込む方法であって、
コンピュータサーバからクライアントコンピュータデバイスへ、情報のフォルダを表す表示のためのアイコンを含むユーザインターフェスデータを送信し、それにより、前記アイコンが前記クライアントコンピュータデバイス上に表示され、
前記フォルダを開くための前記ユーザインターフェース上でのユーザの選択を示すパス名およびコマンドを、前記コンピュータデバイスからリモートコンピュータで受信し、
前記パス名および前記コマンドを用いて前記リモートコンピュータのプラグイン関数を実行し、
前記プラグイン関数から前記コンピュータデバイスへ前記フォルダのコンテンツのリストを返し、それにより、前記フォルダの前記コンテンツが前記ユーザインターフェース上で階層に表示され、前記コンテンツは、どのストレージデバイス上にもまだ存在しない、方法。 - 請求項1に記載の方法であって、前記コンテンツは、前記どのストレージデバイス上の前記階層にも存在しない、方法。
- 請求項1に記載の方法であって、前記プラグイン関数は、前記リストのみを返し、前記ユーザインターフェースを実装しない、方法。
- 請求項1に記載の方法であって、さらに、
前記コンピュータデバイスのプレゼンテーションアプリケーションを用いて、前記階層に前記コンテンツを表示する、方法。 - 請求項1に記載の方法であって、前記コンテンツは、少なくとも1つのファイルフォルダを含む、方法。
- 請求項1に記載の方法であって、前記コンテンツは、まだ存在しない少なくとも1つのファイルを含む、方法。
- 請求項1に記載の方法であって、前記コマンドは、HTTPのlistコマンドである、方法。
- 請求項1に記載の方法であって、前記リモートコンピュータのサーバのコンパイル済コードが、前記プラグイン関数を呼び出し、前記プラグイン関数は、前記コンパイル済コードの一部ではない、方法。
- クライアントコンピュータデバイス上にデータを読み込む方法であって、
コンピュータサーバからクライアントコンピュータデバイスへ、表示のための情報のファイルを表すアイコンを含むユーザインターフェスデータを送信し、それにより、前記アイコンが前記クライアントコンピュータデバイス上に表示され、前記ファイルは、どのストレージデバイス上にもまだ存在せず、
前記ファイルを開くための前記ユーザインターフェース上でのユーザの選択を示すコマンドおよびパス名を、前記コンピュータデバイスからリモートコンピュータで受信し、
前記ファイルを作成するために、前記パス名および前記コマンドを用いて前記リモートコンピュータのプラグイン関数を実行し、
前記プラグイン関数から前記コンピュータデバイスへ前記ファイルのコンテンツを返し、それにより、前記ファイルの前記コンテンツが、前記クライアントコンピュータデバイスのアプリケーションを用いて前記クライアントコンピュータデバイス上で表示される、方法。 - 請求項9に記載の方法であって、さらに、
フォルダ内に前記ファイルアイコンを含む前記ユーザインターフェースの階層を表示する、方法。 - 請求項9に記載の方法であって、前記プラグイン関数は、前記ファイルコンテンツのみを返し、前記ユーザインターフェースを実装しない、方法。
- 請求項9に記載の方法であって、前記コマンドは、HTTPのgetコマンドである、方法。
- 請求項9に記載の方法であって、前記リモートコンピュータのサーバのコンパイル済コードが、前記プラグイン関数を呼び出し、前記プラグイン関数は、前記コンパイル済コードの一部ではない、方法。
- クライアントコンピュータデバイスからデータを書き出す方法であって、
コンピュータサーバからクライアントコンピュータデバイスへ、表示するための情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信し、それにより、前記アイコンが前記クライアントコンピュータデバイス上に表示され、
前記クライアントコンピュータデバイスから、前記ユーザインターフェース上でのユーザの選択を示す、パス名、ファイルのコンテンツとおよび前記ファイルを前記フォルダに追加するためのコマンドを、リモートコンピュータで受信し、
前記パス名および前記コマンドを用いて前記リモートコンピュータのプラグイン関数を実行し、前記ファイルをストレージに格納し、前記プラグイン関数は、前記ファイルを前記クライアントコンピュータデバイス上に表示するためのユーザインターフェースを全く実装せず、
前記クライアントデバイス上で前記ユーザインターフェースの前記フォルダ内に表示するために、前記プラグイン関数から前記コンピュータデバイスへ前記ファイルの名称を返す、方法。 - 請求項14に記載の方法であって、さらに、
前記コンピュータデバイスのプレゼンテーションアプリケーションを用いて、前記ファイルの前記コンテンツを表示する、方法。 - 請求項14に記載の方法であって、前記コマンドは、HTTPのputコマンドである、方法。
- 請求項14に記載の方法であって、前記リモートコンピュータのサーバのコンパイル済コードが、前記プラグイン関数を呼び出し、前記プラグイン関数は、前記コンパイル済コードの一部ではない、方法。
- 請求項14に記載の方法であって、さらに、
前記プラグイン関数が、前記ファイルに基づいて新規ファイルを作成し、
前記新規ファイルをストレージに格納し、
前記クライアントコンピュータデバイス上で前記ユーザインターフェースの前記フォルダ内に表示するために、前記プラグイン関数によって前記新規ファイルの名称を返す、方法。 - コンピュータサーバ上でプラグイン関数を実行する方法であって、
第1および第2プラグイン関数のための実行可能コードの層をリポジトリからフェッチし、前記コンピュータサーバのローカルディスク上の前記プラグイン関数の各々のためのルートファイルシステムフォルダ内に前記層を解凍し、
前記コンピュータサーバの仮想マシン上で実行するサーバプロセスによって、前記プラグイン関数の前記実行可能コードをロードして、前記プラグイン関数の各々を実行し、前記プラグイン関数の各々は、独自のルートファイルシステムを有し、前記プラグイン関数の各々は、同じネームスペースを共有し、
前記第1プラグイン関数によって、前記仮想マシンのネットワークを用いて、リモート企業コンピュータから第1データをリトリーブし、
前記第2プラグイン関数によって、前記仮想マシンの前記ネットワークを用いて、リモート企業コンピュータから第2データをリトリーブし、
前記第1および第2プラグイン関数の各々が、前記それぞれの第1および第2データを用いて、クライアントコンピュータデバイスに各々送信されるそれぞれの第1および第2データファイルを作成する、方法。 - 請求項19に記載の方法であって、前記プラグイン関数は、同じIPスタックを共有することによって前記同じネームスペースを共有する、方法。
- 請求項19に記載の方法であって、前記ネットワークは、サブネットである、方法。
- 請求項19に記載の方法であって、前記ネットワークは、前記サーバプロセスのシングルVPNを利用する、方法。
- 請求項19に記載の方法であって、前記第1および第2プラグイン関数は、前記同じネットワークを用いて、前記リモート企業コンピュータのデータベースにアクセスする、方法。
- コンピュータサーバ上でプラグイン関数を実行する方法であって、
サーバコンピュータ上のサーバプロセスによってプラグイン関数を呼び出し、前記プラグイン関数は、独自のルートファイルシステムを持つが、独自のネームスペースを持たず、
前記コンピュータサーバ上で前記プラグイン関数を実行し、リモートユーザコンピュータデバイスからコマンドを受信し、
データソースからデータを読み出し、
前記データに基づいてファイルを作成し、前記ファイルの表示に向けて前記リモートユーザコンピュータデバイスに前記ファイルを送信し、前記プラグイン関数は、前記リモートユーザコンピュータデバイス上にユーザインターフェースを全く実装しない、方法。 - 請求項24に記載の方法であって、前記プラグイン関数は、前記コンピュータサーバ上で実行する第2プラグイン関数とネームスペースを共有する、方法。
- 請求項24に記載の方法であって、さらに、
前記リモートユーザコンピュータデバイスからファイル・フォルダ階層のパスを受信する、方法。 - 請求項24に記載の方法であって、さらに、
プレゼンテーションアプリケーションを用いて、前記リモートユーザコンピュータデバイス上に前記ファイルを表示する、方法。 - クライアントコンピュータデバイス上にデータを読み込む方法であって、
コンピュータサーバからクライアントコンピュータデバイスへ、表示するための情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信し、それにより、前記アイコンが前記クライアントコンピュータデバイス上に表示され、
ユーザによって入力されたフォルダ名を有する新規フォルダを作成するために前記ユーザインターフェース上で前記ユーザによってなされた選択を示す前記コンピュータデバイスからのコマンドをリモートコンピュータで受信し、
前記リモートコンピュータのプラグイン関数を実行して、前記フォルダ名を有する前記新規フォルダを作成し、前記コンピュータデバイスの前記ユーザインターフェース上で表示するために前記新規フォルダを返し、
前記フォルダ名に依存する結果を生成するために、前記フォルダ名を入力として用いて前記プラグイン関数を実行する、方法。 - 請求項28に記載の方法であって、さらに、
前記ユーザインターフェース上の階層内に前記新規フォルダを表示し、前記新規フォルダは、コンテンツを全く持たず、
前記ユーザが前記新規フォルダを開く選択をしたことを示すコマンドを受信した後にのみ、前記フォルダ名を入力として用いて前記プラグイン関数を実行する、方法。 - 請求項28に記載の方法であって、さらに、
前記ユーザインターフェース上の階層内に前記新規フォルダを表示し、
前記ユーザが前記新規フォルダを開く選択をしたことを示すコマンドを受信する前に、前記フォルダ名を入力として用いて前記プラグイン関数を実行する、方法。 - 請求項29に記載の方法であって、さらに、
前記プラグイン関数によって前記フォルダ名を検索語として利用し、前記検索語に基づいて少なくとも1つのデジタルオブジェクトを発見し、
前記新規フォルダ内に表示するために、前記少なくとも1つのデジタルオブジェクトの識別子を前記コンピュータデバイスに送信する、方法。 - 請求項30に記載の方法であって、さらに、
前記プラグイン関数によって前記フォルダ名を検索語として利用し、前記検索語に基づいて少なくとも1つのデジタルオブジェクトを発見し、
前記少なくとも1つのデジタルオブジェクトを前記リモートコンピュータのキャッシュ内に格納する、方法。 - 請求項32に記載の方法であって、さらに、
前記ユーザが前記新規フォルダを開く選択をしたことを示すコマンドを受信し、
前記新規フォルダ内に表示するために、前記キャッシュから、前記少なくとも1つのデジタルオブジェクトの識別子を前記コンピュータデバイスに送信する、方法。 - 請求項29に記載の方法であって、さらに、
前記検索語に基づいて、少なくとも1つのデジタルオブジェクトを作成し、
前記新規フォルダ内に表示するために、前記少なくとも1つのデジタルオブジェクトの識別子を前記コンピュータデバイスに送信する、方法。 - 請求項30に記載の方法であって、さらに、
前記検索語に基づいて、少なくとも1つのデジタルオブジェクトを作成し、
前記少なくとも1つのデジタルオブジェクトを前記リモートコンピュータのキャッシュ内に格納する、方法。 - クライアントコンピュータデバイスからデータを書き出す方法であって、
ユーザによって入力されたフォルダ名を有する新規フォルダを作成するためにユーザインターフェース上で前記ユーザによってなされた選択を示すクライアントコンピュータデバイスからのコマンドをリモートコンピュータで受信し、
前記リモートコンピュータのプラグイン関数を実行して、前記フォルダ名を有する前記新規フォルダを作成し、前記コンピュータデバイスの前記ユーザインターフェース上で表示するために前記新規フォルダを返し、
前記コンピュータデバイスの前記ユーザインターフェースを用いて前記ユーザによって前記新規フォルダに追加されたデジタルオブジェクトを前記リモートコンピュータで受信し、
前記プラグイン関数を実行し、前記フォルダ名を用いて前記デジタルオブジェクトを処理することで、前記フォルダ名に依存する結果を生成する、方法。 - 請求項36に記載の方法であって、さらに、
親フォルダを表すアイコンを前記クライアントコンピュータデバイス上に表示し、
前記親フォルダ内に前記新規フォルダを作成することを示す前記ユーザによる前記選択を受信する、方法。 - 請求項36に記載の方法であって、さらに、
前記フォルダ名を用いて前記デジタルオブジェクトを格納するために、前記プラグイン関数を実行する、方法。 - 請求項36に記載の方法であって、さらに、
前記フォルダ名を前記デジタルオブジェクトのメタデータとして追加して、前記メタデータと共に前記デジタルオブジェクトを格納するために、前記プラグイン関数を実行する、方法。 - 請求項36に記載の方法であって、さらに、
前記フォルダ名を前記デジタルオブジェクトに挿入して、前記挿入されたフォルダ名と共に前記デジタルオブジェクトを格納するために、前記プラグイン関数を実行する、方法。 - 請求項36に記載の方法であって、前記新規フォルダは、前記追加されたデジタルオブジェクトを含まない、方法。
- クライアントコンピュータデバイスからメタデータを入力する方法であって、
リモートコンピュータのプラグイン関数をデーモンモードで実行して、前記プラグイン関数を表すフォルダアイコンとユーザ入力アイコンとを備えたユーザインターフェースをクライアントコンピュータデバイス上に表示し、
前記ユーザインターフェース上でユーザによってなされた前記ユーザ入力アイコンの選択を示す前記コンピュータデバイスからのコマンドを前記リモートコンピュータで受信し、
前記プラグイン関数によって、前記コンピュータデバイス上に表示するウェブページを送信し、
前記プラグイン関数によって、前記ユーザによって前記ウェブページ上で入力されたメタデータ値を受信し、
前記メタデータ値に依存する結果を生成するために、前記メタデータ値を入力として用いて前記プラグイン関数を実行する、方法。 - 請求項42に記載の方法であって、さらに、
前記プラグイン関数によって前記メタデータ値を検索語として利用し、前記メタデータ値に基づいて少なくとも1つのデジタルオブジェクトを発見し、
前記フォルダアイコン内に表示するために、前記少なくとも1つのデジタルオブジェクトの識別子を前記コンピュータデバイスに送信する、方法。 - 請求項42に記載の方法であって、さらに、
前記コンピュータデバイスからデジタルオブジェクトを受信して、前記メタデータ値と共に前記デジタルオブジェクトを格納する、方法。 - 請求項42に記載の方法であって、さらに、
前記リモートコンピュータのキャッシュ内の前記フォルダに関連するファイルに前記メタデータ値を格納し、
前記ファイルは、前記コンピュータデバイスの前記ユーザには見えない、方法。 - 請求項42に記載の方法であって、さらに、
前記ユーザ入力アイコンを表示すると共に前記ウェブページを表示するために、前記プラグイン関数によってマイクロウェブサーバを実装する、方法。 - クライアントコンピュータデバイスからメタデータを入力する方法であって、
ユーザによって入力されたフォルダ名を有する新規フォルダを作成するためにユーザインターフェース上で前記ユーザによってなされた選択を示すクライアントコンピュータデバイスからのコマンドをリモートコンピュータで受信し、
前記リモートコンピュータのプラグイン関数を実行して、前記フォルダ名を有する前記新規フォルダを作成し、前記コンピュータデバイスの前記ユーザインターフェース上で表示するために前記新規フォルダを返し、
前記ユーザによって入力された前記フォルダ名にメタデータ値を前記プラグイン関数によって割り当て、
前記メタデータ値に依存する結果を生成するために、前記メタデータ値を入力として用いて前記プラグイン関数を実行する、方法。 - 請求項47に記載の方法であって、さらに、
前記プラグイン関数によって前記メタデータ値を検索語として利用し、前記メタデータ値に基づいて少なくとも1つのデジタルオブジェクトを発見し、
前記新規フォルダ内に表示するために、前記少なくとも1つのデジタルオブジェクトの識別子を前記コンピュータデバイスに送信する、方法。 - 請求項47に記載の方法であって、さらに、
前記コンピュータデバイスの前記ユーザインターフェースを用いて前記ユーザによって前記新規フォルダに追加されたデジタルオブジェクトを前記リモートコンピュータで受信し、
前記デジタルオブジェクトを前記メタデータ値と共に格納する、方法。 - 請求項47に記載の方法であって、さらに、
前記リモートコンピュータのキャッシュ内の前記フォルダに関連するファイルに前記メタデータ値を格納し、前記ファイルは、前記コンピュータデバイスの前記ユーザには見えない、方法。 - クライアントコンピュータデバイスからデータベースと通信する方法であって、
リモートコンピュータの第1プラグイン関数をデーモンモードで実行し、前記第1プラグイン関数によってデータベースとの接続を開き、
前記リモートコンピュータの第2プラグイン関数を介して、前記データベースにアクセスするための前記クライアントコンピュータデバイスからの要求を前記リモートコンピュータで受信し、
前記リモートコンピュータの前記第2プラグイン関数を実行し、前記要求を前記実行中の第1プラグイン関数に送信し、
前記要求で前記第1プラグイン関数によって前記データベースにアクセスし、前記データベースから応答を受信し、
前記応答を前記第1プラグイン関数から前記第2プラグイン関数に送信し、
前記応答を前記第2プラグイン関数から前記クライアントコンピュータデバイスに送る、方法。 - 請求項51に記載の方法であって、前記要求は、読み出し要求であり、前記応答は、デジタルオブジェクトである、方法。
- 請求項51に記載の方法であって、前記要求は、デジタルオブジェクトを含む書き込み要求であり、前記方法は、さらに、
前記デジタルオブジェクトを前記データベースに書き込み、
前記応答は、前記書き込みの肯定応答である、方法。 - 請求項51に記載の方法であって、前記第1および第2プラグイン関数は、同じ関数であり、異なるプロセスとして実行される、方法。
- 請求項51に記載の方法であって、前記第1および第2プラグイン関数は、同じネットワークネームスペースを共有する、方法。
- クライアントコンピュータデバイス上にデータを表示する方法であって、
コンピュータサーバからクライアントコンピュータデバイスへ、表示のための情報のフォルダを表すアイコンを含むユーザインターフェスデータを送信し、それにより、前記アイコンが前記クライアントコンピュータデバイス上に表示され、
前記ユーザインターフェースの前記アイコンに関する動作を示す前記クライアントコンピュータデバイスからのパス名およびユーザインターフェースコマンドを、前記コンピュータサーバで受信し、
前記パス名および前記ユーザインターフェースコマンドを用いて前記コンピュータサーバのプラグイン関数を実行して、前記ユーザインターフェースコマンドを実行し、
前記ユーザインターフェースコマンド内に含まれないさらなるステップを実行するために、前記プラグイン関数を実行し、
表示するために、結果を前記クライアントコンピュータデバイスに返す、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、情報の新規フォルダを作成するためのコマンドであり、前記方法は、さらに、
前記クライアントコンピュータデバイスから前記新規フォルダの名称を受信し、前記名称を前記プラグイン関数への引数として用いて、前記さらなるステップを実行する、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、情報の新規ファイルを書き込むためのコマンドであり、前記方法は、さらに、
前記新規ファイルを前記コンピュータサーバで受信し、
前記新規ファイルに基づいてデータを作成して、前記さらなるステップを実行する、方法。 - 請求項58に記載の方法であって、さらに、
表示するために、前記作成されたデータを前記クライアントコンピュータデバイスに返す、方法。 - 請求項58に記載の方法であって、さらに、
前記作成されたデータを永久ストレージに書き込む、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、情報の新規ファイルを書き込むためのコマンドであり、前記方法は、さらに、
前記新規ファイルを前記コンピュータサーバで受信し、
前記フォルダ内以外のストレージに前記新規ファイルを書き込んで、前記さらなるステップを実行する、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、情報の新規ファイルを書き込むためのコマンドであり、前記方法は、さらに、
前記新規ファイルを前記コンピュータサーバで受信し、
前記フォルダに固有のメタデータと共に前記新規ファイルをストレージに書き込んで、前記さらなるステップを実行する、方法。 - 請求項62に記載の方法であって、前記メタデータは、前記フォルダの名称である、方法。
- 請求項62に記載の方法であって、前記メタデータは、前記クライアントコンピュータデバイスのユーザによって以前に入力されている、方法。
- 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、情報の前記フォルダを開くためのコマンドであり、前記方法は、さらに、
前記フォルダのコンテンツを前記コンピュータサーバから前記クライアントコンピュータデバイスに返し、
前記コンテンツは、まだ存在しないファイルの名称を含む、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、前記フォルダ内に存在するファイル名を有するファイルを読み込むためのコマンドであり、前記方法は、さらに、
前記ファイルを作成して、前記さらなるステップを実行し、
前記ファイルを前記クライアントコンピュータデバイスに返す、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、前記フォルダのファイルまたは前記フォルダを削除するためのコマンドであり、前記方法は、さらに、
前記さらなるステップを実行するために、前記ファイルまたは前記フォルダの名称に基づいて、もしくは、前記ファイルまたは前記フォルダのコンテンツに基づいて、さらなる処理を実行する、方法。 - 請求項56に記載の方法であって、前記ユーザインターフェースコマンドは、前記フォルダまたはサブフォルダのファイルを移動させるためのコマンドであり、前記方法は、さらに、
前記さらなるステップを実行するために、前記ファイルまたは前記フォルダの名称に基づいて、もしくは、前記ファイルまたは前記フォルダのコンテンツに基づいて、さらなる処理を実行する、方法。 - コンピュータの仮想マシンにおいて、プラグイン関数からファイルシステムに書き込みを行う方法であって、
リモートコンピュータデバイスの第1ユーザの要求に応じて、前記仮想マシンのプラグイン関数を実行し、
ファイル名を有するファイルを前記プラグイン関数で受信し、
前記プラグイン関数の識別子および前記第1ユーザの識別子に基づいて、前記ファイル名に対して一意ファイル名を作成し、
前記コンピュータのローカルディスク上で前記ファイルを識別するために前記一意ファイル名を用いて、前記プラグイン関数によって前記ローカルディスク上のファイルシステムのユーザフォルダに前記ファイルを書き込む、方法。 - 請求項69に記載の方法であって、さらに、
前記プラグイン関数が前記ローカルディスク上のディスクスペースを割り当てることなしに、前記プラグイン関数によってファイルを前記ローカルディスクに書き込む、方法。 - 請求項70に記載の方法であって、前記仮想マシンは、実行中のサーバプロセスを備え、前記方法は、さらに、
前記サーバプロセスによって前記ローカルディスク上のスペースを割り当てる、方法。 - 請求項71に記載の方法であって、さらに、
前記サーバプロセスによって、少なくとも1つのファイルを前記ローカルディスクからリモートオブジェクトストアにスワップアウトする、方法。 - 請求項72に記載の方法であって、前記少なくとも1つのファイルは、前記ローカルディスク上および前記リモートオブジェクトストア内で同じ一意名を有する、方法。
- 請求項70に記載の方法であって、前記仮想マシンは、実行中のサーバプロセスを備え、前記方法は、さらに、
前記プラグイン関数の関与なしに、前記サーバプロセスによってファイルを前記ローカルディスクからリモートオブジェクトストアに移動させる、方法。 - 請求項70に記載の方法であって、前記プラグイン関数によって前記ローカルディスクに書き込まれる前記ファイルの量は、前記オブジェクトストアの容量によって制限される、方法。
- 請求項70に記載の方法であって、前記プラグイン関数によって前記ローカルディスクに書き込まれる前記ファイルの量は、前記コンピュータのオペレーティングシステムによって制限される、方法。
- 請求項69に記載の方法であって、前記ファイルの受信は、前記リモートコンピュータデバイスから前記ファイルを入力し、前記ファイルを作成し、リモートサービスから前記ファイルを入力し、または、既存のファイルを修正することを含む、方法。
- 請求項69に記載の方法であって、前記一意ファイル名は、前記ユーザの組織の識別子にも基づく、方法。
- 請求項69に記載の方法であって、さらに、
第2リモートコンピュータデバイスの第2ユーザの要求に応じて、前記プラグイン関数を実行し、
前記ファイルの前記ファイル名と同じ第2ファイル名を有する第2ファイルを前記コンピュータの前記ローカルディスク上で識別するために第2一意ファイル名を用いて、前記ローカルディスク上の前記ファイルシステムの前記ユーザフォルダに前記第2ファイルを書き込む、方法。 - 請求項69に記載の方法であって、さらに、
前記ファイル名、前記プラグイン関数の前記識別子、および、前記第1ユーザの前記識別子を組み合わせることによって、前記一意ファイル名を作成する、方法。 - コンピュータの仮想マシンにおいて、前記コンピュータのローカルディスクのスペースを管理する方法であって、
前記ローカルディスク上で利用可能なストレージスペースを増やすか否かを、前記仮想マシンによって決定する工程と、
利用可能なストレージスペースを増やすと決定された場合に、前記ローカルディスクから削除される格納ファイルを選択する工程と、
前記格納ファイルを前記ローカルディスクからリモートストレージにコピーする工程と、
前記格納ファイルによって利用されていた前記ローカルディスク上のスペースを解放する工程とを備える、方法。 - 請求項81に記載の方法であって、前記方法の前記工程は、バックグラウンドで実行し、前記決定する工程は、定期的に実行されるか、または、前記ローカルディスク上で利用可能なスペースが閾値数未満であると判定された時に実行される、方法。
- 請求項81に記載の方法であって、さらに、
新規ファイルを前記ローカルディスクに書き込むための要求を前記仮想マシンの別のプロセスから受信する工程と、
前記ローカルディスク上で利用可能なストレージスペースを増やすか否かを、前記要求に基づいて決定する工程と、
前記スペースを解放する工程の後に、前記新規ファイルを前記ローカルディスクに書き込む工程と、
を備える、方法。 - 請求項83に記載の方法であって、さらに、
前記ローカルディスク上で利用可能なストレージスペースを増やすか否かを、利用可能なストレージスペースまたは前記ローカルディスク上で利用可能なアイノードスペースにも基づいて決定する工程を備える、方法。 - 請求項83に記載の方法であって、前記要求は、前記ローカルディスク上のファイルシステムのユーザフォルダに前記新規ファイルを書き込むための要求である、方法。
- 請求項81に記載の方法であって、さらに、
前記決定する工程の前に、前記仮想マシンの別のプロセスによって、前記ローカルディスク上のファイルシステムのユーザフォルダに前記格納ファイルを書き込む工程と、
前記コピーする工程の後に、前記ファイルシステムの前記ユーザフォルダから前記格納ファイルを要求することにより、前記仮想マシンの前記別のプロセスによって前記格納ファイルを読み出す工程と、
前記サーバプロセスによって前記格納ファイルを前記リモートストレージから前記ローカルディスクに移動させる工程と、
を備える、方法。 - 請求項81に記載の方法であって、さらに、
前記格納ファイルが最も長い間利用されていないことに基づいて、前記格納ファイルを選択する工程を備える、方法。 - 請求項81に記載の方法であって、さらに、
前記格納ファイルをリモートストレージにコピーして、前記ローカルディスクに前記格納ファイルを格納するために用いたのと同じ名称を用いて前記格納ファイルを格納する工程を備える、方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762501822P | 2017-05-05 | 2017-05-05 | |
US62/501,822 | 2017-05-05 | ||
US15/675,193 | 2017-08-11 | ||
US15/675,193 US10838920B2 (en) | 2017-05-05 | 2017-08-11 | Plug-in function platform and methods |
PCT/IB2018/052639 WO2018203166A1 (en) | 2017-05-05 | 2018-04-16 | Plug-in function platform and methods |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020521209A true JP2020521209A (ja) | 2020-07-16 |
Family
ID=64014739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019560393A Pending JP2020521209A (ja) | 2017-05-05 | 2018-04-16 | プラグイン関数プラットフォームおよび方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10838920B2 (ja) |
EP (1) | EP3619604A1 (ja) |
JP (1) | JP2020521209A (ja) |
CA (1) | CA3062252A1 (ja) |
WO (1) | WO2018203166A1 (ja) |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819586B2 (en) * | 2011-05-27 | 2014-08-26 | Microsoft Corporation | File access with different file hosts |
US10387673B2 (en) | 2017-06-30 | 2019-08-20 | Microsoft Technology Licensing, Llc | Fully managed account level blob data encryption in a distributed storage environment |
US10764045B2 (en) * | 2017-06-30 | 2020-09-01 | Microsoft Technology Licensing, Llc | Encrypting object index in a distributed storage environment |
US10659225B2 (en) | 2017-06-30 | 2020-05-19 | Microsoft Technology Licensing, Llc | Encrypting existing live unencrypted data using age-based garbage collection |
US10908926B2 (en) * | 2017-09-09 | 2021-02-02 | Box, Inc. | Plug-in management wrappers |
US10572274B2 (en) * | 2017-09-22 | 2020-02-25 | Microsoft Technology Licensing, Llc | Cross platform custom functions |
US10721095B2 (en) * | 2017-09-26 | 2020-07-21 | Oracle International Corporation | Virtual interface system and method for multi-tenant cloud networking |
US10534587B1 (en) | 2017-12-21 | 2020-01-14 | Intuit Inc. | Cross-platform, cross-application styling and theming infrastructure |
US11157259B1 (en) | 2017-12-22 | 2021-10-26 | Intuit Inc. | Semantic and standard user interface (UI) interoperability in dynamically generated cross-platform applications |
US10757082B2 (en) * | 2018-02-22 | 2020-08-25 | International Business Machines Corporation | Transforming a wrapped key into a protected key |
US10761825B2 (en) * | 2018-03-30 | 2020-09-01 | Barracuda Networks, Inc. | System and method for application plug-in distribution |
US11003543B2 (en) * | 2018-04-27 | 2021-05-11 | EMC IP Holding Company LLC | Generic metadata tags with namespace-specific semantics in a storage appliance |
US10949272B2 (en) | 2018-06-14 | 2021-03-16 | Microsoft Technology Licensing, Llc | Inter-application context seeding |
WO2020000445A1 (zh) * | 2018-06-29 | 2020-01-02 | 华为技术有限公司 | 一种浏览应用文件夹的方法及电子设备 |
US11455175B2 (en) * | 2018-07-16 | 2022-09-27 | Microsoft Technology Licensing, Llc | Transparently remote execution of development tool extensions |
US11023419B2 (en) * | 2018-08-13 | 2021-06-01 | Sap Se | Folder key management |
CN109600443B (zh) * | 2018-12-14 | 2022-02-08 | 广州优虎科技有限公司 | 客户端功能模块后台运营系统及方法 |
WO2020202041A1 (en) | 2019-04-02 | 2020-10-08 | Esoptra, N.V. | Content centric sharing of digital objects |
CN110188211B (zh) * | 2019-04-25 | 2023-06-27 | 深圳市布谷鸟科技有限公司 | 一种应用于安卓车载系统快速加载多媒体应用列表的方法 |
US11321101B2 (en) * | 2019-07-10 | 2022-05-03 | Vmware, Inc. | Deployment and isolation of plugins in a virtualized computing environment |
JP6847498B2 (ja) * | 2019-07-22 | 2021-03-24 | 丸紅Itソリューションズ株式会社 | 遠隔リソースに関する設定情報を表示する設定情報表示システム、方法、およびプログラム |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11250007B1 (en) | 2019-09-27 | 2022-02-15 | Amazon Technologies, Inc. | On-demand execution of object combination code in output path of object storage service |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US11263220B2 (en) * | 2019-09-27 | 2022-03-01 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
US20210141769A1 (en) * | 2019-11-12 | 2021-05-13 | EMC IP Holding Company LLC | Moving File Sequences Together Across Multiple Folders |
US11494202B2 (en) * | 2020-01-08 | 2022-11-08 | Salesforce.Com, Inc. | Database replication plugins as a service |
CN111385146A (zh) * | 2020-03-05 | 2020-07-07 | 山东汇贸电子口岸有限公司 | 一种基于Kong的API网关路由实体配置方法及系统 |
CN113672611A (zh) * | 2020-05-13 | 2021-11-19 | 华晨宝马汽车有限公司 | 用于实现电子制表软件中的sql查询的方法和设备 |
US11916964B2 (en) * | 2020-06-03 | 2024-02-27 | ArecaBay, Inc. | Dynamic, runtime application programming interface parameter labeling, flow parameter tracking and security policy enforcement using API call graph |
EP4172795A1 (en) * | 2020-06-30 | 2023-05-03 | Seff Technology Corporation | System and method for digital information management |
CN111736922B (zh) * | 2020-07-23 | 2020-11-13 | 平安国际智慧城市科技股份有限公司 | 插件调用方法、装置、电子设备及存储介质 |
CN112099709B (zh) * | 2020-09-14 | 2023-02-24 | Oppo广东移动通信有限公司 | 多媒体对象的整理方法及装置、电子设备、存储介质 |
US11442703B2 (en) | 2020-09-22 | 2022-09-13 | Cisco Technology, Inc. | Domain-specific language for serverless network functions |
US11126415B1 (en) * | 2020-09-22 | 2021-09-21 | Cisco Technology, Inc. | Combining domain-specific language with general-purpose language for serverless network functions |
US11625230B2 (en) | 2020-09-22 | 2023-04-11 | Cisco Technology, Inc. | Identifying execution environments for deploying network functions |
US20220129295A1 (en) * | 2020-10-25 | 2022-04-28 | Meta Platforms, Inc. | Server-side hosted environment for a cloud gaming system |
CN112306578B (zh) * | 2020-11-06 | 2022-04-19 | 湖南快乐阳光互动娱乐传媒有限公司 | 可配置数据源的DataFetcher实现系统和方法 |
US11971863B2 (en) | 2020-11-23 | 2024-04-30 | Oracle International Corporation | Techniques for using an in-memory only file system as an interface for managing computer systems and user space file systems |
US11494207B2 (en) * | 2020-11-23 | 2022-11-08 | Arista Networks, Inc. | Command line interface extension process |
US20220222309A1 (en) * | 2021-01-14 | 2022-07-14 | The.com Platform Inc | Customizable Digital Replication And Transfer Application And Methods of Use Thereof |
CN113194148A (zh) * | 2021-05-08 | 2021-07-30 | 深圳市智胜网科技有限公司 | 一种物联网系统上位机和终端设备的数据交互方法 |
CN113094038A (zh) * | 2021-05-10 | 2021-07-09 | 乐聚(深圳)机器人技术有限公司 | 函数编程积木块的处理方法、装置、终端及存储介质 |
US20230049332A1 (en) * | 2021-08-16 | 2023-02-16 | Red Hat, Inc. | Coordinating execution of computing operations for software applications |
US11961541B2 (en) * | 2022-02-24 | 2024-04-16 | Quantum Corporation | System and method for writing data to tape and reading data from tape using a restful interface |
CN114942796A (zh) * | 2022-05-05 | 2022-08-26 | 北京达佳互联信息技术有限公司 | 插件编译及调用方法、装置、设备及存储介质 |
CN115268797B (zh) * | 2022-09-26 | 2023-01-10 | 创云融达信息技术(天津)股份有限公司 | 一种通过WebDav实现系统与对象存储通信的方法 |
CN115755709B (zh) * | 2022-11-25 | 2023-08-18 | 北京北方华创微电子装备有限公司 | 运行环境数据采集方法、装置、电子设备及存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6356863B1 (en) * | 1998-09-08 | 2002-03-12 | Metaphorics Llc | Virtual network file server |
US20070255677A1 (en) * | 2006-04-28 | 2007-11-01 | Sun Microsystems, Inc. | Method and apparatus for browsing search results via a virtual file system |
US20120143931A1 (en) * | 2009-02-17 | 2012-06-07 | Tagle Information Technology Inc. | Context-aware folders |
JP5950698B2 (ja) * | 2012-05-31 | 2016-07-13 | キヤノン株式会社 | 情報処理装置 |
US9569728B2 (en) * | 2014-11-14 | 2017-02-14 | Bublup Technologies, Inc. | Deriving semantic relationships based on empirical organization of content by users |
US10678750B2 (en) * | 2015-08-28 | 2020-06-09 | AirWatcha, LLC | On demand file sync |
KR102447907B1 (ko) * | 2015-11-05 | 2022-09-28 | 삼성전자주식회사 | 추천 객체를 제공하기 위한 전자 장치 및 방법 |
-
2017
- 2017-08-11 US US15/675,193 patent/US10838920B2/en active Active
-
2018
- 2018-04-16 WO PCT/IB2018/052639 patent/WO2018203166A1/en active Application Filing
- 2018-04-16 EP EP18724322.5A patent/EP3619604A1/en not_active Withdrawn
- 2018-04-16 CA CA3062252A patent/CA3062252A1/en not_active Abandoned
- 2018-04-16 JP JP2019560393A patent/JP2020521209A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US20180322136A1 (en) | 2018-11-08 |
CA3062252A1 (en) | 2018-11-08 |
WO2018203166A1 (en) | 2018-11-08 |
EP3619604A1 (en) | 2020-03-11 |
US10838920B2 (en) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10838920B2 (en) | Plug-in function platform and methods | |
JP6621543B2 (ja) | ハイブリッドアプリケーションの自動更新 | |
US10013185B2 (en) | Mapping systems and methods of an accelerated application-oriented middleware layer | |
US9298747B2 (en) | Deployable, consistent, and extensible computing environment platform | |
US10908977B1 (en) | Efficient message queuing service | |
EP2279602B1 (en) | Systems and methods for remoting multimedia plugin calls | |
EP3555771B1 (en) | Systems and methods for list retrieval in a storage device | |
US10210172B1 (en) | File system integration and synchronization between client and server | |
EP1601164A1 (en) | WEB service application protocol and SOAP processing model | |
JP2016529599A (ja) | コンテンツクリップボードの同期 | |
US20150052105A1 (en) | Cloud-based synchronization of related file sets | |
KR101991537B1 (ko) | 자율형 네트워크 스트리밍 기법 | |
US10242215B2 (en) | Content preview including sharable information | |
JP2010519625A (ja) | ライブエンティティインターネットストアサービス | |
US20160179789A1 (en) | Content localization using fallback translations | |
US10891259B2 (en) | User driven data pre-fetch | |
US20230101774A1 (en) | Techniques for performing clipboard-to-file paste operations | |
US20130179414A1 (en) | Mechanisms for connecting files between applications | |
CN116034576B (zh) | 基于cos集群域名系统的跨多个cos集群的容器编排系统(cos)服务发现 | |
US20140181258A1 (en) | Communicating large amounts of data over a network with improved efficiency | |
WO2016201547A1 (en) | A computer-implemented method of aggregating and presenting digital photos from numerous sources | |
US11386115B1 (en) | Selectable storage endpoints for a transactional data storage engine | |
Wang et al. | Rio: a personal storage system in multi-device and cloud | |
Farkas et al. | Data Bridge: solving diverse data access in scientific applications | |
Patten | An active distributed storage architecture. |