(57)【要約】  時間制限メッセージの効率的な処理を、本明細書において記載する。ある実装形態では、メッセージが、時間制限メッセージまたは非時間制限メッセージのいずれかとして分類される。時間制限メッセージは次いで、非時間制限メッセージとは別に処理される。時間制限メッセージの例は、スパムｅメールあるいは保存ポリシーの対象となる他のタイプまたはクラスのｅメールを含む場合があり、その結果こうしたメッセージは、ある程度の設定期間だけ保持される。時間制限メッセージに関するメタデータは、メッセージとは別にまとめられ格納され、そうすることによって、メタデータの、メッセージとは別の格納および処理の最適化を可能にする。時間制限メッセージは、まとめて処理される前に蓄積され、そうすることによって、時間制限メッセージによって費やされるＩ／Ｏ動作の数を削減し、時間制限メッセージの処理をサポートするリソースの量およびコストを削減する。
2008546076.tif 000002
【特許請求の範囲】
【請求項１】
複数のメッセージを、時間制限メッセージおよび非時間制限メッセージの１つとして分類するステップ、ならびに
前記時間制限メッセージを、前記非時間制限メッセージとは別に処理するステップを備えることを特徴とする方法。
【請求項２】
前記時間制限メッセージに関するメタデータをまとめるステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記メタデータを、前記時間制限メッセージに対応するメッセージ本文とは別に格納するステップをさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
メタデータをまとめるステップは、前記メタデータの少なくとも一部分に対応する時間制限メッセージが格納されるログファイルを含む格納マシンを判定するステップを含むことを特徴とする請求項２に記載の方法。
【請求項５】
複数の前記時間制限メッセージを１つのデータ構造に蓄積するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記データ構造にある前記複数の時間制限メッセージを、少なくとも１つのログファイルにまとめて書き込むステップをさらに備えることを特徴とする請求項５に記載の方法。
【請求項７】
前記メッセージを分類するステップは、前記メッセージの少なくとも一部をスパムｅメールとして分類するステップを含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記メッセージを分類するステップは、前記メッセージの少なくとも一部を、事前定義された保存ポリシーの対象であるｅメールとして分類するステップを含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記時間制限メッセージに適用可能な保存期間パラメータの満了に応答して、前記時間制限メッセージを消去するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記時間制限メッセージをデータストアから読み出すステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１１】
複数のメッセージを、時間制限メッセージおよび非時間制限メッセージの１つとして分類する手段と、
前記時間制限メッセージを、前記非時間制限メッセージとは別に処理する手段とを備えることを特徴とする装置。
【請求項１２】
前記時間制限メッセージに関するメタデータをまとめる手段をさらに備えることを特徴とする請求項１１に記載の装置。
【請求項１３】
前記メタデータを、前記時間制限メッセージに対応するメッセージ本文とは別に格納する手段をさらに備えることを特徴とする請求項１２に記載の装置。
【請求項１４】
メタデータをまとめる前記手段は、前記メタデータの少なくとも一部分に対応する時間制限メッセージが格納されるログファイルを含む格納マシンを判定する手段を含むことを特徴とする請求項１２に記載の装置。
【請求項１５】
前記メッセージを分類する前記手段は、前記メッセージの少なくとも一部をスパムｅメールとして分類する手段を含むことを特徴とする請求項１１に記載の装置。
【請求項１６】
前記メッセージを分類する前記手段は、前記メッセージの少なくとも一部を、事前定義された保存ポリシーの対象であるｅメールとして分類する手段を含むことを特徴とする請求項１１に記載の装置。
【請求項１７】
実行されると、コンピューティングデバイスに、
複数のメッセージを、時間制限メッセージおよび非時間制限メッセージの１つとして分類し、
前記時間制限メッセージを、前記非時間制限メッセージとは別に処理するよう指令するコンピュータ実行可能命令を備えることを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項１８】
前記時間制限メッセージに関するメタデータをまとめるよう指令するコンピュータ実行可能命令をさらに備えることを特徴とする請求項１７に記載の１つまたは複数のコンピュータ可読媒体。
【請求項１９】
前記メタデータを、前記時間制限メッセージに対応するメッセージ本文とは別に格納するよう指令するコンピュータ実行可能命令をさらに備えることを特徴とする請求項１８に記載の１つまたは複数のコンピュータ可読媒体。
【請求項２０】
複数の前記時間制限メッセージを１つのデータ構造に蓄積し、前記データ構造にある前記複数の時間制限メッセージを、少なくとも１つのログファイルにまとめて書き込むよう指令するコンピュータ実行可能命令をさらに備えることを特徴とする請求項１９に記載の１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時間制限メッセージの効率的な処理に関する。
【背景技術】
【０００２】
ｅメールサービス、法人企業、およびインターネットサービスプロバイダ（ＩＳＰ）によって届き処理されるメッセージの大部分を、スパムが構成している。スパムの蔓延のせいで、ｅメールサービスおよびＩＳＰの帯域幅およびハードウェアリソースのかなりの部分が、スパムの取扱いおよび処理に充てられる。同時に、スパムは通常、異なるプロパティを有し、通常のメールとは異なったやり方で扱われるので、こうした特定のプロパティを利用し、特性を扱うことによって、ｅメールサーバおよび他のハードウェアの性能を最適化する機会がある。より具体的には、スパムメッセージは、通常のメールメッセージより小さいものである傾向があり、読まれることは比較的少なく、それ程重要でもエンドユーザによって評価されることもなく、したがってまとめて消去され、通常は一定の期間（たとえば、数日間）の後で自動的に消去される。
【０００３】
同様の状況において、法人企業は、ｅメールなどのメッセージトラフィックの管理および格納において同様の問題に直面し得る。より具体的には、このような企業は、スパムだけでなく、企業で働く人達にやり取りされる大量の非スパムメッセージの影響も受ける場合がある。企業内のｅメールサーバによって格納されるようなメッセージの量を削減するために、管理者は、特定のクラスのメッセージが所与の期間の後で自動的に消去されることを命じるポリシーを確立することができる。たとえば、いくつかのタイプまたはクラスのメッセージを、「スパム」と見なされるかどうかに関わらず、送られ、または受信されてから３０日後に自動的に消去することができる。この意味において、このようなクラスの非スパムメッセージは、両方とも定められた期間に亘って保持され、この期間の満了後に自動的に消去されるという点において、一部の特性をスパムと共有し得る。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
かなりの数のメッセージの処理、管理、および消去には通常、かなりの数の入出力（Ｉ／Ｏ）動作を実施するメッセージサーバを必要とする。このような動作は、ハードウェア、たとえばディスクドライブを、Ｉ／Ｏ動作の「ペイロード」と見なすことができるデータを実際に移動するように準備する際、相当なオーバーヘッドを伴うことが知られている。ただし、このようなメッセージの処理が最適化された場合、このような処理のサポートに委ねられるハードウェアリソースは、削減することも整理することもでき、そうすることによって、ＩＳＰ、ｅメールサービスプロバイダ、法人企業などによって負担される全体的動作コストを削減する。本明細書における教示内容は、この必要性および当該分野における他の必要性に対処する。
【課題を解決するための手段】
【０００５】
時間制限メッセージの効率的な処理を、本明細書において記載する。
【０００６】
ある実装形態では、メッセージが、時間制限（ｔｉｍｅ−ｂｏｕｎｄｅｄ）メッセージまたは非時間制限（ｎｏｎ−ｔｉｍｅ−ｂｏｕｎｄｅｄ）メッセージのいずれかとして分類される。時間制限メッセージは次いで、非時間制限メッセージとは別に処理される。時間制限メッセージの例は、スパムｅメールあるいは保存ポリシーの対象となる他のタイプまたはクラスのｅメールを含む場合があり、その結果こうしたメッセージは、ある程度の設定期間だけ保持される。時間制限メッセージに関するメタデータは、メッセージとは別にまとめられ格納され、そうすることによって、メタデータの、メッセージとは別の格納および処理の最適化を可能にする。時間制限メッセージは、まとめて処理される前に蓄積され、そうすることによって、時間制限メッセージによって費やされるＩ／Ｏ動作の数を削減し、時間制限メッセージの処理をサポートするリソースの量およびコストを削減する。
【０００７】
詳細な説明を、添付の図面を参照して記述する。図面において、参照番号の左端の数字（群）は、参照番号が最初に表れる図を識別する。異なる図面における同じ参照番号の使用は、類似または同一の項目を示す。
【発明を実施するための最良の形態】
【０００８】
図１は、本明細書における教示内容によって提供されるハイレベルデータフロー１００を示す。メッセージ１０５が、メッセージ分類装置（ｍｅｓｓａｇｅ  ｃｌａｓｓｉｆｉｅｒ）１１０によって受信される。メッセージ分類装置１１０は、こうしたメッセージ１０５を、少なくとも２つのカテゴリに分割し、第１のカテゴリは時間制限されたメッセージ１１５を含み、少なくとも第２のカテゴリは時間制限されていないメッセージ１２０を含む。時間制限メッセージ１１５は、保持される時間の長さを規定する何らかの規則の対象であるメッセージを含む。メッセージ１１５のうち、異なるいくつかは、１つまたは複数の異なる保存期限の対象となり得る。図１は、見本となる２組のメッセージ１１５を示し、第１組のメッセージ１１５（１）は５日間の保存期限の対象であり、第２組のメッセージ１１５（２）は、３０日間の保存期限の対象である。わかりやすくし、かつ便宜上、２組のメッセージ１１５を図に示すが、任意の数の異なる保存期限が、異なるいくつかの組の時間制限メッセージ１１５に適用されよう。
【０００９】
メッセージ１１５は、時間制限メッセージ１１５用の管理および記憶システム（ｓｔｏｒａｇｅ  ｓｙｓｔｅｍ）１２５に経路指定される。システム１２５については、本明細書において詳しく説明する。わかりやすくするため、かつ便宜上、２組のメッセージ１１５（１）および１１５（２）が、管理および記憶システム１２５の１つのインスタンスに経路指定されているのを示す。ただし、管理および記憶システム１２５のそれぞれのインスタンスは、異なる保存期間の対象である異なる各組のメッセージ１１５ごとに実装できることに留意されたい。
【００１０】
非時間制限メッセージ１２０は、保持される時間の長さを規定するどの規則の対象でもなく、したがって無期限に保持されるメッセージ１２０を含む。こうしたメッセージ１２０は、非時間制限メッセージ１２０用の従来の管理および記憶システム１３０に経路指定することができる。
【００１１】
図１に示されているデータフロー１００は、様々な環境において展開することができる。第１の例として、データフロー１００は、複数の加入者にｅメールサービスを提供するＩＳＰという状況において展開することができる。この第１の例において、メッセージ１０５は、加入者に着信するｅメールの形をとることができ、メッセージ分類装置１１０は、スパムフィルタの形をとり得る。時間制限メッセージ１１５は、メッセージ分類装置１１０によってスパムと識別されるｅメールの形をとり得る。このＩＳＰは、スパムと分類されたメッセージ１０５が保持される時間の長さを指定するポリシーを実装することができる。限定ではなく、考察の便宜上、この持続時間を、本明細書において「保存期間」と呼ぶ。たとえば、スパムとして分類されたメッセージ１０５は、５日間の保存期間の対象となり得る。この例では、スパムと分類されたメッセージ１０５は、管理および記憶システム１２５に経路指定され、システム１２５は、後でさらに詳しく説明するように、スパムを管理し、保存期間の満了後に消去する。
【００１２】
第２の例として、データフロー１００は、たとえば所与の法人企業にサービスを提供するｅメールアプリケーションという状況において展開することができる。このような企業は、企業によって受信された、または企業から送られた特定のクラスのｅメール用の保存期限を規定するポリスを実装することができる。たとえば、限定ではなく、所与の企業が、「送られた」ｅメールの形のメッセージ１０５用に３０日間の保存期間を指定することができる。この例では、メッセージ分類装置１１０が、こうした「送られた」ｅメールを識別し、このポリシーに準じた配置のために管理および記憶システム１２５に経路指定することになる。
【００１３】
図２は、時間制限メッセージ１１５を扱う、図１に示されている管理および記憶システム１２５に関連づけられたコンポーネントおよびデータフローを示す。管理および記憶システム１２５は、時間制限メッセージ１１５を受信するフロントエンド２０５を含み、フロントエンド２０５と通信する複数のクラスタ２１０（１）および２１０（Ｎ）（集合的に、クラスタ２１０）をさらに含む。フロントエンド２０５は、様々なクラスタ２１０の間で負荷を分散し、破線２１５で表すように、時間制限メッセージ１１５の所与のいくつかを、クラスタ２１０のいくつかに経路指定する。
【００１４】
Ｎ個のクラスタ２１０が図２に示されているが、この構成、および本明細書において例示する他の構成は、便宜上および簡潔さのためだけに選ばれたものであり、本明細書における教示内容を限定するものではない。そうではなく、本明細書における教示内容は、任意の数のクラスタ２１０で実装することができ、Ｎは、クラスタの総数がＮとなるように選ばれた、ゼロより大きい整数である。この概要は、整数Ｎに関連して本明細書に示されているどのコンポーネントにも当てはまる。
【００１５】
図３は、図１および２に示されている管理および記憶システム１２５に関連づけられたコンポーネントおよびデータフロー、特にクラスタ２１０のコンポーネントをさらに詳しく示す。所与のクラスタ２１０は、複数のサーバマシン３０５（１）および３０５（Ｎ）（集合的に、サーバマシン３０５）を含んでよく、こうしたサーバマシン上で、クラスタ２１０を稼動するソフトウェアが実行する。サーバマシン３０５の適切な例は、本明細書において教示する機能をサポートするように構成された、ピコサーバ（「ＰＳｅｒｖ」）というウェブサーバである。
【００１６】
フロントエンド２０５は、所与の時間制限メッセージ１１５を受信するための所与のクラスタ２１０を選択する。選択されたクラスタ２１０中の所与のサーバマシン３０５は、図４に関連してさらに詳しく後述するように、所与の時間制限メッセージ１１５の本文３１０を、１つまたは複数のマシン３１５に格納するためにフォワードする。サーバマシン３０５はまた、時間制限メッセージ１１５に関連したメタデータ３２０をヘッダ構造に投入し、このメタデータ３２０をメタデータ格納構造３２５に経路指定するが、これらすべてについては、図５に関連して、以下でより詳しく述べる。
【００１７】
サーバマシン３０５は、メッセージ本文３１０およびメタデータ３２０を別個の格納構造に書き込むことができ、そうすることによって、メッセージ本文３１０およびメタデータ３２０を、互いとは別々に格納させる。メッセージ本文３１０は全体として、メッセージに関連したどのヘッダデータも含むと見なされるが、ヘッダ構造自体は、メタデータ３２０を含み、メッセージ本文３１０とは別に格納することができる。メッセージ本文３１０をメタデータ３２０とは別に格納することにより、管理および記憶システム１２５がメッセージ本文３１０およびメタデータ３２０の処理を互いからはそれぞれ独立して最適化することが可能になり得る。本明細書で使用する「処理」という用語は、少なくともメッセージを受信すること、扱うこと、格納すること、または取得すること、あるいは適用可能などの保存期間の満了後にもメッセージを消去することを含み得る。
【００１８】
図３は、Ｎ個のサーバマシン３０５（それぞれ、サーバマシン３０５（１）および３０５（Ｎ））とＮ個の格納マシン（ストレージマシン（ｓｔｏｒａｇｅ  ｍａｃｈｉｎｅ））３１５（それぞれ、格納マシン３１５（１）および３１５（Ｎ））とを、便宜上かつ簡潔さのためだけに示す。ただし、この例示は、本明細書における教示内容を限定するものではないことに留意されたい。そうではなく、本明細書における教示内容は、任意の数のサーバマシン３０５および格納マシン３１５でも実装することができる。より具体的には、単一のボックスが、サーバマシン３０５、格納マシン３１５、およびメタデータ記憶装置３２５を稼動させることも収容することもできる。あるいは、前述のマシンの一部または全部は、他のボックス上でも実装することができる。
【００１９】
図４は、図３に示されている時間制限メッセージ１１５の本文３１０の処理および格納に関連づけられたコンポーネントおよびデータフローをより詳しく示す。図３で上述したように、メッセージ本文３１０およびメタデータ３２０は、分離され、扱われ、別個の構造に格納される。図４は、メッセージ本文３１０の管理に対処し、図５は、メタデータ３２０の管理に対処する。
【００２０】
各サーバマシン３０５は、メッセージ本文３１０が届いたときにそこに格納されるデータ構造４０５を維持する。このデータ構造４０５は、サーバマシン３０５のメモリ内に存在し得る。データ構造４０５の実際の性質は重大ではなく、たとえば、キュー、リンクリスト、スタック、アレイなどの形をとり得る。データ構造４０５は、それぞれのメッセージ本文３１０用にそれぞれのフィールド４１０（１）および４１０（Ｎ）（集合的に、フィールド４１０）を含むが、便宜上のためだけに、所与のメッセージ本文３１０が、フィールド４１０（Ｎ）にロードされるのを示してある。データ構造４０５がキューとして実装されると仮定すると、所与のメッセージ本文３１０は、キューの末尾に追加することができる。
【００２１】
データ構造４０５は、複数のそれぞれのメッセージ本文３１０を蓄積するように作用する。データ構造４０５が十分に大きく（たとえば、メガバイトのオーダー）なると、または所与の時間間隔の満了後（たとえば、約１００ミリ秒おき）に、データ構造４０５中のメッセージ本文３１０は、それぞれの格納マシン３１５上に収容される１つまたは複数のログファイル４１５（１）および４１５（Ｎ）（集合的に、ログファイル４１５またはログファイルセット４１５）に書き込まれる。本明細書で使用する「セット」という用語は、１つまたは複数の数量を指す。格納マシン３１５は、ディスクドライブメディアおよび関連する格納技術を使って、ログファイル４１５を収容することができる。所与のメッセージ本文３１０は、所与の実装形態において適切な場合、冗長性および障害に耐えるためにログファイルセット４１５に書き込むことができる。本明細書における教示内容のいくつかの態様によると、ログファイル４１５は、１つまたは複数のデータベースを使って、少なくとも部分的に実装することができる。このような実装形態において、ログファイル４１５は、ひとまとめにして、１組のテーブルに書き込むことができる。本明細書における教示内容のこうした態様は例示であり、性質上非限定的であることが理解されよう。
【００２２】
サーバマシン３０５は、変形ラウンドロビンアルゴリズム（ｒｏｕｎｄ−ｒｏｂｉｎ  ａｌｇｏｒｉｔｈｍ）を用いて格納マシン３１５上のログファイルセット４１５を選択することができ、このアルゴリズムは、格納マシン３１５の間で負荷を分散するために偏りをもたせることができる。たとえば、所与の格納マシン３１５がその記憶容量に迫ると、サーバマシン３０５は、格納マシン３１５に書き込まれる新規メッセージ本文３１０の割合を低下させることができる。本明細書における教示内容の例示的な実施形態において、所与のログファイル４１５を、ただ１台のサーバマシン３０５によって書き込むことができ、そうすることによって、異なるサーバマシン３０５による所与のログファイル４１５への書込みを協調するいかなる必要性もなくなる。ログファイルセット４１５は、セット４１５のいずれか一部に書込みエラーがあったとき、または図６に関連してさらに後述するように、ログファイル４１５が所与の期間（たとえば、数時間）に渡って開いていたときにはそれを閉じることができる。
【００２３】
ログファイル４１５には、キャッシュ、バッファ、または他の形の中間データ構造へ書き込むのとは反対に、書込みを直接ディスクメディアを通すように強制する選択肢を用いて書込みを行うことができ、この書込み動作を、書込みが継続性をもつようになるまでは不完全と見なすことができる。格納マシン３１５への書込みが完了すると、サーバマシン３０５は、所与のメッセージ本文３１０を格納するログファイル４１５の名前、ログファイル４１５を含む格納マシン３１５、そのログファイル４１５中の所与のメッセージ本文３１０のオフセット、およびメッセージ本文３１０の長さを知る。サーバマシン３０５は、各メッセージ本文３１０用のこうしたパラメータを、メタデータ格納構造３２５中のメタデータ３２０として格納することができる。
【００２４】
各メッセージ本文３１０をログファイル４１５に少しずつ書き込むのとは反対に、複数のメッセージ本文３１０を、ログファイル４１５に書き込む前にデータ構造４０５に蓄積することによって、管理および記憶システム１２５は、より高い効率性を実現する。格納マシン３１５がディスクドライブなどの２次記憶デバイスを含み、このようなドライブからの読出しまたはそこへの書込みが「Ｉ／Ｏ動作」と呼ばれると仮定すると、各Ｉ／Ｏ動作は、どのデータ「ペイロード」も記憶媒体から読み出し、またはそこへ書き込むことができるようになるまでに、記憶媒体中に適切なセクタを位置決めするのに、かなりの量のオーバーヘッドを伴う。より具体的には、このオーバーヘッドは、ドライブがドライブ上で適切なトラックをシークするのにかかる時間、読み書きヘッドをこのトラックに向けて放射状に移動するための時間、および目標とされたセクタを読み書きヘッドの下に配置するように、ドライブを必要に応じてスピンするための時間を含む。典型的には、このオーバーヘッド時間は、ペイロードが大きくない限り、記憶媒体へ、またはそこからデータを転送するための時間を大幅に超える。たとえば、現在の標準によって、この妥協点は、１メガバイトのペイロードに近くてよい。ただし、技術の進歩に伴って、この妥協点は変わり得る。
【００２５】
メッセージ本文３１０自体を書き込むのに費やされる実際の時間は、上記オーバーヘッドに比較して小さいので、格納マシン３１５にメッセージ本文３１０を個々に、または少しずつ書き込むのは非効率的であろう。また、このオーバーヘッドは、管理および記憶システム１２５によって受信される各メッセージ本文３１０ごとに繰り返されることになり、そうすることによって、Ｘ個のメッセージ本文３１０の格納は、オーバーヘッドのＸ回の繰り返しを生じる。そうではなく、管理および記憶システム１２５は、データ構造４０５に複数のメッセージ本文３１０を蓄積し、次いで、こうした蓄積されたメッセージ本文３１０をまとめて格納マシン３１５に書き込む。こうしたメッセージ本文３１０はまとめて書き込まれるので、上記オーバーヘッドは、メッセージ本文３１０を格納マシン３１５に書き込む全Ｉ／Ｏ動作の比較的小さい比率を消費する。また、Ｘ個のメッセージ本文３１０を、上記オーバーヘッドのただ１つのインスタンスを用いて格納することができる。こうした要因の両方が、管理および記憶システム１２５によって実施されるＩ／Ｏ動作の全体効率を上げる。
【００２６】
Ｉ／Ｏ動作はそれぞれ、より多くの「ペイロード」を移動し、したがってより効率的なので、本明細書において教示するように構築されたシステムおよび方法は、従来のシステムのメッセージ処理負荷をより少ないＩ／Ｏ動作でサポートすることができる。したがって、この負荷に対して作用するのに必要なマシンは、より少なくなり、このことは、マシンの取得および維持への投資がより少なくなることを意味する。あるいは、所与の１組のリソースを有する従来のシステムが本明細書において教示するように適用される場合、そのシステムは、より高いメッセージ負荷を扱うことができるであろう。
【００２７】
図５は、図３に示されているメタデータ格納構造３２５の実装形態５００を示す。メタデータ格納構造３２５の別の実施形態については、図６に関連して示し、後述する。
【００２８】
上述したログファイル４１５は、メッセージ本文３１０をまとめて効率的に収集し格納することができるが、ユーザが自分のメールボックスの内容を列挙し、または閲覧したいときは、ログファイル４１５とは別に、メタデータ３２０を格納するための第２の構造３１５を維持することがより効率的であり得る。このメタデータ３２０は、適切なｅメールアプリケーションがメッセージのヘッダを表示することを可能にする情報を含み得る。
【００２９】
メタデータ３２０は、エンドユーザに対して比較的可視的なデータ、およびエンドユーザに対してそれ程可視的でない他のデータを含み得る。可視的なメタデータ３２０は、メッセージの宛先および／または発信アドレスを表すデータ、送信または受信時間を表す時刻または日付スタンプ、サブジェクト行、メッセージが読まれたかどうかを示すアイコンなどを含み得る。比較的可視的でないメタデータ３２０は、所与のメッセージ本文３１０を位置決めするのに必要とされる情報を含むことができ、所与のメッセージ本文３１０を含むログファイル４１５の名前、ログファイル４１５を含む格納マシン３１５、ログファイル４１５中のメッセージ本文３１０のオフセット、およびメッセージ本文３１０の長さを含み得る。
【００３０】
メタデータ格納構造３２５は、少なくとも図５に示されている実施形態５００として実装することができる。本実施形態５００において、メタデータ記憶装置は、１組のデータベーステーブル５０５（たとえば、ＳＱＬに基づくテーブル）として実装することができ、図６に示されている第２の実施形態では、画像に基づくログとして実装することができる。両方の実施形態において、所与のメールボックス用のメタデータ３２０は、所与の格納マシン３１５上に格納することができる。さらに、メタデータ３２０は、アップデート要求を受信するサーバマシン３０５からのトランザクションを稼動することによって、アップデートすることができる。テーブルに基づく本実装形態では、各アップデートは、ただ１つのトランザクションを伴い、適切なテーブルの末尾にアップデートが追加される。画像に基づくいくつかの実装形態は、このアップデートを実施するために、別個の読込みおよび書込みトランザクションを実行することができる。ただし、画像に基づく他の実装形態は、セクタ境界への書込みをまとめることによって、またはセクタの末端をメモリに格納することによって、読込みトランザクションを避けることができる。
【００３１】
対照的に、従来のソリューションは、メッセージログファイルへの部分的書込みを引き起こすためのアップデートに対して２つのトランザクションを必要とし得る。第１のトランザクションが部分的メッセージログファイルへの書込みを読み、第２のトランザクションがアップデートを書き込む。
【００３２】
図５および６に示されている実施形態は、メタデータ３２０を、保存期間を超えて存在させることが可能である。このことは、いくつかのメタデータ３２０が、期限の切れた、かつ／または消去されたメッセージ本文３１０および／またはログファイル４１５を記述し得るということである。メタデータ３２０は、メッセージ本文３１０とは別に格納され管理されるので、メタデータ３２０およびメッセージ本文３１０用に別個の維持および削除アルゴリズムを定義し最適化することができる。所与の１組のメッセージ本文３１０および／またはログファイル４１５を消去することが最も効率的な場合、対応するメタデータ３２０を消去することが最も効率的なわけではない可能性がある。ただし、詳しく後述するように、サーバマシン３０５は、メタデータ格納構造３２５をトラバースする（ｔｒａｖｅｒｓｅ）とき、この「期限切れの」メタデータ３２０を無視してよい。ＳＱＬテーブル５０５としてのメタデータ記憶装置の実装を特徴とする実施形態において、サーバマシン３０５は、消去された／期限切れのログファイル４１５および／またはメッセージ本文３１０用のメタデータ３２０を返さないように組み立てられたクエリを書き込むことができる。
【００３３】
データベーステーブル実施形態５００において、メタデータ３２０を、１組のテーブル５０５に格納することができる。代表的なテーブル５０５（１）中の１つの行５１０（１）は、管理および記憶システム１２５によって格納される各メッセージ本文３１０に対応し得る。新規メッセージ本文３１０が格納され、または消去されると、追加の行５１０（Ｎ）を作成してもよく、既存の行５１０（Ｎ）を消去し、または空にしてもよい。
【００３４】
テーブル５０５は、世代的な性質となるように構成することができる。つまり、所与のテーブル５０５は、所与の期間、たとえば、保存期間の約半分に対するメッセージ本文３１０すべてのためのメタデータ３２０を格納することができる。テーブル５０５には、メールボックスＩＤ５１５およびメッセージＩＤ５２０によって索引をつけることができ、テーブル５０５の列は、上述した様々なタイプのメタデータ３２０に対応し得る。所与の各メッセージ本文３１０に対して、列５２５はメッセージ本文３１０を格納するログファイル４１５を含む格納マシン３１５のＩＤを格納することができ、列５３０は、格納マシン３１５内のログファイル４１５のＩＤを格納することができ、列５３５は、ログファイル４１５内のメッセージ本文３１０のオフセットを格納することができ、列５４０は、メッセージ本文３１０の長さを格納することができる。別個のテーブルが、上述したものを複製したどのテーブルまたは他の構造の場所も追跡することができる。
【００３５】
図６は、メタデータ格納構造３２５の追加実装形態６００を示す。実施形態６００は、所与のメールボックスの名前用の行６１０、世代数（通常は整数）を含む行６１５、および所与のメールボックスの画像用の行６２０という３行を有するテーブル６０５を含み得る。それぞれの列６２５を、各メールボックス用にインスタンス化することができる。
【００３６】
画像６２０を、本明細書ではログ「ブロブ（ｂｌｏｂ）」と呼ぶ。「ブロブ」という用語は、当業界では「バイナリラージオブジェクト」の略記として知られている。したがって、メッセージ本文３１０につき１つの行５１５を有するテーブル５０５を定義するよりもむしろ、実施形態６００は、空でない各メールボックス用の画像またはログブロブ６２０を含み得る。
【００３７】
ログブロブ６２０は、上述したテーブル５０５に含まれるメタデータ３２０と同様のメタデータ３２０を含み得る。サーバマシン３０５は、所与のメールボックス用のメタデータ３２０をアップデートすると、そのメールボックス用のログブロブ６２０および世代数６１５をメタデータ格納構造３２５から取得することができる。サーバマシン３０５は次いで、新規メタデータ３２０でログブロブ６２０をアップデートし、世代数６１５を増分し、アップデートされたログブロブ６２０および増分された世代数６１５をメタデータ格納構造３２５に戻して書き込むことができる。
【００３８】
アップデートされたログブロブ６２０および世代数６１５をメタデータ格納構造３２５に戻して書き込む前に、サーバマシン３０５は、現時点でメタデータ格納構造３２５に格納されているログブロブ５６５の世代数６１５が、サーバマシン３０５がログブロブ６２０を最初に読んだときから変化したかどうか調べる。世代数６１５が最初の読込みから変化している場合、このことは、別のサーバマシン３０５または他のプロセスがログブロブ６２０を、読込みとアップデートとの間の時間にアップデートしたことを示し得る。この場合、サーバマシン３０５は、ログブロブ６２０を再度読み込み、メタデータ格納構造３２５に対するアップデートを再度試みる。
【００３９】
サーバマシン３０５がログブロブ６２０を最初に読み込んだときから世代数６１５が変化していない場合、サーバマシン３０５は、メタデータ格納構造３２５をアップデートする。このようにして、世代数６１５は、同一のメールボックスに対して、異なるサーバマシン３０５または他のプロセスが相反するアップデートを実施するのを防止することができる。
【００４０】
上述した世代数方式に対する代替実施形態として、かつそれをアップデートする書込みトランザクションを除去するために、現在の値が依然としてサーバマシン３０５が最初に読んだものである場合、サーバマシン３０５は、ログブロブ６２０を新たな値にアップデートする高度なアップデートトランザクションを用いて、アップデートされたログブロブ６２０でメタデータ格納構造３２５をアップデートすることができる。この代替手法は、１つ少ないパラメータの管理と引換えに、１つのトランザクションにつき比較的多くのデータの移動を伴い得るが、この妥協点は、状況次第では好ましい場合がある。
【００４１】
さらに別の代替実施形態では、世代数手法および高度なアップデートトランザクション手法の側面を組み合わせている。この代替実施形態は、世代数６１５を、ログブロブ６２０の先頭に追加することも、その末尾に追加することもできる。アップデート中、サーバマシン３０５は、この世代数６１５を参照して、同じように見える中間結果を生じた１組のアップデートが正しく順番に並べられることを確認することができる。
【００４２】
所与のメールボックス用のログブロブ６２０がアップデートされると、サーバマシン３０５は、ログブロブ６２０を書き換える前に、そのメールボックス用のメタデータ３２０中の古くなったどのエントリも消去することができる。古くなったエントリは、たとえば、適用可能な保存期間より古い時間制限メッセージ１１５に対応するエントリを含み得るであろう。メールボックスにメッセージ本文３１０がそれ以上ない場合、世代数６１５が増分され、ログブロブ６２０は消去される。ログブロブ６２０を消去する一方法は、それを長さがゼロのファイルとして書き込むことである。
【００４３】
空でないログブロブ６２０は、ごくわずかのメールボックスのみがそのサイズより大きいサイズを必要とし得る程十分に大きい最小サイズを有し得る。ログブロブ６２０用のテーブル６０５中に連続した十分な数のページが割り振られた場合、ログブロブ６２０は、拡大しようとも縮小しようとも、割振りし直す必要がない。たとえば、所与の実装形態において、１日当たり各メールボックスに８通のメッセージが届くと仮定する。所与の時間制限メッセージ１１５用のメタデータ３２０が約５００バイトであり、保存期間が５日間の場合、ログブロブ５６５の平均使用部分は、約２０Ｋとなる。したがって、６４Ｋの最小ブロブサイズは、ほぼすべてのログブロブ６２０が決して拡大する必要がないという結果を生じるはずである。この手法は、全体では他のソリューションより多くの空間を使用し得るが、使われる全空間は、それでも比較的小さい。格納マシン３１５当たりのメールボックスの平均数は約１００，０００なので、６４Ｋ／メールボックスの割振りの結果、ログブロブ６２０をサポートする格納マシン３１５当たり６．４Ｇの記憶容量になる。
【００４４】
所与のメールボックスが全く活動していない（メッセージも到着せず、所有者によるアクセスもない）場合、そのメールボックスのログブロブ６２０は、期限切れのメッセージ本文３１０を記述するだけであったとしても、無期限に存続し得る。管理および記憶システム１２５のいくつかの実施形態では、デーモンがメールボックスをトラバース（ｔｒａｖｅｒｓｅ）し、期限切れのメッセージ本文３１０に関するどのメタデータ３２０も削除することができる。ただし、管理および記憶システム１２５がある程度の期間の後に、アクティブでないメールアカウントを完全に削除する場合、このタイプのデーモン処理は価値がない場合もある。
【００４５】
図７は、時間制限メッセージ１１５を受信し格納するために実施されるプロセス７００を示す。ブロック７０５で、プロセス７００は、所与の時間制限メッセージ１１５の到着、またはデータ構造４０５（バッファの形をとり得る）に関連づけられたタイムアウトパラメータの満了が起こるのを待ち受ける。たとえば、所与の時間制限メッセージ１１５を、管理および記憶システム１２５によって受信し、サーバマシン３０５に経路指定することができる。こうしたイベントのどちらかが起こると、プロセス７００はブロック７１０に進み、ここで、データ構造４０５に関連づけられたタイムアウトパラメータの期限が切れているかどうか判定する。タイムアウトパラメータの期限が切れていない場合、プロセス７００は、ブロック７１５で表すように、時間制限メッセージ１１５をデータ構造４０５にロードする。その後、プロセス７００はブロック７２０に移って、データ構造４０５が満杯かどうか評価する。データ構造４０５がまだ満杯でない場合、プロセス７００は、ブロック７０５に戻って、次の時間制限メッセージ１１５のタイムアウト状態または到着のどちらでもよい次のイベントを待つ。データ構造４０５が満杯の場合、プロセス７００は、ブロック７２０からブロック７２５に進む。図７は、便宜上かつわかりやすくするために、プロセス７００を表すページ上に参照Ａを含む。ただし、ページ上の参照Ａが含まれるからといって、本明細書における教示内容を限定するものでは全くない。
【００４６】
ブロック７１０に戻り、タイムアウトパラメータの期限が切れている場合、プロセス７００はブロック７２５に進む。繰り返しになるが、ページ上の参照Ａが含まれるからといって、本明細書における教示内容を限定するものでは全くない。ブロック７２５で、プロセス７００は、現在のログファイル（群）４１５への書込み期限が超過しているかどうか判定する。本明細書の他の所でより詳しく述べるように、所与のログファイル４１５には、限られた期間に亘って書込みを行うことができる。現在のログファイル（群）４１５に対する期限が超過している場合、プロセス７００はブロック７３０に進んで、現在のログファイル（群）４１５を閉じる。プロセス７００は次いで、ブロック７３５に進んで、新規ログファイル（群）４１５を開く。その後、プロセス７００は、判断ブロック７２５に戻る。
【００４７】
現在のログファイル（群）４１５に対する期限が超過していない場合、プロセス７００は、ブロック７２５からブロック７４０に進み、ここで、データ構造４０５の内容（すなわち、様々な時間制限メッセージ１１５の本文）が、１つまたは複数のログファイルに書き込まれる。時間制限メッセージ１１５に関連したメタデータ３２０の後続処理を円滑にするために、各メッセージ１１５にはタイムスタンプが押される。このタイムスタンプ操作は、メッセージ１１５がデータ構造４０５にロードされたとき、またはデータ構造４０５の内容がログファイル（群）４１５に書き込まれたときに起こり得る。
【００４８】
ブロック７４５は次いで、ログファイル（群）４１５へのこの書込みが成功したかどうかテストする。冗長性としてメッセージ１１５が２つ以上のログファイル４１５に書き込まれたと仮定すると、いずれかのログファイル４１５への書込みが失敗した場合、プロセス７００はブロック７３０に進んで、現在のログファイル（群）４１５をそれぞれ閉じる。プロセス７００は次いで、ブロック７３５に進んで、１つまたは複数の新規ログファイル（群）４１５を開く。その後、プロセス７００は判断ブロック７２５に移って、現在のログファイル（群）４１５への書込み期限が超過しているかどうかテストする。現在のログファイル（群）４１５は作成されたばかりなので、プロセス７００は、ブロック７４０に移って、書込み動作を再度試みる。
【００４９】
いくつかの実施形態では、プロセス７００は、以前、そこへの書込みが失敗したログファイル４１５を収容するマシンストレージ３１５以外の格納マシン３１５上の新規ログファイル（群）４１５を開くことができる。プロセス７００のこの側面は結果として、ログファイルセット４１５のうち１つのログファイル４１５にメッセージ１１５を書き込ませることになるが、他のログファイル（群）４１５には書き込ませない。しかし、ログファイルセット４１５への複合書込みが失敗したので、どのメタデータ３２０もログファイル４１５の非複製部分を参照せず、したがって、ログファイル４１５の非複製部分は将来アクセスされることはない。ログファイルセット４１５のどちらか半分への書込みが失敗したときにログファイル４１５が閉じられ、再度書き込まれることはないので、ログファイル４１５の末尾は異なるものになり得る。しかし、どのメタデータ３２０もログファイル４１５のこうした異なる末尾を参照せず、こうした異なる末尾は将来アクセスされないので、こうしたファイルの末尾が異なるものになるということは、全く重要でない。
【００５０】
ログファイル４１５は、グローバル一意識別子（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＧＵＩＤ））名を使うことができ、ログファイルセット４１５の両方の部分が同じ名前をもつ。ＧＵＩＤにより、サーバマシン３０５は、管理および記憶システム１２５の他のコンポーネントと協調する必要なく、ログファイル４１５用のコンフリクト（ｃｏｎｆｌｉｃｔ）しない名前を作成する。
【００５１】
時間制限メッセージ１１５を、メッセージ１１５が届いたときの時間の下位ビットに基づいて、格納マシン３１５上のログファイル４１５に割り当てることができる。格納マシン３１５上のログファイル４１５にメッセージ１１５を割り当てるこの手法の結果として、特定のメールボックス向けのメッセージ１１５は、異なる格納マシン３１５に分散され得る。このことは、一様でないメールボックスのサイズおよび負荷は、管理および記憶システム１２５において負荷のホットスポットまたは過負荷を起こしにくいことを意味する。様々な格納マシン３１５上で利用可能な空き領域に基づいてラウンドロビンアルゴリズムに偏りをもたせると、管理および記憶システム１２５における格納のホットスポットまたは過負荷の確率をさらに低下させることができる。
【００５２】
判断ブロック７４５から、書込みが成功した場合、プロセス７００はブロック７５０に進んで、格納されているメッセージ１１５に対応するメタデータ３２０を作成する。ログファイル４１５に書き込まれる様々なメッセージ１１５は、異なる様々なユーザにアドレス指定することができ、したがって、異なる様々なメールボックスに関連づけることができる。当然の結果として、ユーザの各メールボックスは、異なる様々な格納マシンに格納されている様々なログファイル４１５に格納されるそれぞれのメッセージを含み得る。メタデータ３２０は、各メールボックス向けに、こうした様々なメッセージ１１５の後続の位置決めおよび収集を可能にする。したがって、ユーザの各メールボックスは通常、メタデータ格納構造３２５に関連づけられる。ブロック７５５で、プロセス７００は、現在のログファイル（群）４１５に書き込まれた各メッセージ１１５をトラバース（ｔｒａｖｅｒｓｅ）し、各メッセージ１１５がそれに対してアドレス指定されるメールボックスを識別し、このような各メールボックス用のメタデータ３２０を収容するメタデータ格納構造３２５を位置決めする。ブロック７６０で、プロセス７００は、このような各メールボックス用のメタデータ格納構造３２５中のエントリを、ブロック７４５で作成されたメタデータ３２０でアップデートする。
【００５３】
図５に示されているデータベーステーブル実施形態５００を用いてプロセス７００が実施されると仮定すると、プロセス７００は、新規メッセージ本文３１０を記述する最新の生成テーブルに新規の行５１０を追加することによって、新規メッセージ本文３１０用に作成されたメタデータ３２０用のエントリを作成することができる。
【００５４】
図６に示されているログブロブ実施形態６００を用いてプロセス７００が実施されると仮定すると、プロセス７００は、世代数６１５が変化していない場合、ブロブ画像６２０および世代数６１５を読み取り、期限切れのどのエントリもブロブ画像６２０からパージし、新規メッセージ本文３１０用のエントリをブロブ画像６２０に追加し、ブロブ画像６２０および世代数６１５をアップデートするための、メタデータ格納構造３２５へのトランザクションを開始することができる。世代数６１５が変化している場合、プロセス７００は、メタデータ格納構造３２５を読み取った所から再度開始する。
【００５５】
図８は、メッセージ本文３１０が書き込まれている１つまたは複数のログファイル４１５の状況を監視するプロセスフロー８００を示す。ブロック８０５で、本明細書において述べた保存期間パラメータが確立される。上記のｅメールスパムの例では、スパム向けの保存期間は、５日間に設定できよう。上記の企業によるｅメール管理の例では、「送られた」メッセージ向けの保存期間は、３０日間に設定できよう。ブロック８１０で、プロセス８００は、メッセージ本文３１０が書き込まれるログファイル４１５のうち、最も古いものを選択する。たとえば、プロセス８００は、ログファイル（群）４１５に関連づけられた書込みタイムスタンプにアクセスすることができる。何らかの理由で、書込みタイムスタンプが利用不可能またはアクセス不可能な場合、メッセージ本文３１０が到着順にログファイル４１５に書き込まれると仮定すると、ログファイル４１５に最後のメッセージ本文３１０が書き込まれた時間により、ログファイル４１５の古さを判定することができる。ブロック８１５で、プロセス８００は、ログファイル４１５が保存期間より古いかどうか判定する。ログファイル４１５が保存期間より古くない場合、プロセス８００はブロック８２０に進み、ここで、プロセス８００は、ログファイル４１５の１つが適用可能な保存期間より古くなるのを待機する。このイベントが起こると、プロセス８００はブロック８１０に戻り、ここで、この所与のログファイル４１５が現時点での最も古いログファイル４１５として選択される。プロセス８００は次いで、上述したブロック８１５に進む。選択されたログファイル４１５が保存期間より古い場合、プロセス８００はブロック８２５に移り、ここで、選択されたログファイル４１５が消去される。
【００５６】
図８に示されているプロセス８００は、図７に示されているプロセス７００と平行して、または本明細書において教示する他のプロセスと平行して、デーモンとして稼動することができる。あるいは、プロセス８００は、プロセス７００、または本明細書において教示する他のプロセスに統合することもできる。プロセス８００は、例示および考察の便宜上のためにのみ、図８に別個に示してあるが、本明細書における教示内容の適用性を限定するものではない。
【００５７】
図９は、時間制限メッセージ１１５に対応するメタデータ３２０をアップデートするプロセス７５５をより詳しく示す。ブロック８０５で、プロセス９００は、図８に関連して上述したように、保存期間パラメータを確立する。保存期間パラメータが既に確立された場合、ブロック８０５は、そのパラメータを確立し直す必要はない。この場合、プロセス９００は、以前から存在する保存期間パラメータを指し得る。
【００５８】
ブロック９１０で、プロセス９００は、さらに後述するように、プロセス９００の様々な段階においてメタデータ３２０がそこに書き込まれる少なくとも２つのテーブルを作成する。ブロック９１５で、プロセス９００は、ブロック９１０で作成されたテーブルのうち、ログファイル４１５に格納されているメッセージ本文３１０用のメタデータ３２０を書き込むための第１のものを選択する。ブロック９２０で、プロセス９００は、ブロック９１５で選択されたテーブルにメタデータ３２０を書き込む。
【００５９】
ブロック９２５で、プロセス９００は、第１のテーブル中の最も古いメッセージ本文３１０がメッセージ本文３１０に適用可能な保存期間より古いかどうかテストする。古くない場合、プロセス９００は、ブロック９２０にループバックして、選択されたテーブルにメタデータ３２０を書き込み続け、判断ブロック９２５に戻る。ただし、第１のテーブル中の最も古いメッセージ本文３１０が保存期間より古いとき、プロセス９００はブロック９３０に進み、ここで、第１のテーブルを閉じる。ブロック９３５で、プロセス９００は、第２のテーブルを消去し、次いでブロック９４０に進み、ここでプロセス９００は、ブロック９１０で作成された第２のテーブルを書込み用に選択する。ブロック９４５で、プロセス９００は、この第２のテーブルにメタデータ３２０を書き込む。
【００６０】
ブロック９５０で、プロセス９００は、保存期間の別のインスタンスの期限が切れているかどうかテストする。切れていない場合、プロセス９００は、ブロック９４５にループバックして、第２のテーブルへのメタデータ３２０の書込みを続け、判断ブロック９５０に戻る。保存期間の次のインスタンスが満了すると、プロセス９００はブロック９５５に進み、ここで、メタデータ３２０が書き込まれた第１のテーブルを消去する。ブロック９６０で、プロセス９００は、書込み用の第２のテーブルを閉じ、ブロック９６５で、プロセス９００は、第１のテーブルを作成し直す。プロセス９００は次いで、ブロック９１５に戻って、第１のテーブルを用いてプロセスを繰り返す。
【００６１】
図１０は、図９に示されているプロセス９００のシーケンス図１０００を提示する。タイムライン１００５は、ライン１０１０で示される時間ｔ0で始まり、概して矢印１０１５で示される水平時間軸に沿って無期限に進む。ライン１０２０は、保存期間が時間ｔ0で流れ始めたと仮定すると、第１の保存期間が満了する時間を表す。ライン１０１０および１０２０で表す時間の間、図９のプロセス９００は、ブロック９２０で表すように、第１のテーブルに対して書込みを行う。概して、時間ｔ0で、またはその前に、参照番号９１５で示されるように、第１のテーブルが選択される。
【００６２】
概して、垂直ライン１０２０で示す、第１の保存期間の満了時またはその後まもなく、プロセス９００は、ブロック９２５から「Ｙｅｓ」分岐をとり、第１のテーブルへの書込みを止め、図１０に表れる参照符号９３５で示されているように、第２のテーブルへのメタデータ３２０の書込みを始める。ライン１０２０で印を付けられた時間に、保存期間の第２のインスタンスが始まり、垂直ライン１０２５で印を付けられた時間まで稼動する。
【００６３】
ライン１０２０および１０２５で印を付けられた時間の間、プロセス９００は、参照符号９４０で示されているように、第２のテーブルにメタデータ３２０を書き込む。保存期間の第２のインスタンスが満了すると、プロセス９００は、第２のテーブルへの書込みを止めるが、これは、図７のブロック９４５からの「Ｙｅｓ」分岐に対応する。したがって、参照符号９４５は、図１０に表れる場合、ブロック９４０の末尾またはその近くに表れる。
【００６４】
プロセス９００がライン１０２５で印を付けられた時間に達すると、プロセス９００は、第１のテーブルに書き込まれた（ブロック９２０）どのメタデータ３２０も、今となっては保持するには古すぎることを認識する。というのは、保存期間の第２のインスタンス全体の期限が、今となっては切れているからである。第１のテーブル全体が今は、それに対応するログファイル４１５の期限が切れているメタデータ３２０を含むので、第１のテーブルを今の時点で消去することができる。ライン１０２５で印を付けられた時間の前に、第１のテーブルに書き込まれた（ブロック９２０）メタデータ３２０の一部は、保存期間がこのメタデータ３２０に対してまだ流れていないという点で依然としてアクティブであり得る。したがって、ライン１０２５で印を付けられた時間まで、第１のテーブル中のメタデータ３２０は、このメタデータ３２０を求めるどの要求が届いた場合でもアクセス可能に保たれる。
【００６５】
図９および１０に示されているように、プロセス９００は、２つのテーブルにメタデータ３２０を交互に書き込むことができる。各テーブルは、順に書込みを受け、１つの保存期間の後で閉じられ、第２の保存期間の後で消去される。わかりやすさおよび簡潔さのために、図９および１０は、このプロセス９００の一度の反復を示す。ただし、このプロセス９００は、２つのテーブルがそれぞれ順に書込みを受け、消去されながら、無期限に繰り返すことができることに留意されたい。プロセス９００は、２つより多いテーブルで実施でき、本明細書において例示し述べる２つのテーブルによる実施形態は、便宜上のためだけに示すことにも留意されたい。概して、プロセス９００は、Ｎ個のテーブルを作成することができる。ここで、Ｎは、メッセージ保存期間を、テーブルに書込みを行うことができる期間で除算したものより１つ大きい整数である。
【００６６】
図１１は、テーブル構造をトラバース（ｔｒａｖｅｒｓｅ）して、要求されたメタデータ３２０またはヘッダ情報を検索するプロセス１１００を示す。ブロック１１０５で、プロセス１１００は、所与のメッセージヘッダ情報を求める要求を受け取る。上述した例では、この要求は、保存期間の対象となるスパムメッセージまたは「送られた」メッセージの形をとる所与のｅメールを求めるものであり得る。たとえば、ユーザは、所与のメッセージが受信されることを要求する場合も、所与のメールボックスに関連づけられた一部または全部のメッセージが受信されることを要求する場合もある。プロセス１１００は、その要求の遂行にも、その要求を遂行することができるかどうかの判定にも、そもそも適切であり得る。
【００６７】
ブロック１１１０で、プロセス１１００は、テーブルの形をとり得る第１のヘッダ構造を検索して、ブロック１１０５で受信された要求に応答して任意のメッセージ用のメタデータ３２０を位置決めする。ブロック１１１５で、プロセス１１００は、要求に応答したいずれかのエントリが第１のヘッダテーブル中に見つかったかどうか判定する。要求に応答した、ヘッダテーブル中のエントリが見つかった場合、プロセス１１００はブロック１１２０に進む。ブロック１１２０で、プロセス１１００は、エントリに関連づけられたタイムスタンプを参照し、エントリが複数の「保存期間」前に作られたかどうか判定する。たとえば、エントリ用の保存期間が３０日間の場合、ブロック１１２０は、所与のエントリが３０日より古いかどうか判定する。メッセージ本文３１０および関連するメタデータ３２０は、ログファイル４１５および／またはメタデータ格納構造３２５に格納されたときに図７に示されているプロセス７００中にタイムスタンプが押されたことを思い起こされたい。
【００６８】
所与のエントリが保存期間より古くない場合、プロセス１１００はブロック１１２５に進み、ここで、プロセス１１００は、ブロック１１０５で受信された要求に応答して、このエントリを返す。プロセス１１００は次いで、ブロック１１３０に進み、ここでプロセス１１００は、ブロック１１０５で受信された要求が十分に満たされているかどうか判定する。たとえば、ブロック１１０５で受信された要求が単一のメッセージを求めるものであり、その単一のメッセージがブロック１１２５で位置決めされ返された場合、プロセス１１００は、要求を完全に満たしている。この場合、プロセス１１００はブロック１１３５に進み、完了する。ただし、要求が多数のメッセージを取得するためのもの、または所与のメールボックスの一部または全部を取得するためのものである場合、プロセス１１００は、より多くのメッセージを求めて検索を行い、取得することができる。この場合、プロセス１１００はブロック１１１０に進んで、こうしたエントリを求めて検索を行う。
【００６９】
ブロック１１１５に戻ると、要求されたエントリが第１のヘッダテーブル中に見つからなかった場合、プロセス１１００はブロック１１４０に進み、ここで、ブロック１１０５で要求されたヘッダ情報を求めて第２のヘッダテーブルを検索する。ブロック１１４５で、プロセス１１００は、要求されたヘッダ情報が第２のヘッダテーブル中に見つかったかどうか判定する。要求されたヘッダ情報が見つかった場合、プロセス１１００はブロック１１２０に進んで、位置決めされたヘッダ情報が適用可能な保存期間より古いかどうかテストする。位置決めされたヘッダ情報が適用可能な保存期間より古い場合、プロセス１１００はブロック１１５０に進み、ここで失敗が報告される。ブロック１１４５に戻ると、要求されたヘッダ情報が見つからなかった場合、プロセス１１００はブロック１１５０に進んで、要求されたヘッダ情報が第１のテーブルにも第２のヘッダテーブルにも見つからなかったので、失敗を報告する。
【００７０】
プロセス１１００が図５に示されているテーブル実装形態５００を用いて実施されると仮定すると、プロセス１１００は、世代テーブル５０５をすべて結合するクエリを行うことができ、適用可能な保存期間を超えるどのメッセージも除く、所与のメールボックス中のメッセージに対応するすべての行５１０を得る。プロセス１１００が図６に示されているログブロブ実装形態６００を用いて実施されると仮定すると、プロセス１１００は、所与のメールボックス用のログブロブ画像６２０を読み出し、適用可能な保存期間より古いどのメッセージも無視し、残りを返すことができる。
【００７１】
図１２は、要求があったときにユーザに提示することができるような所与のメッセージを取得するプロセス１２００を示す。ブロック１２０５で、プロセス１２００は、所与のメッセージをユーザに提示するための要求を受け取る。ブロック１２１０で、プロセス１２００は、図１１において上述した、メッセージヘッダを読み出すプロセス１１００と同様のやり方で、所与のメッセージ用のメタデータ３２０を含むヘッダを見つける。ブロック１２１５で、プロセス１２００は、ヘッダから引き出されたメタデータ３２０を処理して、所与のメッセージを含むログファイル４１５の名前、ログファイル４１５を含む格納マシン３１５、ログファイル４１５中のメッセージのオフセット、およびメッセージの長さを見つける。
【００７２】
ブロック１２２０で、所与のメッセージがログファイルセット４１５に格納されていると仮定すると、プロセス１２００は、ログファイルセット４１５から１つのログファイル４１５を選択し、選択されたログファイル４１５からの要求されたメッセージの読込みを試みる。読込みが十分に速く、かつ／または首尾よく完了しない場合、プロセス１２００は、ログファイルセット４１５中の第２のログファイル４１５からの、要求されたメッセージの読出しを試みることができる。ブロック１２２５で、要求されたメッセージが首尾よく読まれると、プロセス１２００は、要求されたメッセージを返す。
【００７３】
図１３は、所与のメッセージに既読の印を付けるプロセス１３００を示す。ブロック１３０５で、プロセス１３００は、所与のメッセージに既読の印を付けるための要求を受け取る。ブロック１３１０で、プロセス１３００は、所与のメッセージに対応するデータ構造中のエントリを、メッセージが既読であると印を付けられるべきであることを示すように変更する。この変更は、所与のメッセージが既読であることを示す特殊なログ記録へのインジケータの書込みを含み得る。
【００７４】
ブロック１３１５で、プロセス１３００は、所与のメッセージを、おそらく他の複数のメッセージとともにログファイル（群）４１５に書き込む。プロセス１３００は、メッセージ配信の場合と同じように、データ構造エントリの書込みがログファイル（群）４１５に引き受けられるまで待機してよい。ログファイル４１５へのこの記録は、データベースが失われ、ログファイル４１５から作成し直されることになった場合のみ必要とされる。ブロック１３２０で、ログファイル（群）４１５への書込みが終了すると、プロセス１３００は、メタデータ格納構造３２５中のメタデータ３２０を、新規メッセージの配信と同様のやり方でアップデートする。
【００７５】
プロセス１２００および１３００は、たとえばサーバマシン３０５上で稼動し得る。所与のメッセージに消去済みの印を付けるために、サーバマシン３０５は、ログファイル４１５への特殊なログ記録の書込みを含む、所与のメッセージに既読の印を付けるためのプロセス１３００と同様のプロセスを実施することができる。ログブロブ実施形態６００において、所与のメッセージを消去することにより、そのメッセージが以前存在していたメールボックスが空になったとき、ログブロブ６２０を完全に消去することが賢明であろう。
【００７６】
所与のメールボックス中の全メッセージに消去済みの印を付けるために、サーバマシン３０５は、上記のように実施されたプロセス１３００と同様に、データ構造４０５中にエントリを作ることができる。ログブロブ実施形態６００において、サーバマシン３０５は、ログブロブ６２０を完全に消去するための単一のデータベーストランザクションを行うことができ、したがって、アップデートの既読部分をスキップすることができる。
【００７７】
メタデータ格納構造３２５がクラッシュし、またはアクセス不可能もしくは利用不可能になった際には、メタデータ格納構造３２５を再構築するデータが、ログファイル４１５中で利用可能である。ただし、特定のどのメタデータ格納構造３２５用のログファイル４１５も、所与のクラスタ２１０中の複数のログファイル４１５に渡って分散し得る。メタデータ格納構造３２５を再建する一手法は、クラスタ２１０中のログファイル４１５をすべて読み出すことである。このタスクが単一のマシンに排他的に割り当てられる場合、このタスクを行うための時間は、ログファイル４１５をすべて、再構築を行うマシンのネットワークインターフェイスに渡って移動するための時間によって限定され得る。特定の実装形態では、この手法は魅力的または実現可能である場合も、そうでない場合もある。
【００７８】
別の手法は、大きさの等しいメタデータ格納構造３２５を有する１クラスタにつき通常１００台の格納マシンが存在するので、読まれているメッセージの約１％のみが、再構築されるメタデータ格納構造３２５に実際に影響を与えるという観察に基づく。さらに、メッセージ本文３１０ではなくメタデータ３２０のみが再構築の対象となっており、このことが、再構築において処理されなければならないデータボリュームをさらに削減させる。
【００７９】
最後に、メタデータ格納構造３２５あるいは格納マシン３１５の１つまたは複数に不具合があった場合、こうしたコンポーネントの内容は、アーカイブに保管することも、事前定義されたプロシージャに従って定期的にバックアップをとることもできる。このような場合、メタデータ格納構造３２５または格納マシン３１５の内容の一部またはおそらくほとんどが、最新のアーカイブまたはバックアップファイルから復元可能であり、最新のバックアップを逃した内容のみが、上記手法の１つに従って回復されなければならない。
【００８０】
図１４は、時間制限メッセージを効率的に処理し、本明細書に記載するコンピューティング、ネットワーク、およびシステムアーキテクチャを完全に、または部分的に実装するコンピューティング環境１４００を示す。より具体的には、コンピューティング環境１４００は、メッセージ分類装置１１０、管理システム１２５および１３０、フロントエンド２０５、サーバマシン３０５、格納マシン３１５、およびメタデータ格納構造３２５を含むがそれに限定されない、本明細書に記載する様々なコンポーネントの実装に適切であり得る。
【００８１】
例示的なコンピューティング環境１４００は、コンピューティングシステムの一例に過ぎず、本アーキテクチャの使用または機能の範囲に対するどのような限定を示唆することも意図していない。コンピューティング環境１４００は、例示的なコンピューティング環境１４００に示されるどのコンポーネントまたはその組合せに関するどのような依存も要件も有していると解釈されるべきではない。
【００８２】
コンピューティング環境１４００内のコンピュータおよびネットワークアーキテクチャは、他の数多くの汎用または専用の通信環境または構成と動作する。使用に適切であり得る他の公知のコンピューティングシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバコンピュータ、クライアントデバイス、ハンドヘルドデバイスまたはラップトップデバイス、マイクロプロセッサベースのシステム、マルチプロセッサシステム、セットトップボックス、プログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、ゲーム機、上記のシステムまたはデバイスのいずれをも含む分散型コンピューティング環境などを含むが、それに限定されない。
【００８３】
コンピューティング環境１４００は、汎用コンピューティングデバイスをコンピューティングデバイス１４０２の形で含む。コンピューティングデバイス１４０２のコンポーネントは、１つまたは複数のプロセッサ１４０４（たとえば、マイクロプロセッサ、コントローラなどのいずれか）と、システムメモリ１４０６と、様々なシステムコンポーネントを結合するシステムバス１４０８とを含み得るが、それに限定されない。１つまたは複数のプロセッサ１４０４は、コンピューティングデバイス１４０２の動作を制御するための、また、他の電子およびコンピューティングデバイスと通信するための様々なコンピュータ実行可能命令を処理する。システムバス１４０８は、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、グラフィック専用高速バス、およびプロセッサまたはローカルバスなど、任意の数のタイプのバス構造のいずれも表す。
【００８４】
コンピューティング環境１４００は、コンピューティングデバイス１４０２によってアクセス可能であるとともに揮発性媒体および不揮発性媒体両方、取外し可能媒体および固定式媒体を含むどの媒体でもよい様々なコンピュータ可読媒体を含む。システムメモリ１４０６は、ランダムアクセスメモリ（ＲＡＭ）１４１０など、揮発性メモリの形のコンピュータ可読媒体、および／または読出し専用メモリ（ＲＯＭ）１４１２など、不揮発性メモリを含む。基本入出力システム（ＢＩＯＳ）１４１４は、たとえば起動中に、コンピューティングデバイス１４０２内のコンポーネントの間の情報転送を円滑にする基本ルーチンを維持し、ＲＯＭ１４１２に格納される。ＲＡＭ１４１０は通常、プロセッサ１４０４の１つまたは複数にとって直ちにアクセス可能な、かつ／またはそれによって現在操作されているデータおよび／またはプログラムモジュールを含む。
【００８５】
コンピューティングデバイス１４０２は、他の取外し可能／固定式、揮発性／不揮発性コンピュータ記憶媒体を含み得る。例として、ハードディスクドライブ１４１６が、固定式の不揮発性磁気媒体（図示せず）に対する読出しおよび書込みを行い、磁気ディスクドライブ１４１８が、取外し可能な不揮発性磁気ディスク１４２０（たとえば、「フロッピー（登録商標）ディスク」）に対する読出しおよび書込みを行い、光ディスクドライブ１４２２がＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、または他の任意のタイプの光学媒体など、取外し可能な不揮発性光ディスク１４２４に対する読出しおよび／または書込みを行う。この例では、ハードディスクドライブ１４１６、磁気ディスクドライブ１４１８、および光ディスクドライブ１４２２は、それぞれ１つまたは複数のデータメディアインターフェイス１４２６によってシステムバス１４０８に接続される。ディスクドライブおよび関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピューティングデバイス１４０２用の他のデータの不揮発な格納を実現する。
【００８６】
例として、オペレーティングシステム１４２８、１つまたは複数のアプリケーションプログラム１４３０、他のプログラムモジュール１４３２、およびプログラムデータ１４３４を含む任意の数のプログラムモジュールを、ＲＡＭ１４１０、ＲＯＭ１４１２、ハードディスク１４１６、磁気ディスク１４２０、および／または光ディスク１４２４に格納することができる。このようなオペレーティングシステム１４２８、アプリケーションプログラム（群）１４３０、他のプログラムモジュール１４３２、プログラムデータ１４３４、またはそのどの組合せもそれぞれ、本明細書に記載するシステムおよび方法の１つまたは複数の実施形態を含み得る。
【００８７】
コンピューティングデバイス１４０２は、通信媒体として識別される様々なコンピュータ可読媒体を含み得る。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他の移送機構などの変調データ信号として具現化し、どの情報配信媒体も含む。「変調データ信号」という用語は、信号中の情報をエンコードするように設定されまたは変更されるその特性のうち１つまたは複数を有する信号を指す。限定ではなく例として、通信媒体は、有線ネットワークや直接有線接続などの有線媒体、ならびに音響、ＲＦ、赤外線、他の無線媒体、および／またはそのどの組合せからもなる無線媒体を含む。
【００８８】
ユーザは、キーボード１４３６および指示デバイス１４３８（たとえば、「マウス」）など、任意の数の異なる入力デバイスを介して、コンピューティングデバイス１４０２とインターフェイスをとることができる。他の入力デバイス１４４０（具体的には図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、コントローラ、衛星パラボラアンテナ、シリアルポート、スキャナなどを含み得る。こうしたおよび他の入力デバイスは、システムバス１４０８に結合された入出力インターフェイス１４４２を介してプロセッサ１４０４に接続されるが、パラレルポート、ゲームポート、および／またはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェイスおよびバス構造によって接続することもできる。
【００８９】
ディスプレイデバイス１４４４（または他のタイプのモニタ）は、ビデオアダプタ１４４６などのインターフェイスを介してシステムバス１４０８に接続することができる。ディスプレイデバイス１４４４に加えて、他の出力周辺デバイスは、入出力インターフェイス１４４２を介してコンピューティングデバイス１４０２に接続することができるスピーカ（図示せず）およびプリンタ１４４８などのコンポーネントを含み得る。
【００９０】
コンピューティングデバイス１４０２は、リモートコンピューティングデバイス１４５０など、１つまたは複数のリモートコンピュータへの論理接続を用いてネットワーク接続された環境内で動作することができる。例として、リモートコンピューティングデバイス１４５０は、パーソナルコンピュータ、可搬型コンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイスまたは他の共通ネットワークノードなどでよい。リモートコンピューティングデバイス１４５０を、コンピューティングデバイス１４０２に関連して本明細書に記載する異なるコンポーネント、要素、および特徴のうち任意の数および組合せを含み得る可搬型コンピュータとして図示してある。
【００９１】
コンピューティングデバイス１４０２とリモートコンピューティングデバイス１４５０の間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）１４５２および一般的なワイドエリアネットワーク（ＷＡＮ）１４５４として図示してある。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいてよく見られる。ＬＡＮネットワーク環境において実装される場合、コンピューティングデバイス１４０２は、ネットワークインターフェイスまたはアダプタ１４５６を介してローカルネットワーク１４５２に接続される。ＷＡＮネットワーク環境において実装される場合、コンピューティングデバイス１４０２は通常、モデム１４５８またはワイドエリアネットワーク１４５４を介した通信を確立する他の手段を含む。モデム１４５８は、コンピューティングデバイス１４０２の内部にあっても外部にあってもよく、入出力インターフェイス１４４２または他の適切な機構を介してシステムバス１４０８に接続することができる。図示するネットワーク接続は例示に過ぎず、コンピューティングデバイス１４０２と５５０の間の通信リンク（群）を確立する他の手段を使用してもよい。
【００９２】
ネットワーク接続された環境、たとえばコンピューティング環境１４００で示されている環境では、コンピューティングデバイス１４０２に関連して図示するプログラムモジュール、またはその部分は、リモートメモリ記憶デバイスに格納することができる。例として、リモートアプリケーションプログラム１４６０は、リモートコンピューティングデバイス１４５０のメモリデバイスを用いて維持される。例示のために、アプリケーションプログラムおよびオペレーティングシステム１４２８など他の実行可能プログラムコンポーネントは、本明細書では別々のブロックとして示してあるが、このようなプログラムおよびコンポーネントは、様々な時間にコンピューティングデバイス１４０２の異なる格納コンポーネント内に存在し、コンピューティングデバイス１４０２の１つまたは複数のプロセッサ１４０４によって実行されると認識される。
【００９３】
時間制限メッセージを効率的処理するための実施形態を、構造上の特徴および／または方法に特有の語彙で説明したが、添付の特許請求の範囲の主題は、説明した特有の特徴にも方法にも必ずしも限定されないことを理解されたい。そうではなく、特有の特徴および方法は、時間制限メッセージを効率的に処理する例示的な実装形態として開示されている。
【図面の簡単な説明】
【００９４】
【図１】時間制限メッセージの効率的な処理のためのハイレベルデータフローを示すブロック図である。
【図２】時間制限メッセージを処理する、図１に示されている管理および記憶システムに関連づけられたコンポーネントおよびデータフローを示すブロック図である。
【図３】図１および２に示されている管理および記憶システムに関連づけられたコンポーネントおよびデータフロー、具体的には所与のクラスタのコンポーネントをさらに詳しく示すブロック図である。
【図４】図３に示されている時間制限メッセージの本文の処理および格納に関連づけられたコンポーネントおよびデータフローをより詳しく示すブロック図である。
【図５】図３に示されているメタデータ格納構造の一実装形態を示すブロック図である。
【図６】メタデータ格納構造の別の実装形態を示すブロック図である。
【図７】時間制限メッセージを受信し配信するために実施されるプロセスフローを示すフローチャートである。
【図８】メッセージ本文が書き込まれる１つまたは複数のログファイルを管理するプロセスフローを示すフローチャートである。
【図９】時間制限メッセージに対応するメタデータを格納するプロセスを示すフローチャートである。
【図１０】図９に示されているプロセスを示すシーケンス図である。
【図１１】テーブル構造をトラバース（ｔｒａｖｅｒｓｅ）して、要求されたメタデータまたはヘッダ情報を検索するプロセスを示すフローチャートである。
【図１２】要求があると、ユーザに提示できるように所与のメッセージを取得するプロセスを示すフローチャートである。
【図１３】所与のメッセージに既読の印を付けるプロセスを示すフローチャートである。
【図１４】時間制限メッセージの効率的な処理のためのシステムおよび方法、ならびに本明細書に記載するコンピューティング、ネットワーク、およびシステムアーキテクチャを完全に、または部分的に実装することができるコンピューティング環境を示すブロック図である。
【図１】
2008546076.tif 000003
【図２】
2008546076.tif 000004
【図３】
2008546076.tif 000005
【図４】
2008546076.tif 000006
【図５】
2008546076.tif 000007
【図６】
2008546076.tif 000008
【図７】
2008546076.tif 000009
【図８】
2008546076.tif 000010
【図９】
2008546076.tif 000011
【図１０】
2008546076.tif 000012
【図１１】
2008546076.tif 000013
【図１２】
2008546076.tif 000014
【図１３】
2008546076.tif 000015
【図１４】
2008546076.tif 000016