(58)【調査した分野】(Int.Cl.,DB名)
請求項3に記載の方法であって、前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送する工程は、アペンドモードで実行される、方法。
請求項5に記載の方法であって、前記キーワードに従って、前記レベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送する工程は、
前記キーワードに従って、前記増分ファイルに前記レベル2転置インデックスレコードを転送する工程と、
前記増分ファイルが増分閾値を超えたか否かを判定する工程と、
前記増分閾値を超えた場合に、前記初期静的圧縮ファイルを解凍して、解凍済みの初期静的ファイルを取得する工程と、
前記解凍済みの初期静的ファイルおよび前記増分ファイルをマージして、マージファイルを取得する工程と、
前記マージファイルを圧縮して、現行の静的圧縮を生成する工程と、
を含む、方法。
請求項10に記載のシステムであって、前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送することは、アペンドモードで実行される、システム。
請求項12に記載のシステムであって、前記キーワードに従って、前記レベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送することは、
前記キーワードに従って、前記増分ファイルに前記レベル2転置インデックスレコードを転送し、
前記増分ファイルが増分閾値を超えたか否かを判定し、
前記増分閾値を超えた場合に、前記初期静的圧縮ファイルを解凍して、解凍済みの初期静的ファイルを取得し、
前記解凍済みの初期静的ファイルおよび前記増分ファイルをマージして、マージファイルを取得し、
前記マージファイルを圧縮して、現行の静的圧縮を生成することを含む、システム。
【背景技術】
【0003】
インターネット通信が次第に広まって、ますます多くのユーザがメール(特に、電子メールすなわちEメール)で通信するようになるにつれ、メールボックス検索がデータ検索の中でも重要な検索技術になった。メールボックス検索は、通例、メールボックスインデックスに基づいている。すなわち、ユーザのメールはすべて、通例、メールボックスインデックスを用いて検索される。
【0004】
メールインデックスを確立するための1つの既存の方法は、以下の通りである:概して、メールボックスインデックスが、転置インデックスの形態で確立される。例えば、doc_id1、doc_id2、および、doc_id3という名称の3つのメールファイルがあり、いずれも「hello my world」というフレーズを含んでいるとする。したがって、キーワードおよびメールファイルの対応付けを格納する転置インデックスレコードは、以下に示すようになる:
【0005】
hello−>doc_id1,doc_id2,doc_id3,
【0006】
my−>doc_id1,doc_id2,doc_id3,
【0007】
world−>doc_id1,doc_id2,doc_id3;
【0008】
上述の転置インデックスレコードは、転置インデックスファイルに格納される。転置インデックスファイル内の各転置インデックスレコードのオフセット位置および長さが記録され、オフセット位置は、以下のように辞書ファイルに書き込まれる:
【0009】
{“hello”:{“file_path”:“/xxx/inverted_index_file”,“offset”:0}};
【0010】
ユーザが「hello」を含むメールを検索すると仮定すると、辞書ファイル内のこのキーワードを含むすべてのメールを見つけることができる。すなわち、アドレス「/xxx/inverted_index_file」が見つけられる。次いで、この転置インデックスファイルが開かれ、オフセット「0」の位置がフェッチされ、したがって、3通のメール{doc_id1,doc_id2,doc_id3}がフェッチされうる。
【0011】
しかしながら、新たなメールが追加されると、転置インデックスファイルは、検索結果の完全性を確保するために更新される必要がある。例えば、新たなメール(doc_id4)が追加されるとする。このメールも、合計3つのキーワード「hello my world」を含む。したがって、この時点で、転置インデックスレコードは、以下のように更新される必要がある:
【0012】
hello−>doc_id1,doc_id2,doc_id3,doc_id4,
【0013】
my−>doc_id1,doc_id2,doc_id3,doc_id4,
【0014】
world−>doc_id1,doc_id2,doc_id3,doc_id4;
【0015】
更新された転置インデックスレコードが、転置インデックスファイルに保存される場合、2つの転置インデックスレコード「my−>doc_id1,doc_id2,doc_id3,doc_id4」および「world−>doc_id1,doc_id2,doc_id3,doc_id4」の元々の格納位置は、転置インデックスファイル内で変更される必要がある。同時に、辞書ファイル内の対応するオフセット値が、修正される必要がある。
【0016】
したがって、上述の方法では、新たなメールが追加されると、転置インデックスファイルの他の関連データ内容がシフトされる必要がある。
【0017】
上述のようにメールインデックスを用いる既存のメールボックス検索は、通例、転置インデックスファイル全体のキーワード検索を必要とする。メールデータの規模が大きくなるにつれ、メールボックスサーバは、何億もの加入者および何十億もの個々のメールメッセージを有しうる。かかる大量のデータを格納するには、大量のハードディスクIOリソースが必要であり、メールボックスを迅速にインデックス化することが困難ないしは不可能になる。さらに、大量のメールの格納コストは、メールサーバにとって非常に高い。結果として、大量の格納リソースが拘束されうる。
【発明を実施するための形態】
【0031】
本発明は、処理、装置、システム、物質の組成、コンピュータ読み取り可能な格納媒体上に具現化されたコンピュータプログラム製品、および/または、プロセッサ(プロセッサに接続されたメモリに格納および/またはそのメモリによって提供される命令を実行するよう構成されたプロセッサ)を含め、様々な形態で実装されうる。本明細書では、これらの実装または本発明が取りうる任意の他の形態を、技術と呼ぶ。一般に、開示された処理の工程の順序は、本発明の範囲内で変更されてもよい。特に言及しない限り、タスクを実行するよう構成されるものとして記載されたプロセッサまたはメモリなどの構成要素は、ある時間にタスクを実行するよう一時的に構成された一般的な構成要素として、または、タスクを実行するよう製造された特定の構成要素として実装されてよい。本明細書では、「プロセッサ」という用語は、1または複数のデバイス、回路、および/または、コンピュータプログラム命令などのデータを処理するよう構成された処理コアを指すものとする。
【0032】
以下では、本発明の原理を示す図面を参照しつつ、本発明の1または複数の実施形態の詳細な説明を行う。本発明は、かかる実施形態に関連して説明されているが、どの実施形態にも限定されない。本発明の範囲は、特許請求の範囲によってのみ限定されるものであり、多くの代替物、変形物、および、等価物を含む。以下の説明では、本発明の完全な理解を提供するために、多くの具体的な詳細事項が記載されている。これらの詳細事項は、例示を目的としたものであり、本発明は、これらの具体的な詳細事項の一部または全てがなくとも特許請求の範囲に従って実施可能である。簡単のために、本発明に関連する技術分野で周知の技術事項については、本発明が必要以上にわかりにくくならないように、詳細には説明していない。
【0033】
本願に記載の技術は、多くの汎用または専用コンピュータシステム環境または構成で利用できる。これらの例は、パーソナルコンピュータ、サーバ、ハンドヘルドデバイスまたは携帯型装置、タブレット型の装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家庭用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置の内の任意のものを備える分散型コンピュータ環境などを含む。
【0034】
本願は、コンピュータによって実行されるコンピュータ実行可能なコマンド(プログラムモジュールなど)の一般的なコンテキストで記述されてよい。一般に、プログラムモジュールは、特定のタスクの実行または特定の抽象データ型の実施のためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを備える。本願は、分散型コンピュータ環境で実行されてもよい。かかる分散型コンピュータ環境では、通信ネットワークを介して接続されたリモート処理装置によって、タスクが実行される。分散型コンピュータ環境において、プログラムモジュールは、記憶装置を備えるローカルまたはリモートコンピュータの記憶媒体に格納されうる。
【0035】
図1Aは、複数レベルのキャッシュを利用するメールインデックス化システムの一実施形態を示すブロック図である。この例において、システム150は、1または複数のメールボックスサーバ152と、階層的に構成されたキャッシュ154〜158とを備える。メールボックスサーバ152は、eメールメッセージをインデックス化して、階層的に構成されたキャッシュにインデックス情報を格納する。3つのキャッシュレベルが、例示の目的で図示されているが、異なる数のキャッシュが他の実施形態で用いられてもよい。レベル1キャッシュは、サーバ152のランダムアクセスメモリ(RAM)など、低待ち時間メモリを用いて実装される。レベル2キャッシュおよびレベル3キャッシュは、ハードディスクまたはその他の記憶デバイスなど、レベル1キャッシュの実装に用いる低待ち時間メモリよりも大きい待ち時間を有する1または複数のコンポーネントを用いて実装される。いくつかの実施形態において、メールに対して確立された転置インデックスレコードは、まず、レベル1キャッシュに保存される。レベル1キャッシュに格納されたデータが第1の所定の閾値に達すると、レベル1キャッシュ内のレベル1転置インデックスレコードはすべて、将来の転置インデックスレコードのための余地を確保するためにレベル2キャッシュファイルに転送される。レベル2キャッシュは、キャッシュファイルを格納する。レベル2キャッシュ内のデータ量が第2の所定の閾値に達すると、レベル2データは、転置インデックスファイルを格納するレベル3キャッシュに転送される。メールインデックスを確立するためのこの処理は、ハードディスクの読み書きの頻度を削減するため、ハードディスクの入力/出力(I/O)性能を向上させることができる。
【0036】
図1Bは、メールインデックスを確立するための処理の一実施形態を示すフローチャートである。処理100は、システム(150など)上で実行されてよい。
【0037】
工程101で、eメールメッセージに関連するキーワードを取得するために、eメールメッセージが処理される。
【0038】
いくつかの実施形態では、eメールメッセージのキーワードを取得するために、インデックスが確立されるeメールメッセージに対して、単語分割が実行される。いくつかの実施形態において、インデックスは、eメールのテキストのみに対して確立されるため、単語分割は、eメールのテキストのみに適用される。いくつかの実施形態では、メッセージの件名も、インデックスを確立するための基礎となる必要があるため、単語分割は、メールキーワードを取得するために、メールのテキストおよびメールの件名の両方に適用される。当業者であれば、システムの具体的な要件に従って単語分割ツールを選択することにより、この工程を実現できる。
【0039】
ユーザが新たなメールを受信するごとに、本願の実施形態に開示したメールインデックス確立方法が、その新たなメールに実施されてよいことがわかる。
【0040】
工程102で、取得されたキーワードは、レベル1キャッシュに格納されたレベル1転置インデックスレコードを更新するための基礎として用いられる。
【0041】
現在のメールが単語分割を受けた後、キーワードおよびメールメッセージの間の対応関係を確立する転置インデックスレコードが生成される。例えば、現在のメールの識別子が「doc5」であり、この現在のメールが2つのキーワード「keyword1」および「keyword5」を有すると仮定する。この例において、転置インデックスレコードは、以下に示すように生成される:
【0044】
いくつかの実施形態において、レベル1キャッシュは、初期転置インデックスレコードを保存するために低待ち時間メモリ内に構成される。すなわち、現在のメールに対して最初に生成された転置インデックスレコードは、最初には、メモリ内のレベル1キャッシュだけに格納される。転置インデックスレコードは、キー/値ペアを含む。レベル1キャッシュ内の転置インデックスレコードの「キー」とは、様々なキーワードのことを指しており、「値」は、メールメッセージの識別子である。本実施形態のレベル1バッファの初期転置インデックスレコードが以下の通りであると仮定する:
【0045】
keyword1:doc1,doc2,doc3;
【0046】
keyword2:doc1,doc4
【0047】
したがって、現在のメールから新たに生成された転置インデックスレコードは、レベル1キャッシュ内の転置インデックスレコードを更新するために、既存の転置インデックスレコードにマージされ、更新された転置インデックスレコードは、以下の通りになる:
【0048】
keyword1:doc1,doc2,doc3,doc5;
【0049】
keyword2:doc1,doc4;
【0051】
工程103で、レベル1キャッシュ内のレベル1転置インデックスレコードのサイズが第1の所定の閾値を超えているか否かが判定される。超えている場合、制御は工程104に進み、そうでない場合、処理は終了する。
【0052】
いくつかの実施形態では、少なくとも2つのキャッシュレベルが、I/O動作を実現するように構成される。レベル1キャッシュは低待ち時間メモリ内に構成され、データはメモリモード転置インデックスレコードとして記録される。レベル2キャッシュは、より高待ち時間のメモリまたは記憶コンポーネント(ハードディスクなど)を用いて構成される。新たなメールが転置インデックスレコードを取得するために処理されると、レコードは、レベル1キャッシュに書き込まれる。メモリ内のレベル1キャッシュが、第1の所定の閾値(例えば、2MB)に達すると、レベル1キャッシュ内の転置インデックスレコードはすべて、レベル2キャッシュ内のバッファファイルに書き込まれる。
【0053】
レベル1キャッシュのサイズが第1の閾値に達していない場合、現在のメールメッセージの転置インデックスレコードは、レベル1キャッシュに書き込まれる。ユーザが次の検索を行った時に、現在のメールが検索条件に一致すると、現在のメールは、レベル1キャッシュ内で見つけられる。これで、現在のメールに対するインデックス確立処理は終了する。
【0054】
工程104で、レベル1キャッシュ内のレベル1転置インデックスレコードすべてが、レベル2キャッシュに転送され、レベル2キャッシュファイルに格納される。いくつかの実施形態において、転送は、データを新たな位置にコピーした後に古い位置からデータを削除することとして実施される。転置インデックスレコードは、工程102で述べたように、既存の転置インデックスレコードにマージされる。
【0055】
工程105で、現在のレベル2キャッシュファイルのサイズが第2の所定の閾値を超えるか否かが判定される。超えている場合、制御は工程106に進み、そうでない場合、処理は終了する。
【0056】
本願の実施形態において、レベル2キャッシュファイルについての閾値サイズ(第2の所定の閾値)は、レベル1キャッシュ内のレベル1転置インデックスレコードが書き込まれた現在のレベル2キャッシュファイルが所定の閾値に達した時に、レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてがレベル3転置インデックスファイルに書き込まれるように構成される。
【0057】
この工程で、レベル2キャッシュファイルのサイズが第1の所定の閾値に達していない場合、現在のメールの転置インデックスレコードは、レベル2キャッシュに書き込まれる。すなわち、現在のメールの転置インデックスレコードは、レベル2キャッシュファイルに保存されている。ユーザが次の検索を行った時、現在のメールが検索条件に一致すると、現在のメールは、レベル2キャッシュファイル内で見つけられる。これで、現在のメールに対するインデックス確立処理は終了する。
【0058】
レベル2キャッシュファイルは、以下の現象を避けるために用いられるバッファとして機能する:メモリ内のレベル1バッファが満杯になった後、レベル1バッファ内の転置インデックスレコードが様々なキーワードに属するレベル3転置インデックスファイルに直接書き込まれている時に、複数のレベル3転置インデックスファイルを同時に書き込むことが必要になる。例えば、メモリ内のレベル1キャッシュに10個の転置インデックスレコードが存在し、これら10個の転置インデックスレコード内の10個のキーワードが5個のレベル3転置インデックスファイルに別個に属すると仮定する。この時点で、レベル1キャッシュ内の転置インデックスレコードがレベル3転置インデックスファイルに直接書き込まれる場合、書き込み動作は、5個のレベル3転置インデックスファイルで同時に実行される必要がある。レベル2キャッシュファイルがバッファファイルとして機能すると、これら10個の転置インデックスレコードは、1つのレベル2キャッシュファイルに書き込まれるだけでよい。他の転置インデックスレコード(その一部は、同じ5個のレベル3転置インデックスファイルに最終的に書き込まれうる)の追加で、レベル2キャッシュファイルが特定の閾値(例えば、4MB)まで大きくなると、レベル2キャッシュファイル内のレベル2転置インデックスに対してワンタイム分類(one−time classification)が実行される。バッファファイル内の多くの他の転置インデックスレコードと共に10個の転置インデックスレコードが、キーワードの属するレベル3転置インデックスファイルに書き込まれる。これは、ハードディスクへのファイル書き込みの頻度を大幅に削減する。
【0059】
工程106で、レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてが、パスファイルに従ってレベル3転置インデックスファイルに転送される。このパスファイルは、キーワードおよびレベル3転置インデックスファイルの間の対応関係を確立するマッピング関係を保存する。いくつかの実施形態において、パスファイルは、キーワードおよびレベル3転置インデックスファイルのマッピング関係(すなわち、どのキーワードが、どのレベル3転置インデックスファイルに保存されるのか)を記録するために生成されうる。パスファイルは、キーワードからレベル3転置インデックスファイルへのマッピング関係を記録する。パスファイル内のレコードの例は、以下の通りである:
【0060】
keyword1〜keyword3:/xx/leve_3_inverted_index_file_name_1
【0061】
keyword2〜.keywordx:/xx/leve_3_inverted_index_file_name_2
【0063】
keywordn〜keywordm:/xx/leve_3_inverted_index_file_name_n
【0064】
キーワードは、異なるデポジットファイルにアルファベット順に格納されてよい。一例では、keyword1が「abacus」、keyword3が「azure」、keyword2が「back」、keywordxが「butter」、などである。その他の構成も可能である。パスファイルが構成された後、パスファイルに記録されたマッピング関係から、キーワードが位置するレベル3転置インデックスファイルを見つけることが、後のメールボックス検索において可能になる。次いで、システムは、レベル3転置インデックスファイルをフェッチした後、どのメールがキーワードを含むのかを判定できる。したがって、パスファイルは、キーワードからレベル3転置インデックスファイルへのパスを定義する。
【0065】
図2は、レベル2転置インデックスレコードをレベル3キャッシュに転送するための処理の一実施形態を示すフローチャートである。いくつかの実施形態において、処理200は、処理100の工程106を実施する。
【0066】
工程201で、レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてが、メモリに転送される(例えば、ディスク格納位置からメモリに読み出される)。
【0067】
工程202で、パスファイルに少なくとも部分的に基づいて、レベル2転置インデックスレコード内のキーワードに対応するレベル3転置インデックスファイルが決定される。上述のように、パスファイルは、キーワードおよびそれぞれのレベル3転置インデックスファイルに関連するパスを含む。パスは、レベル2転置インデックスレコード内のキーワードに対応するレベル3転置インデックスファイルの決定に用いられる。
【0068】
工程203で、レベル2転置インデックスレコードは、キーワードに従って、決定されたレベル3転置インデックスファイルに書き込まれる。
【0069】
いくつかの実施形態において、書き込み速度は、レベル3転置インデックスファイルに書き込み動作を実行するためにアペンドモードを用いることによって上げられる。したがって、いくつかの実施形態において、レベル2転置インデックスレコードがレベル3転置インデックスファイルに書き込まれる時、レベル2キャッシュファイル内の転置インデックスレコードはすべて、キーワードに従って、決定されたレベル3転置インデックスファイルにアペンドモードでフェッチされる。アペンドモードは、ファイルの編集に用いられる標準的なモードである。アペンドモードでは、新たなデータがファイルの最後に直接追加される。
【0070】
閾値を超えた時、システムはパスファイルをフェッチする。この時点で、システムは、バッファファイルの転置レコードをスキャンし、各レコードのキーワード(例えば、keyword1)をフェッチする。次いで、パスファイル情報を用いて、keyword1レコードがどの転置ファイルに配置されるべきかを学習し、その後、そのファイルにレコードを追加する。
【0071】
本願の実施形態は、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイルを含むアプローチを用いる。メールメッセージに対して確立された転置インデックスレコードは、まず、レベル1キャッシュに保存される;レベル1キャッシュが第1の所定の閾値に達すると、レベル1キャッシュ内のレベル1転置インデックスレコードはすべて、レベル2キャッシュファイルに転送される;レベル2キャッシュファイルが第2の所定の閾値に達すると、それらのファイル内のレベル2転置インデックスレコードは、レベル3転置インデックスファイルに転送される。このアプローチは、システムが、メールのための多数の転置インデックスレコードを有することによるハードディスクへの過剰な回数の書き込み動作を避けることを可能にする。その結果、メールインデックスを確立する処理における転置インデックスレコード書き込み速度が上昇する。これは、メールインデックス確立の速度を上昇させるだけでなく、ディスクへの過剰な回数の書き込み動作からの影響を削減し、ディスクIO性能を向上させる。
【0072】
さらに、本願の実施形態におけるメールインデックスの一部は、低待ち時間メモリを用いて実装されるレベル1キャッシュ内に保存される。結果として、ハードディスクは、メールインデックス全体を格納しない。したがって、新たなメールが頻繁に処理された場合に、メモリ内のバッファは、そのメールがディスク書き込みへ過剰な影響を与えることを防ぐ。さらに、最も新しいデータに対する速度を高めることにより、リアルタイム検索の目的を達成できる。
【0073】
図3は、メールインデックスを確立するための処理の別の実施形態を示すフローチャートである。いくつかの実施形態において、処理300は、処理100が完了した後に実行される。
【0074】
この例では、さらに、第3の所定の閾値がレベル3転置インデックスファイルのために確立され;レベル3転置インデックスファイルのサイズが第3の所定の閾値に達すると、そのファイルは、複数(例えば、2つ)の転置インデックスサブファイルに分割され、これらの転置インデックスサブファイルは、第3の所定の閾値以下の大きさでなければならない。このように、各レベル3転置インデックスファイルが、過度に大きくならないことを保証し、したがって、メールインデックスに対するアクセス速度を保証することができる。
【0075】
工程301で、レベル3転置インデックスファイルのサイズが第3の所定の閾値を超えるか否かが判定される。超える場合、制御は工程302に進む。レベル3転置インデックスファイルのための閾値は、レベル2キャッシュファイルのための第2の所定の閾値と同じであってもよいし、異なる値であってもよい。
【0076】
この例において、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイルのための閾値の大きさの構成は、特定の期間内のディスクへの読み書き動作の回数、および、ユーザがメール検索を行った時にユーザ検索結果を返すためにどれだけの時間が割り当てられるのか、などの要素を考慮する。ファイルが小さいほど、読み書き速度は速くなる。ただし、キャッシュサイズが非常に小さいと、ファイルの数が過剰になり、読み書き速度が遅くなる。したがって、閾値の大きさは、実際の条件に合わせて経験的に調整される。
【0077】
現在の工程において、レベル3転置インデックスファイルのサイズが第3の所定の閾値(例えば、4MB)に達しない場合、後の工程は実行されない。
【0078】
工程302で、レベル3転置インデックスファイルは、複数(例えば、2つ)の転置インデックスサブファイルに分割される。
【0079】
レベル3転置インデックスファイルが大きすぎる場合、レベル3転置インデックスファイルは、キーワードに基づいて分割できる。ファイルは、キーワードの粒度に従って分割される。すなわち、1つのキーワードに対応する転置インデックスレコードが、1つだけの転置インデックスサブファイルになる。したがって、その後に、1つのキーワードに関連するメールに関してクエリが行われると、1つのレベル3転置インデックスファイルだけがフェッチされる。さらに、このレベル3転置インデックスファイルは、閾値サイズ(例えば、4MB)を超えないので、メールインデックスが迅速にフェッチされることを保証する。一例は以下の通りである:
【0080】
keyword1:doc1,doc2,doc3...
【0081】
keyword2:doc1,doc3,doc4...
【0082】
keyword3:doc1,doc6...
【0084】
keywordn:doc1,dock...
【0085】
このファイルが大きすぎる場合、レコードエントリの境界で複数(例えば、2つ)の転置インデックスサブファイルに分割される。
【0086】
いくつかの実施形態において、レベル3転置インデックスファイルが2つの転置インデックスサブファイルに分割される時、2つの要素を考慮する必要がある。一つ目は、1つのキーワードに対応する転置インデックスレコードが1つの転置インデックスサブファイル内に確実に存在することを保証するためのキーワード粒度である。二つ目は、2つの転置インデックスサブファイルが互いにできるだけ近いサイズであることが好ましいという事実を考慮する必要性である。このように、その後のサブファイルの分割の頻度が最小化される。
【0087】
工程303で、パスファイルは、分割済みの転置インデックスサブファイルに従って更新される。
【0088】
第3の所定の閾値を超えるレベル3転置インデックスファイルは、自身の識別子をそれぞれ持つ2つの転置インデックスサブファイルに分割されるので、元々のレベル3転置インデックスファイル内の様々なキーワードに対応する転置インデックスレコードは変化する。したがって、パスファイルは、分割済みの転置インデックスサブファイルに従って更新される必要がある。パスファイルが更新された後、元々のレベル3転置インデックスファイルは削除されてよい。
【0089】
図4は、メールインデックスを確立するための処理の別の実施形態を示すフローチャートである。いくつかの実施形態において、処理400は、処理100が完了した後に実行される。この例において、レベル3転置インデックスファイルは、2つの部分すなわち初期静的圧縮ファイル(例えば、zipファイル)および増分ファイルを有するよう構成されており、初期静的圧縮ファイルは、圧縮された転置インデックスレコードを保存し、増分ファイルは、圧縮されていない転置インデックスレコードを保存する。本実施形態において、転置インデックスレコードが新たなメールのために生成されると、これらの新たに生成された転置インデックスレコードは、増分ファイルに書き込まれてよい。結果として、メールインデックスをより迅速に確立し、過度の頻繁なディスク書き込みによる影響を低減できる。ディスクのIO性能を向上させ、レベル3転置インデックスファイルのための格納リソースをさらに節約することができる。
【0090】
上述のように、処理100の最後に、レベル2転置インデックスレコードは、キーワードおよび対応するレベル3転置インデックスファイルのマッピング関係情報を指定するパスファイルに従ってレベル3転置インデックスファイルの中から決定された増分ファイルに転送される。処理100に続いて、工程409で、増分ファイルが増分閾値を超えるか否かが判定される。超える場合、制御は工程410に進む。
【0091】
本実施形態では、閾値が、増分ファイルに対して構成される。例えば、増分ファイルは、4MBの閾値以下であることが好ましい。増分ファイルが所定の閾値に達すると、増分ファイルに保存された内容は、レベル3転置インデックスファイルのサイズと、そのファイルが占有するハードディスクスペースの量とを削減するために圧縮される。この工程において、増分ファイルが増分閾値を超えない場合、後の工程は実行されない。
【0092】
工程410で、初期静的圧縮ファイルは、解凍済みの初期静的ファイルを取得するために解凍される。いくつかの実施形態において、増分ファイルのサイズが増分閾値を超えた場合、まず、初期静的圧縮ファイルの内容がフェッチされ、圧縮されていない初期静的ファイルを取得するために解凍される。
【0093】
工程411で、解凍済みの初期静的ファイルおよび増分ファイルは、マージファイルを取得するためにマージされる。
【0094】
工程412で、マージファイルは、現行の静的圧縮ファイル(例えば、zipファイル)を生成するために、任意の適切な技術を用いて圧縮される。いくつかの実施形態において、マージファイルが現行の静的圧縮ファイルを生成するために圧縮されると、増分ファイルは、その元々の内容から解放される。このことすべての目的は、圧縮技術を用いてレベル3転置インデックスファイルに対するストレージコストを下げることであるが、同時に、頻繁なデータ書き込みに伴って起きる圧縮および解凍から生じる計算およびディスク書き込みのコストを削減することである。
【0095】
図5は、メール検索処理の一実施形態を示すフローチャートである。処理500は、処理100などの処理を用いてメールインデックスが確立された後に実行される。
【0096】
ユーザがメールを検索する時、最初の工程は、検索されるキーワードをユーザから受信することである。工程501で、ユーザによって送信された検索キーワードが取得される。
【0097】
工程502で、パスファイルに従って、キーワードに対応するレベル3転置インデックスファイルが決定される。上述のように、このパスファイルは、キーワードおよびレベル3転置インデックスファイルの間の対応関係を確立するマッピング関係を保存する。
【0098】
工程503で、キーワードを含む第1のメールセットが、レベル3転置インデックスファイルに基づいて決定される。
【0099】
レベル3転置インデックスファイルは、パスファイルに従って決定され、検索されるキーワードを含む。いくつかの実施形態では、次に、レベル3転置インデックスファイルは、検索を容易にするために、メモリ内のバイナリツリーデータ構造にロードされる。バイナリツリーデータ構造は、検索されるキーワードを含むメールメッセージを見つけるために検索される。このセットのメールメッセージは、第1のメールセットとして見なされる。
【0100】
工程504で、キーワードを含む第2のメールセットが、レベル1キャッシュに基づいて決定される。
【0101】
一部の例では、レベル1キャッシュは、キーワードを含むいくつかのメールを有しうる。キャッシュ内のこれらのメールが第1の所定の閾値にまだ達していなければ、それらは、レベル2キャッシュファイルにフェッチされていない。したがって、レベル1キャッシュで検索して、これらのメールを見つける必要があり、それらのメールは第2のメールセットを形成する。
【0102】
工程505で、キーワードを含む第3のメールセットが、レベル2キャッシュファイルに基づいて決定される。
【0103】
一部の例では、レベル2キャッシュファイルは、キーワードを含むいくつかのメールを有しうる。レベル2キャッシュファイル内のこのメールが第2の所定の閾値にまだ達していなければ、そのメールは、レベル3転置インデックスファイルにフェッチされていない。したがって、レベル2キャッシュファイルで検索して、これらのメールを見つける必要があり、それらのメールは第3のメールセットを形成する。
【0104】
工程506で、第1のメールセット、第2のメールセット、および、第3のメールセットは、検索結果を得るためにマージされる。
【0105】
最後に、別個に見つけられた後にマージされた、第1のメールセット、第2のメールセット、および、第3のメールセットの和が、ユーザの現在のキーワードに対する検索結果となる。工程は他の順序で配列されてもよく、例えば、代替例として、第1、第2、および、第3のメールセットが、それぞれ、レベル1キャッシュ、レベル2キャッシュ、および、レベル3キャッシュからのメールメッセージに対応するものとしてもよいことに注意されたい。
【0106】
本実施形態におけるメール検索中、メールは、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイル内でユーザの検索キーワードに従って検索される。さらに、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイルのサイズは、それぞれの所定の閾値を超えない。したがって、これらの3つに対して、別個の検索を実行することで、ハードディスクの読み書き頻度を削減し、メール検索速度を上昇させ、ハードディスクIO性能も向上させることができる。
【0107】
図6は、メールインデックスを確立するよう構成されたシステムの一実施形態を示すブロック図である。システムは、処理100などの処理を実行するよう構成されており、以下を備える:
【0108】
メールに単語分割を実行して、そのメールのキーワードを取得するよう構成された単語分割ユニット601。
【0109】
レベル1キャッシュに保存されたレベル1転置インデックスレコードを更新するための基礎として、現在のメールのキーワードを用いるよう構成されたレベル1キャッシュ更新ユニット602。
【0110】
レベル1キャッシュ内のレベル1転置インデックスレコードのサイズが第1の所定の閾値を超えているか否かを判定するよう構成された第1の判定ユニット603。
【0111】
第1の判定ユニットの結果が肯定であった場合に、レベル1キャッシュ内のレベル1転置インデックスレコードすべてをレベル2キャッシュファイルに転送するよう構成された第1の転送ユニット604。
【0112】
現在のレベル2キャッシュファイルのサイズが第2の所定の閾値を超えているか否かを判定するよう構成された第2の判定ユニット605。
【0113】
第2の判定ユニットの結果が肯定であった場合に、キーワードおよびレベル3転置インデックスファイルのマッピング関係情報を格納するパスファイルに従って、レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてをレベル3転置インデックスファイルに転送するよう構成された第2の転送ユニット606。
【0114】
図7は、転送ユニットの一実施形態を示すブロック図である。この例において、システム700は、
図6の第2の転送ユニット606を実装するために用いられており、以下を備える:
【0115】
レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてをメモリにフェッチ(すなわち、転送)するよう構成された第1のフェッチモジュール701。
【0116】
レベル2転置インデックスレコード内のキーワードに対応するレベル3転置インデックスファイルを決定する基礎としてパスファイルを用いるよう構成された決定モジュール702。
【0117】
キーワードに従って、決定されたレベル3転置インデックスファイルにレベル2転置インデックスレコードをフェッチ(転送)するよう構成された第2のフェッチモジュール703。いくつかの実施形態において、第2のフェッチモジュール703は、特に、キーワードに従って、決定されたレベル3転置インデックスファイルにレベル2キャッシュファイル内の転置インデックスレコードすべてをアペンドモードでフェッチするよう構成される。
【0118】
図8は、メールインデックスを確立するよう構成されたシステムのブロック図である。この例において、システム800は、
図6の600と同様のインデックス確立ユニットに加えて、以下を備える:
【0119】
レベル3転置インデックスファイルのサイズが第3の所定の閾値を超えているか否かを判定するよう構成された第3の判定ユニット801。
【0120】
第3の判定ユニットの結果が肯定であった場合に、レベル3転置インデックスファイルを2つの転置インデックスサブファイルに分割するよう構成された分割ユニット802。
【0121】
2つの分割された転置インデックスサブファイルに従ってパスファイルを更新するよう構成されたパスファイル更新ユニット803。
【0122】
図9は、メールインデックスを確立するよう構成されたシステムの別の実施形態を示すブロック図である。システム900は、以下を備える:
【0123】
メールメッセージに単語分割を実行して、そのメールメッセージのキーワードを取得するよう構成された単語分割ユニット601。
【0124】
レベル1キャッシュに保存されたレベル1転置インデックスレコードを更新するための基礎として、メールメッセージのキーワードを用いるよう構成されたレベル1キャッシュ更新ユニット602。
【0125】
レベル1キャッシュ内のレベル1転置インデックスレコードのサイズが第1の所定の閾値を超えているか否かを判定するよう構成された第1の判定ユニット603。
【0126】
第1の判定ユニットの結果が肯定であった場合に、レベル1キャッシュ内のレベル1転置インデックスレコードすべてをレベル2キャッシュファイルに転送するよう構成された第1の転送ユニット604。
【0127】
現在のレベル2キャッシュファイルのサイズが第2の所定の閾値を超えているか否かを判定するよう構成された第2の判定ユニット605。
【0128】
レベル2キャッシュファイル内のレベル2転置インデックスレコードすべてをメモリにフェッチするよう構成された第1のフェッチモジュール701。
【0129】
レベル2転置インデックスレコード内のキーワードに対応するレベル3転置インデックスファイルを決定するためにパスファイルを用いる決定モジュール702。いくつかの実施形態において、レベル3転置インデックスファイルは、初期静的圧縮ファイルおよび増分ファイルを含む。
【0130】
キーワードに従って、レベル2転置インデックスレコードを増分ファイルにフェッチするよう構成された第2のフェッチモジュール703。
【0131】
増分ファイルが増分閾値を超えているか否かを判定するよう構成された第4の判定ユニット901。
【0132】
第4の判定ユニットの結果が肯定であった場合に、解凍済みの初期静的ファイルを取得するために、初期静的圧縮ファイルを解凍するよう構成された解凍ユニット902。
【0133】
マージファイルを取得するために、初期静的ファイルおよび増分ファイルをマージするよう構成されたマージユニット903。
【0134】
現在の静的圧縮ファイルを生成するために、マージファイルを圧縮するよう構成された圧縮ユニット904。
【0135】
本実施形態において、レベル3転置インデックスファイルは、圧縮初期静的ファイルとしてまたは増分ファイルとして分類される。したがって、メールインデックスをより迅速に確立し、過度の頻繁なディスク書き込みによる影響を低減できる。ディスクのIO性能を向上させ、レベル3転置インデックスファイルのための格納リソースをさらに節約することができる。
【0136】
図10は、メール検索システムの一実施形態を示すブロック図である。メール検索システム1000は、上述のメールインデックス確立システムと協働するものであり、以下を備える:
【0137】
ユーザによって送信された検索キーワードを取得するよう構成されたキーワード取得ユニット1001。
【0138】
キーワードとレベル3転置インデックスファイルとの間の対応関係を確立するマッピング関係を保存するパスファイルに従って、キーワードに対応するレベル3転置インデックスファイルを決定するよう構成された決定ユニット1002。
【0139】
レベル3転置インデックスファイルから、キーワードが位置する第1のメールセットを決定するよう構成された第1のメールセット決定ユニット1003。
【0140】
レベル1キャッシュから、キーワードが位置する第2のメールセットを決定するよう構成された第2のメールセット決定ユニット1004。
【0141】
レベル2キャッシュファイルから、キーワードが位置する第3のメールセットを決定するよう構成された第3のメールセット決定ユニット1005。
【0142】
検索結果を取得するために、第1のメールセット、第2のメールセット、および、第3のメールセットをマージするよう構成された検索結果取得ユニット1006。
【0143】
本実施形態におけるメール検索中、メールは、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイル内でユーザの検索キーワードに従って検索される。さらに、レベル1キャッシュ、レベル2キャッシュファイル、および、レベル3転置インデックスファイルのサイズは、それぞれの所定の閾値を超えない。したがって、これらの3つに対して、別個の検索を実行することで、ハードディスクの読み書き頻度を削減し、メール検索速度を上昇させ、ハードディスクIO性能も向上させることができる。
【0144】
上述のモジュール/ユニットは、1または複数のプロセッサ上で実行されるソフトウェアコンポーネントとして、特定の機能を実行するよう設計されたプログラム可能論理デバイスおよび/または特定用途向け集積回路などのハードウェアとして、もしくは、それらの組み合わせとして実装することができる。いくつかの実施形態において、モジュール/ユニットは、コンピュータデバイス(パーソナルコンピュータ、サーバ、ネットワーク装置など)に本願の実施形態に記載された方法を実行させるための複数の命令など、不揮発性記憶媒体(光学ディスク、フラッシュ記憶装置、携帯用ハードディスクなど)に格納することができるソフトウェア製品の形態で具現化されてよい。モジュール/ユニットは、単一のデバイス上に実装されてもよいし、複数のデバイスにわたって分散されてもよい。モジュール/ユニットの機能は、互いに統合されてもよいし、複数のサブモジュール/サブユニットにさらに分割されてもよい。
【0145】
上述の実施形態は、理解しやすいようにいくぶん詳しく説明されているが、本発明は、提供された詳細事項に限定されるものではない。本発明を実施する多くの代替方法が存在する。開示された実施形態は、例示であり、限定を意図するものではない。
【0146】
[適用例1]
電子メールメッセージ処理のための方法であって、
電子メールメッセージに関連する1セットのキーワードを取得する工程と、
1または複数のコンピュータプロセッサを用いて、前記1セットのキーワードに少なくとも部分的に基づいて、レベル1キャッシュに格納された1セットの転置インデックスレコードを更新する工程と、
前記レベル1キャッシュに格納された前記1セットの転置インデックスレコードのサイズが第1の所定の閾値を超えたか否かを判定する工程と、
前記第1の所定の閾値を超えた場合に、前記レベル1キャッシュ内の前記1セットの転置インデックスレコードをレベル2キャッシュに転送する工程と、
レベル2キャッシュファイルのサイズが第2の所定の閾値を超えたか否かを判定する工程と、
前記第2の所定の閾値を超えた場合に、前記キーワードと、対応するレベル3転置インデックスファイルとのマッピング関係情報を格納するパスファイルに従って、1セットの転置インデックスファイルを格納するレベル3キャッシュに前記レベル2キャッシュファイル内の転置インデックスレコードを転送する工程と、
を備える、方法。
[適用例2]
適用例1に記載の方法であって、さらに、
レベル3転置インデックスファイルのサイズが第3の所定の閾値を超えたか否かを判定する工程と、
前記レベル3転置インデックスファイルの前記サイズが前記第3の所定の閾値を超えた場合に、前記レベル3転置インデックスファイルを2つの転置インデックスサブファイルに分割する工程と、
前記2つの分割された転置インデックスサブファイルに従って、前記パスファイルを更新する工程と、
を備える、方法。
[適用例3]
適用例1に記載の方法であって、前記レベル2キャッシュファイル内の前記転置インデックスレコードをレベル3転置インデックスファイルに転送する工程は、
前記レベル2キャッシュファイル内の前記レベル2転置インデックスレコードをメモリにフェッチする工程と、
前記パスファイルに基づいて、前記レベル2転置インデックスレコード内のキーワードに対応する前記レベル3転置インデックスファイルを決定する工程と、
前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2転置インデックスレコードを転送する工程と、
を含む、方法。
[適用例4]
適用例3に記載の方法であって、前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送する工程は、アペンドモードで実行される、方法。
[適用例5]
適用例3に記載の方法であって、1つのレベル3転置インデックスファイルが、初期静的圧縮ファイルおよび増分ファイルを備える、方法。
[適用例6]
適用例5に記載の方法であって、前記キーワードに従って、前記レベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送する工程は、
前記キーワードに従って、前記増分ファイルに前記レベル2転置インデックスレコードを転送する工程と、
前記増分ファイルが増分閾値を超えたか否かを判定する工程と、
前記増分閾値を超えた場合に、前記初期静的圧縮ファイルを解凍して、解凍済みの初期静的ファイルを取得する工程と、
前記解凍済みの初期静的ファイルおよび前記増分ファイルをマージして、マージファイルを取得する工程と、
前記マージファイルを圧縮して、現行の静的圧縮を生成する工程と、
を含む、方法。
[適用例7]
適用例1に記載の方法であって、さらに、
ユーザによって送信された1または複数の検索キーワードのセットを取得する工程と、
前記パスファイルに従って、前記ユーザによって送信された前記検索キーワードに対応するレベル3転置インデックスファイルを決定する工程と、
前記レベル3転置インデックスファイルに基づいて、前記検索キーワードを含む第1のメールセットを、前記レベル1キャッシュに基づいて、前記検索キーワードを含む第2のメールセットを、そして、前記レベル2キャッシュファイルに基づいて、前記検索キーワードを含む第3のメールセットを決定する工程と、
前記第1のメールセット、第2のメールセット、および、第3のメールセットをマージして、検索結果を得る工程と、
を備える、方法。
[適用例8]
電子メールメッセージを処理するためのシステムであって、
1または複数のプロセッサであって、
電子メールメッセージに関連する1セットのキーワードを取得し、
前記1セットのキーワードに少なくとも部分的に基づいて、レベル1キャッシュに格納された1セットの転置インデックスレコードを更新し、
前記レベル1キャッシュに格納された前記1セットの転置インデックスレコードのサイズが第1の所定の閾値を超えたか否かを判定し、
前記第1の所定の閾値を超えた場合に、前記レベル1キャッシュ内の前記1セットの転置インデックスレコードをレベル2キャッシュに転送し、
レベル2キャッシュファイルのサイズが第2の所定の閾値を超えたか否かを判定し、
前記第2の所定の閾値を超えた場合に、前記キーワードと、対応するレベル3転置インデックスファイルとのマッピング関係情報を格納するパスファイルに従って、1セットの転置インデックスファイルを格納するレベル3キャッシュに前記レベル2キャッシュファイル内の転置インデックスレコードを転送するよう構成された、1または複数のプロセッサと、
前記1または複数のプロセッサに接続され、前記1または複数のプロセッサに命令を提供するよう構成された1または複数のメモリと、
を備える、システム。
[適用例9]
適用例8に記載のシステムであって、前記1または複数のプロセッサは、さらに、
レベル3転置インデックスファイルのサイズが第3の所定の閾値を超えたか否かを判定し、
前記レベル3転置インデックスファイルの前記サイズが前記第3の所定の閾値を超えた場合に、前記レベル3転置インデックスファイルを2つの転置インデックスサブファイルに分割し、
前記2つの分割された転置インデックスサブファイルに従って、前記パスファイルを更新するよう構成されている、システム。
[適用例10]
適用例8に記載のシステムであって、前記レベル2キャッシュファイル内の前記転置インデックスレコードをレベル3転置インデックスファイルに転送することは、
前記レベル2キャッシュファイル内の前記レベル2転置インデックスレコードをメモリにフェッチし、
前記パスファイルに基づいて、前記レベル2転置インデックスレコード内のキーワードに対応する前記レベル3転置インデックスファイルを決定し、
前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2転置インデックスレコードを転送することを含む、システム。
[適用例11]
適用例10に記載のシステムであって、前記キーワードに従って、前記決定されたレベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送することは、アペンドモードで実行される、システム。
[適用例12]
適用例10に記載のシステムであって、1つのレベル3転置インデックスファイルが、初期静的圧縮ファイルおよび増分ファイルを備える、システム。
[適用例13]
適用例12に記載のシステムであって、前記キーワードに従って、前記レベル3転置インデックスファイルに前記レベル2キャッシュファイル内の前記転置インデックスレコードを転送することは、
前記キーワードに従って、前記増分ファイルに前記レベル2転置インデックスレコードを転送し、
前記増分ファイルが増分閾値を超えたか否かを判定し、
前記増分閾値を超えた場合に、前記初期静的圧縮ファイルを解凍して、解凍済みの初期静的ファイルを取得し、
前記解凍済みの初期静的ファイルおよび前記増分ファイルをマージして、マージファイルを取得し、
前記マージファイルを圧縮して、現行の静的圧縮を生成することを含む、システム。
[適用例14]
適用例8に記載のシステムであって、前記1または複数のプロセッサは、さらに、
ユーザによって送信された1または複数の検索キーワードのセットを取得し、
前記パスファイルに従って、前記ユーザによって送信された前記検索キーワードに対応するレベル3転置インデックスファイルを決定し、
前記レベル3転置インデックスファイルに基づいて、前記検索キーワードを含む第1のメールセットを、前記レベル1キャッシュに基づいて、前記検索キーワードを含む第2のメールセットを、そして、前記レベル2キャッシュファイルに基づいて、前記検索キーワードを含む第3のメールセットを決定し、
前記第1のメールセット、第2のメールセット、および、第3のメールセットをマージして、検索結果を得るよう構成されている、システム。
[適用例15]
電子メールメッセージ処理のためのコンピュータプログラム製品であって、有形のコンピュータ読み取り可能記憶媒体内に具現化され、
電子メールメッセージに関連する1セットのキーワードを取得するためのコンピュータ命令と、
前記1セットのキーワードに少なくとも部分的に基づいて、レベル1キャッシュに格納された1セットの転置インデックスレコードを更新するためのコンピュータ命令と、
前記レベル1キャッシュに格納された前記1セットの転置インデックスレコードのサイズが第1の所定の閾値を超えたか否かを判定するためのコンピュータ命令と、
前記第1の所定の閾値を超えた場合に、前記レベル1キャッシュ内の前記1セットの転置インデックスレコードをレベル2キャッシュに転送するためのコンピュータ命令と、
レベル2キャッシュファイルのサイズが第2の所定の閾値を超えたか否かを判定するためのコンピュータ命令と、
前記第2の所定の閾値を超えた場合に、前記キーワードと、対応するレベル3転置インデックスファイルとのマッピング関係情報を格納するパスファイルに従って、1セットの転置インデックスファイルを格納するレベル3キャッシュに前記レベル2キャッシュファイル内の転置インデックスレコードを転送するためのコンピュータ命令と、
を備える、コンピュータプログラム製品。