(57)【要約】本発明の実施形態は、並行トランザクションベース更新により大型データベースシステムを高速データベースサーチするための方法およびシステムを提供する。とくに、ステップ910で複数のサーチ問合せがネットワークによって受信され、ステップ930でデータベースがサーチされ、ステップ940で生成された複数のサーチ回答がステップ950でネットワークによって送信されることができる。ステップ930でデータベースをサーチしている期間中に、ステップ960で新しい情報がネットワークによって受信され、ステップ970でこの新しい情報に基づいて複数の新しいデータベースエレメントが生成され、ステップ975でダーティビットが新しい各データベースエレメント内に設定され、ステップ980で各新しいデータベースエレメントへのポインタが単一の割込みの生じない動作を使用してデータベースに書込まれ、ステップ985で新しい各データベースエレメント内のダーティビットがクリアされることができる。【選択図】図９
2005508051.tif 000002
【特許請求の範囲】
【請求項１】
あるネットワークに接続された少なくとも１つのプロセッサと、
このプロセッサに接続され、あるデータベースおよびプロセッサにより実行されるように構成された命令を含んでいるメモリとを備えており、
これらの命令は、
更新スレッドおよび複数のサーチスレッドを生成し、
ネットワークによって受信された複数のサーチ問合せのそれぞれを複数のサーチスレッドの１つに割当て、
各サーチスレッドのそれぞれに対して：
割当てられたサーチ問合せにしたがってデータベースをサーチし、
割当てられたサーチ問合せに対応した複数のサーチ回答を生成し、
複数のサーチ回答をネットワークによって送信し、
更新スレッドに対して：
ネットワークによって受信された新しい情報にしたがって複数の新しいエレメントを生成し、
ダーティビットを複数の新しい各エレメント内に設定し、
複数のサーチスレッドに対してデータベースへのアクセスを制限せずに、単一の割込みの生じない動作を使用して複数の新しい各エレメントのそれぞれへのポインタをデータベースに書込み、
複数の新しい各エレメント内のダーティビットをクリアするように構成されている多重スレッドネットワークデータベースシステム。
【請求項２】
命令には、
更新スレッドに対して、
データベースから削除される少なくとも１つの既存のエレメント内にダーティビットを設定し、
複数のサーチスレッドに対してデータベースへのアクセスを制限せずに、削除される既存のエレメントを単一の割込みの生じない動作を使用してデリファレンス（ｄｅｒｅｆｅｒｅｎｃｅ）するステップがさらに含まれる請求項１記載のシステム。
【請求項３】
命令には、
更新スレッドに対して、
データベースにおける修正される少なくとも１つの既存のエレメント内にダーティビットを、対応した新しいエレメントへのポインタが書込まれる前に設定し、
既存のエレメント内のダーティビットを、その対応した新しいエレメントへのポインタが書込まれた後でクリアするステップをさらに含んでいる請求項１記載のシステム。
【請求項４】
単一の割込みの生じない動作は、記憶命令である請求項１記載のシステム。
【請求項５】
記憶命令は、４バイト境界上に位置されたメモリアドレスに４バイトを書込む請求項４記載のシステム。
【請求項６】
記憶命令は、８バイト境界上に位置されたメモリアドレスに８バイトを書込む請求項４記載のシステム。
【請求項７】
プロセッサは少なくともｎバイトのワードサイズを有しており、メモリは少なくともｎバイトの幅を有しており、記憶命令はｎバイト境界上に位置されたメモリアドレスにｎバイトを書込む請求項４記載のシステム。
【請求項８】
複数のサーチ問合せは、単一のネットワークパケット内で受信される請求項１記載のシステム。
【請求項９】
複数のサーチ回答は、単一のネットワークパケット内で送信される請求項１記載のシステム。
【請求項１０】
前記アクセス制限には、データベースロッキングが含まれる請求項１記載のシステム。
【請求項１１】
前記アクセス制限には、スピンロッキングが含まれる請求項１記載のシステム。
【請求項１２】
前記スピンロッキングには、少なくとも１つのセマフォーの使用が含まれる請求項１１記載のシステム。
【請求項１３】
前記セマフォーは、ミューテクス（ｍｕｔｅｘ）セマフォーである請求項１２記載のシステム。
【請求項１４】
さらに、複数のプロセッサおよび対称的な多重処理オペレーティングシステムを備えている請求項１記載のシステム。
【請求項１５】
複数のサーチスレッドは、少なくとも１００，０００／秒のサーチを行う請求項１４記載のシステム。
【請求項１６】
更新スレッドは、少なくとも１０，０００／秒の更新を行う請求項１５記載のシステム。
【請求項１７】
更新スレッドは、５０，０００乃至１３０，０００／秒の更新を行う請求項１６記載のシステム。
【請求項１８】
新しいエレメントへのポインタは、サーチ索引に書込まれる請求項１記載のシステム。
【請求項１９】
サーチ索引はＴＳＴである請求項１８記載のシステム。
【請求項２０】
新しいエレメントへのポインタは、データベース内のデータレコードに書込まれる請求項１記載のシステム。
【請求項２１】
更新スレッドおよび複数のサーチスレッドを生成し、
ネットワークによって受信された複数のサーチ問合せのそれぞれを複数のサーチスレッドの１つに割当て、
各サーチスレッドのそれぞれに対して：
割当てられたサーチ問合せにしたがってデータベースをサーチし、
割当てられたサーチ問合せに対応した複数のサーチ回答を生成し、
複数のサーチ回答をネットワークによって送信し、
更新スレッドに対して：
ネットワークによって受信された新しい情報にしたがって複数の新しいエレメントを生成し、
ダーティビットを複数の新しい各エレメント内に設定し、
複数のサーチスレッドに対してデータベースへのアクセスを制限せずに、単一の割込みの生じない動作を使用して複数の新しい各エレメントへのポインタをデータベースに書込み、
複数の新しい各エレメント内のダーティビットをクリアするステップを含んでいる、データベースのサーチおよび更新を並行に行う方法。
【請求項２２】
命令には、
更新スレッドに対して、
データベースから削除される少なくとも１つの既存のエレメント内にダーティビットを設定し、
複数のサーチスレッドに対してデータベースへのアクセスを制限せずに、削除される既存のエレメントを単一の割込みの生じない動作を使用してデリファレンスするステップがさらに含まれる請求項２１記載の方法。
【請求項２３】
更新スレッドに対して、
データベースにおいて修正される少なくとも１つの既存のエレメント内にダーティビットを、対応した新しいエレメントへのポインタが書込まれる前に設定し、
既存のエレメント内のダーティビットを、その対応した新しいエレメントへのポインタが書込まれた後でクリアするステップをさらに含んでいる請求項２１記載の方法。
【請求項２４】
単一の割込みの生じない動作は、記憶命令である請求項２１記載の方法。
【請求項２５】
記憶命令は、４バイト境界上に位置されたメモリアドレスに４バイトを書込む請求項２３記載の方法。
【請求項２６】
記憶命令は、８バイト境界上に位置されたメモリアドレスに８バイトを書込む請求項２３記載の方法。
【請求項２７】
複数のサーチ問合せは、単一のネットワークパケット内で受信される請求項２１記載の方法。
【請求項２８】
複数のサーチ回答は、単一のネットワークパケット内で送信される請求項２１記載の方法。
【請求項２９】
前記アクセス制限には、データベースのロッキングが含まれる請求項２１記載の方法。
【請求項３０】
前記アクセス制限には、スピンロッキングが含まれる請求項２１記載の方法。
【請求項３１】
前記スピンロッキングには、少なくとも１つのセマフォーの使用が含まれる請求項３０記載の方法。
【請求項３２】
前記セマフォーは、ミューテクスセマフォーである請求項３１記載の方法。
【請求項３３】
複数のサーチスレッドは、少なくとも１００，０００／秒のサーチを行う請求項２１記載の方法。
【請求項３４】
更新スレッドは、少なくとも１０，０００／秒の更新を行う請求項２１記載の方法。
【請求項３５】
更新スレッドは、５０，０００乃至１３０，０００／秒の更新を行う請求項３４記載の方法。
【請求項３６】
新しいエレメントへのポインタは、サーチ索引に書込まれる請求項２１記載の方法。
【請求項３７】
新しいエレメントへのポインタは、データベース内のデータレコードに書込まれる請求項２１記載の方法。
【請求項３８】
データベースのサーチおよび更新を同時に並行して行う方法を実施するようにプロセッサにより実行されるように構成された命令を含んでいるコンピュータ読取り可能な媒体において、
前記方法は、
更新スレッドおよび複数のサーチスレッドを生成し、
ネットワークによって受信された複数のサーチ問合せのそれぞれを複数のサーチスレッドの１つに割当て、
各サーチスレッドのそれぞれに対して：
割当てられたサーチ問合せにしたがってデータベースをサーチし、
割当てられたサーチ問合せに対応した複数のサーチ回答を生成し、
複数のサーチ回答をネットワークによって送信し、
更新スレッドに対して：
ネットワークによって受信された新しい情報にしたがって複数の新しいエレメントを生成し、
ダーティビットを複数の新しい各エレメント内に設定し、
複数のサーチスレッドに対するデータベースへのアクセスを制限せずに、単一の割込みの生じない動作を使用して複数の新しい各エレメントへのポインタをデータベースに書込み、
複数の新しい各エレメント内のダーティビットをクリアするステップを含んでいるコンピュータ読取り可能な媒体。
【請求項３９】
前記方法は、
更新スレッドに対して、
データベースから削除される少なくとも１つのエレメント内にダーティビットを設定し、
複数のサーチスレッドに対するデータベースへのアクセスを制限せずに、削除されるエレメントを単一の割込みの生じない動作を使用してデリファレンスするステップをさらに含んでいる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４０】
前記方法は、
更新スレッドに対して、
データベースにおいて修正される少なくとも１つの既存のエレメント内にダーティビットを、対応した新しいエレメントへのポインタが書込まれる前に設定し、
既存のエレメント内のダーティビットを、その対応した新しいエレメントへのポインタが書込まれた後でクリアするステップをさらに含んでいる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４１】
単一の割込みの生じない動作は、記憶命令である請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４２】
記憶命令は、４バイト境界上に位置されたメモリアドレスに４バイトを書込む請求項４１記載のコンピュータ読取り可能な媒体。
【請求項４３】
記憶命令は、８バイト境界上に位置されたメモリアドレスに８バイトを書込む請求項４１記載のコンピュータ読取り可能な媒体。
【請求項４４】
複数のサーチ問合せは、単一のネットワークパケット内で受信される請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４５】
複数のサーチ回答は、単一のネットワークパケット内で送信される請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４６】
前記アクセス制限には、データベースロッキングが含まれる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４７】
前記アクセス制限には、スピンロッキングが含まれる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項４８】
前記スピンロッキングには、少なくとも１つのセマフォーの使用が含まれる請求項４７記載のコンピュータ読取り可能な媒体。
【請求項４９】
前記セマフォーは、ミューテクスセマフォーである請求項４８記載のコンピュータ読取り可能な媒体。
【請求項５０】
新しいエレメントへのポインタは、サーチ索引に書込まれる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項５１】
新しいエレメントへのポインタは、データベース内のデータレコードに書込まれる請求項３８記載のコンピュータ読取り可能な媒体。
【請求項５２】
新しい情報は、単一のネットワークパケット内で受信される請求項８記載のシステム。
【請求項５３】
新しい情報は、単一のネットワークパケット内で受信される請求項２７記載の方法。
【請求項５４】
新しい情報は、単一のネットワークパケット内で受信される請求項４４記載のコンピュータ読取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、コンピュータシステムに関する。とくに、この開示は、大型データベースシステムを並行更新することにより高速データベースサーチするための方法およびシステムに関する。
【背景技術】
【０００２】
非暫定的な本出願は、この明細書においてその全てが参考文献とされている暫定的な米国特許出願第 60/330,842号明細書（２００１年１１月１日出願）および暫定的な米国特許出願第 60/365,169号明細書（２００２年３月１９日出願）からの優先権を主張している。
【０００３】
インターネットは急速な成長を続けているため、ルートおよびジェネリックトップレベルドメイン（ｇＴＬＤ）サーバに対してドメイン名サービス（ＤＮＳ）をスケールする問題を妥当な価格で解決することがますます困難になってきている。ルートサーバ（すなわち、a.root-server.net）はインターネットネームスペースルートゾーンファイルを保守し、世界中に地理的に分配された１２の補助ルートサーバ（すなわち、b.root-server.net，c.root-server.net等）に分配し、一方、対応したｇＴＬＤサーバ（すなわち、a.gtld-servers.net，b.gtld-servers.net等）は同様に分配され、トップレベルドメイン（たとえば、*.com，*.net，*.org等）をサポートしている。問合せ率のたゆまない増加と結びつけて考えられるデータ量の益々の増加のために、ルートおよびｇＴＬＤのＤＮＳサービスに対して必要とされるハードウェアおよびソフトウェアのインフラストラクチャを数年後までには完全に再考しておかなければならない。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
標準的な“バインド”ソフトウェア分配の典型的な単一サーバ設置は、Ａルートの要求に対してすでに不十分なものとなっており、すぐにｇＴＬＤのニーズさえ満足させることができなくなるであろう。公衆交換電話網（ＰＳＴＮ）およびインターネットの集中性により、ＰＳＴＮおよびインターネットに及ぶ、アドバンスドインテリジェントネットワーク（ＡＩＮ）、ボイスオーバーインターネットプロトコル（ＶｏＩＰ）サービス、ジェオロケーションサービス等を含む新しい進歩したサービスが提供されると、汎用の高性能サーチメカニズムが、通常はＰＳＴＮのＳＳ７シグナリングネットワーク上のサービス制御地点（ＳＣＰ）に関連している機能を提供する機会が生じる。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、同時並行の更新により大型データベースシステムを高速データベースサーチするための方法およびシステムを提供する。とくに、複数のサーチ問合せがネットワークによって受信され、データベースがサーチされ、生成された複数のサーチ回答がネットワークによって送信されることができる。データベースをサーチしている期間中に、新しい情報がネットワークによって受信され、この新しい情報に基づいて複数の新しいデータベースエレメントが生成され、ダーティビットが新しい各データベースエレメント内に設定される。各新しいデータベースエレメントへのポインタが単一の割込みの生じない動作を使用してデータベースに書込まれ、新しい各データベースエレメント内のダーティビットがクリアされることができる。
【発明を実施するための最良の形態】
【０００６】
図１は、本発明の１実施形態によるシステムを示すブロック図である。一般に、システム100は大型のメモリ常設データベースをホストし、ネットワークによりサーチリクエストを受信すると共にサーチ応答を提供することができる。たとえばシステム100は、たとえば、International Business Machines社（Armonk，New York）製のＩＢＭ  ＲＳ／６０００（登録商標）Ｍ８０またはＳ８０、Sun Microsystems社（Santa Clara，California）製のＳｕｎ Ｅｎｔｅｒｐｒｉｓｅ（登録商標）１００００等のような対称的な多重処理（ＳＭＰ）コンピュータであってもよい。システム100はまた、たとえば、Hewlett-Packard社（Palo Alto，California）製のＣｏｍｐａｑ ＰｒｏＬｉａｎｔ（登録商標）ＭＬ５３０（２つの Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）III ８６６ＭＨｚプロセッサを備えた）のようなマルチプロセッサパーソナルコンピュータであってもよい。システム100はまた、たとえば、ＩＢＭ  ＡＩＸ（登録商標）４、Ｓｕｎ  Ｓｏｌａｒｉｓ（登録商標）８動作環境、Ｒｅｄ  Ｈａｔ  Ｌｉｎｕｘ（登録商標）６．２等の、多重処理オペレーティングシステムを備えていてもよい。システム100は、データベース中に並行に組込まれることのできる周期的な更新をネットワーク124により受信する。
【０００７】
１実施形態において、システム100は、バス101に接続された少なくとも１つのプロセッサ102-1を備えていることができる。プロセッサ102-1は、内部メモリキャッシュ（簡明化のために示されてはいないが、たとえば、Ｌ１キャッシュ）を備えていてもよい。補助メモリキャッシュ103-1（たとえば、Ｌ２キャッシュ、Ｌ２／Ｌ３キャッシュ等）は、プロセッサ102-1とバス101との間に常設していてもよい。好ましい実施形態において、システム100は、バス101に接続された複数のプロセッサ102-1・・・102-Pを備えていることができる。複数の補助メモリキャッシュ103-1・・・103-Pはまたプロセッサ102-1・・・102-Pとバス101との間に常設していることができ［たとえば、ルックスルー（ｌｏｏｋ−ｔｈｒｏｕｇｈ）アーキテクチャ］、あるいは、その代りに、少なくとも１つの補助メモリキャッシュ103-1がバス101に接続されることができる［たとえば、ルックアサイド（ｌｏｏｋ−ａｓｉｄｅ）アーキテクチャ］。システム100は、バス101に接続された、たとえば、ランダムアクセスメモリ（ＲＡＭ）等の、情報および複数のプロセッサ102-1・・・102-Pにより実行される命令を記憶するメモリ104を備えていてもよい。
【０００８】
メモリ104は、たとえばインターネットアドレスへのインターネットドメイン名の変換、ネットワークアドレスへの名前または電話番号の変換、加入者プロファイルの提供および更新、ユーザ存在データの提供および更新等を行う大型データベースを記億することができる。データベースのサイズおよび毎秒当りのトランザクションの数が共に非常に大きくてもよいという利点がある。たとえば、メモリ104は少なくとも６４ＧＢのＲＡＭを備えることができ、５００Ｍ（すなわち、５００×１０6）レコードドメイン名データベース、５００Ｍレコード加入者データベース、４５０Ｍレコード電話番号移植性データベース等をホストすることができる。
【０００９】
たとえば、少なくとも１つの６４ビットバス101および１つの６４ビットメモリ104に接続された少なくとも１つの６４ビットビッグエンディアン（ｂｉｇ−ｅｎｄｉａｎ）プロセッサ102-1を備えているシステム等の、例示的な６４ビットシステムアーキテクチャにおいて、８バイトのポインタ値は、単一の割込みの生じない動作を使用して８バイトの境界上のメモリアドレス（すなわち、８または、たとえば、８Ｎで除算可能なメモリアドレス）に書込まれることができる。一般に、補助メモリキャッシュ103-1の存在は、メモリ104への８バイトポインタ書込みを遅延するに過ぎない可能性がある。たとえば、１実施形態においては、補助メモリキャッシュ103-1はライトスルー（ｗｒｉｔｅ−ｔｈｒｏｕｇｈ）モードで動作するルックスルーキャッシュであってもよいため、単一の８バイト記憶命令は、割込みが発生することなく２サイクルのような少ないシステムクロックサイクルでデータの８バイトをプロセッサ102-1からメモリ104に移動することができる。別の実施形態において、補助メモリキャッシュ103-1はライトバック（ｗｒｉｔｅ−ｂａｃｋ）モードで動作するルックスルーキャッシュであってもよいため、８バイトポインタは最初に補助メモリキャッシュ103-1に書込まれ、その後、この補助メモリキャッシュ103-1は、後で、たとえば、８バイトポインタが記憶されるキャッシュラインがメモリ104に書込まれるとき［すなわち、特定のキャッシュラインまたは補助メモリキャッシュ全体が“フラッシュ（ｆｌｕｓｈ）”されたとき］等に、この８バイトポインタをメモリ104に書込み、割込みが発生することなく２という少ないシステムクロックサイクルでデータの８バイトをプロセッサ102-1からメモリ104に移動することができる。
【００１０】
最終的に、プロセッサ102-1から見ると、データがひとたびプロセッサ102-1の出力ピンにラッチされると、８バイトのデータは全て、１つの連続した割込みの生じない転送でメモリ104に書込まれ、これは、補助メモリキャッシュ103-1が存在するならば、それによって遅延される可能性がある。プロセッサ102-2・・・102-Pから見ると、データがひとたびプロセッサ102-1の出力ピンにラッチされると、８バイトのデータは全て、１つの連続した割込みの生じない転送でメモリ104に書込まれ、これは補助メモリキャッシュ103-1・・・103-Pを横切ってキャッシュコヒーレンシー（ｃｏｈｅｒｅｎｃｙ）プロトコルにより強制的に行われ、これらの補助メモリキャッシュ103-1・・・103-Pは、存在するならば、メモリ104への書込みを遅延させる可能性がある。
【００１１】
しかしながら、８バイトポインタ値が、８バイト境界を横切るメモリアドレスのような、メモリ104中の誤整列の位置に書込まれた場合、全ての８バイトのデータは、単一の８バイト記憶命令を使用してプロセッサ102-1から転送されることができない。その代り、プロセッサ102-1は２つの個別の異なった記憶命令を発生することができる。たとえば、メモリアドレスが８バイト境界の前の４バイト（たとえば、８Ｎ−４）を始める場合、第１の記憶命令はその最上位の４バイトをメモリ104（たとえば、８Ｎ−４）に転送し、一方第２の記憶命令はその最下位の４バイトをメモリ104（たとえば、８Ｎ）に転送する。これら２つの個別の記憶命令の間において、プロセッサ102-1は割込みが遂行されることができ、あるいはプロセッサ102-1は別のシステムコンポーネント（たとえば、プロセッサ102-P等）にバス101の制御を解放することができることが重要である。結果的に、メモリ104中に存在するポインタ値は、プロセッサ102-1が第２の記憶命令を終了することができるまで無効である。別のコンポーネントがこのメモリ位置への単一の割込みの生じないメモリ読出しを開始した場合、無効値は推定有効（ｐｒｅｓｕｍａｂｌｙ  ｖａｌｉｄ）値として戻されるであろう。
【００１２】
同様に、新しい４バイトポインタ値は、単一の割込みの生じない動作を使用して４で除算可能なメモリアドレス（たとえば、４Ｎ）に書込まれることができる。上述の例では、４バイトポインタ値は、単一の記憶命令を使用して８Ｎ−４メモリ位置に書込まれることに注意しなければならない。当然ながら、４バイトポインタ値が、４バイト境界を横切る位置、たとえば、４Ｎ−２に書込まれた場合、全ての４バイトのデータは単一の記憶命令を使用してプロセッサ102-1から転送されることができず、メモリ104中に存在するポインタ値は、ある時間期間中無効となる可能性がある。
【００１３】
システム100はまた、プロセッサ102-1に対する静的情報および命令を記憶するためにバス101に接続された読出し専用メモリ（ＲＯＭ）106または別の静的記憶装置を備えている。情報および命令を記憶するために磁気または光学ディスクのような記憶装置108がバス101に接続されてもよい。システム100はまた、バス101に接続された表示装置110（たとえば、ＬＣＤモニタ等）および入力装置120（たとえば、キーボード、マウス、トラックボール等）を備えている。システム100は、複数のネットワークインターフェース114-1・・・114-Oを備えており、それらは、種々のタイプの情報を表すデジタルデータストリームを伝送する電気、電磁または光信号を送受信することができる。１実施形態において、ネットワークインターフェース114-1は、バス101およびローカルエリアネットワーク（ＬＡＮ）122に接続されることができ、一方ネットワークインターフェース114-Oは、バス101および広域ネットワーク（ＷＡＮ）124に接続されることができる。複数のネットワークインターフェース114-1・・・114-Oは、たとえば、ギガビットイーサネット（Ｒ）（たとえば、2002年に発表されたＩＥＥＥ規格８０２．３−２００２）、ファイバチャンネル（たとえば、1994年に発表されたＡＭＳＩ規格Ｘ．３２３０−１９９４）等を含む種々のネットワークプロトコルをサポートすることができる。複数のネットワークコンピュータ120-1・・・120-Nは、ＬＡＮ122およびＷＡＮ124に接続されることができる。ＬＡＮ122およびＷＡＮ124は、１実施形態においては物理的に異なったネットワークであることができ、一方、別の実施形態ではネットワークゲートウェイまたはルータ（簡明化のために示されていない）によるものであることができる。その代りに、ＬＡＮ122およびＷＡＮ124は同じネットワークであってもよい。
【００１４】
上述したように、システム100はＤＮＳソリューションサービスを提供することができる。ＤＮＳソリューションの実施形態において、ＤＮＳソリューションサービスは一般に、ネットワークトランスポート機能とデータルックアップ機能との間で分配されることができる。たとえば、システム100は、大量データセットに関するデータルックアップに対して最適化されたバックエンド（ｂａｃｋ−ｅｎｄ）ルックアップエンジン（ＬＵＥ）であることができ、一方複数のネットワークコンピュータ120-1・・・120-Nは、ネットワーク処理およびトランスポートに対して最適化された複数のフロントエンドプロトコルエンジン（ＰＥ）であることができる。ＬＵＥは、高速で高スループットのサーチおよび更新を容易にするためにＤＮＳレコードセット全体をメモリ104中に記憶している強力な多重プロセッササーバであることができる。別の実施形態においては、ＤＮＳソリューションサービスは、それぞれが高速で高スループットのサーチおよび更新を容易にするためにＤＮＳレコードセット全体の一部をメモリ中に記憶している一連の強力な多重プロセッササーバすなわちＬＵＥによって提供されることができる。
【００１５】
反対に、複数のＰＥは、効率的なマルチタスク処理オペレーティングシステム［たとえば、Ｒｅｄ  Ｈａｔ  Ｌｉｎｕｘ（登録商標）６．２］をランし、ＤＮＳソリューションに対して利用可能なリソースを最大化するためにＬＵＥ上のネットワーク処理トランスポートロードを最小にする一般的なロープロファイル（ｌｏｗ  ｐｒｏｆｉｌｅ）のＰＣベースマシンであることができる。ＰＥは、ワイヤラインＤＮＳプロトコルのニュアンスを処理し、無効ＤＮＳ問合せに応答し、有効ＤＮＳ問合せをＬＡＮ122によってＬＵＥに多重化することができる。単一のＬＵＥに対するＰＥの数は、たとえば、秒当りに処理されるＤＮＳ問合せの数および特定のシステムの性能特性によって決定されることができる。適切なマッピング率および動作（ｂｅｈａｖｉｏｒ）を決定するために、他の測定規準もまた使用されることができる。
【００１６】
一般に、別の大ボリュームの問合せベースの実施形態がサポートされることができ、これには、たとえば、電話番号ソリューション、ＳＳ７シグナリング処理、ジェオロケーション決定、加入者への電話番号マッピング、加入者位置決定および存在決定等が含まれる。
【００１７】
１実施形態において、中央オンライントランザクション処理（ＯＬＴＳ）サーバ140-1は、ＷＡＮ124に接続され、データベース142-1への追加、修正および削除（すなわち、更新トラフィック）を種々のソースから受信することができる。ＯＬＴＰサーバ140-1は更新をＷＡＮ124によってシステム100に送信することができ、データベース142-1のローカルコピーを含んでいる。ＯＬＴＰサーバ140-1は、たとえば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、レジストリレジストラプロトコル（ＲＲＰ）、拡張可能プロビジョニング(ｐｒｏｖｉｓｉｏｎｉｎｇ)プロトコル（ＥＰＰ）、サービス管理システム／８００機械化された一般インターフェース（ＭＧＩ）、およびその他のオンラインプロビジョニングプロトコルを含む種々のフォーマットおよびプロトコルで更新トラフィックを処理するために最適化されることができる。読出し専用ＬＵＥのコンステレーションは、ＯＬＴＰサーバ140-1からの高ボリュームのインクリメンタル更新と結合された高速サーチ能力を提供するハブ・アンド・スポークアーキテクチャで配置されることができる。
【００１８】
別の実施形態において、データは、それぞれがＷＡＮ124に接続されていてもよい多数のＯＬＴＰサーバ140-1・・・140-Sによって分配されることができる。ＯＬＴＰサーバ140-1・・・140-Sはそれらの各データベース142-1・・・142-Sへの追加、修正および削除（すなわち、更新トラフィック）（簡明化のために示されていない）を種々のソースから受信することができる。ＯＬＴＰサーバ140-1・・・140-SはＷＡＮ124によって更新をシステム100に送信することができ、この更新にはデータベース142-1・・・142-Sのコピー、別の動的に生成されたデータ等が含まれることができる。たとえば、ジェオロケーション実施形態において、ＯＬＴＰサーバ140-1・・・140-Sは遠隔地センサのグループから更新トラフィックを受信することができる。別の実施形態においては、複数のネットワークコンピュータ120-1・・・120‐Nはまた、ＷＡＮ124またはＬＡＮ122によって追加、修正および削除（すなわち、更新トラフィック）（簡明化のために示されていない）を種々のソースから受信することができる。この実施形態において、複数のネットワークコンピュータ120‐1・・・120‐Nは、問合せだけでなく更新もまたシステム100に送信することができる。
【００１９】
ＤＮＳソリューション実施形態において、各ＰＥ（たとえば、複数のネットワークコンピュータ120‐1・・・120‐Nのそれぞれ）は、広域ネットワーク（たとえば、ＷＡＮ124）により受信されたいくつかのＤＮＳ問合せメッセージを単一のリクエストスーパーパケットに結合し、あるいは多重化し、ローカルエリアネットワーク（たとえば、ＬＡＮ122）によりこのリクエストスーパーパケットをＬＵＥ（たとえば、システム100）に送信することができる。ＬＵＥはいくつかのＤＮＳ問合せメッセージ回答を単一の応答スーパーパケットに結合し、あるいは多重化し、ローカルエリアネットワークによってこの応答スーパーパケットを適切なＰＥに送信することができる。一般に、リクエストまたは応答スーパーパケットの最大サイズは物理的ネットワーク層［たとえば、ギガビットイーサネット（登録商標）］の最大伝送単位（ＭＴＵ）によって制限される可能性がある。たとえば、１００バイトおよび２００バイトよりそれぞれ小さい典型的なＤＮＳ問合せおよび回答メッセージサイズは、３０を越える問合せが単一のリクエストスーパーパケットに多重化されることを可能にすると共に、１５を越える問合せが単一の応答スーパーパケットに多重化されることを可能にする。しかしながら、応答（たとえば、１０の回答）に関してＭＴＵオーバーフローを回避するために、もっと少ない数の問合せ（たとえば、２０の問合せ）が単一のリクエストスーパーパケットに含まれることができる。大きいＭＴＵサイズでは、それにしたがって多重化される問合せおよび回答の数が増加されることができる。
【００２０】
各マルチタスク処理ＰＥは、ＤＮＳ問合せおよび回答をそれぞれ管理するインバウンドスレッドおよびアウトバウンドスレッドを含んでいることができる。たとえば、インバウンドスレッドは、広域ネットワークにより受信された入ってきたＤＮＳ問合せパケットからのＤＮＳ問合せコンポーネントを整列させず、数ミリ秒の問合せを単一のリクエストスーパーパケットに多重化することができる。その後、インバウンドスレッドは、ローカルエリアネットワークによってリクエストスーパーパケットをＬＵＥに送信することができる。対照的に、アウトバウンドスレッドは応答スーパーパケットをＬＵＥから受信し、それに含まれている回答をデマルチプレクスし、種々のフィールドを有効なＤＮＳ回答に整列させることができ、これは、その後広域ネットワークによって送信されてもよい。一般に、上述のように、別の大ボリューム問合せベースの実施形態がサポートされることができる。
【００２１】
１実施形態において、リクエストスーパーパケットはまた、たとえば、ソースアドレス、プロトコルタイプ等のような各ＤＮＳ問合せに関連した状態情報を含むことができる。ＬＵＥは状態情報および関連付けられたＤＮＳ回答を応答スーパーパケット内に含むことができる。その後、各ＰＥはＬＵＥから送信された情報を使用して有効なＤＮＳ回答メッセージを構成し、戻すことができる。その結果、各ＰＥは無状態マシンとして動作することができる、すなわち、有効なＤＮＳ回答は応答スーパーパケットに含まれている情報から形成されることができるという利点がある。一般に、ＬＵＥは、入ってきたスーパーパケットの発信元であるＰＥに応答スーパーパケットを戻すことができる。しかしながら、別の変形が可能であることは明らかである。
【００２２】
別の実施形態において、各ＰＥは、各ＤＮＳ問合せと関連付けられた状態情報を維持し、リクエストスーパーパケット内の状態情報への参照またはハンドルを含んでいることができる。ＬＵＥは状態情報基準および関連付けられたＤＮＳ回答を応答スーパーパケット内に含んでいることができる。その後、各ＰＥは、そこに保持されている状態情報だけでなくＬＵＥから送信された状態情報基準もまた使用することにより、有効なＤＮＳ回答メッセージを構成し、戻すことができる。この実施形態において、ＬＵＥは、入ってきたスーパーパケットの発信元であるＰＥに応答スーパーパケットを戻すことができる。
【００２３】
図２は本発明の１実形態によるメッセージデータ構造を示す詳細なブロック図である。一般に、メッセージ200は、複数のシーケンス番号211‐1・・・211‐Sおよび複数のメッセージカウント212‐1・・・212‐Sならびにデータペイロード215を有するヘッダ210を含んでいる。
【００２４】
ＤＮＳソリューションの実施形態において、メッセージ200はリクエストスーパーパケットおよび応答スーパーパケットに対して使用されることができる。たとえば、リクエストスーパーパケット220は、複数のシーケンス番号231‐1・・・231‐Sおよび複数のメッセージカウント232‐1・・・232‐S、ならびにＰＥにより、たとえば、数ミリ秒等の、予め定められた時間期間にわたって蓄積された多数のＤＮＳ問合せ236‐1・・・236‐Qを有するデータペイロード235を有するヘッダ230を含んでいることができる。１実施形態において、各ＤＮＳ問合せ236‐1・・・236‐Qは状態情報を含んでいることができ、一方別の実施形態においては、各ＤＮＳ問合せ236‐1・・・236‐Qは状態情報へのハンドルを含んでいることができる。
【００２５】
同様に、応答スーパーパケット240は、複数のシーケンス番号251‐1・・・251‐Sおよび複数のメッセージカウント252‐1・・・252‐S、ならびにリクエストスーパーパケット220内に含まれている多数のＤＮＳ問合せにほぼ対応した多数のＤＮＳ回答256‐1・・・256‐Rを有するデータペイロード255を有するヘッダ250を含んでいる。１実施形態において、各ＤＮＳ回答256-1・・・256-Rは対応したＤＮＳ問合せに関連付けられた状態情報を含んでいることができ、一方別の実施形態においては、各ＤＮＳ回答256-1・・・256-Rは対応したＤＮＳ問合せに関連付けられた状態情報へのハンドルを含んでいることができる。時に、対応したＤＮＳ回答の合計サイズは、応答スーパーパケット240のデータペイロード255のサイズを越えることがある。このオーバーフローは、たとえば、単一の回答、すなわち、リクエストスーパーパケット220内に含まれている最後の問合せに関連付けられた回答に制限されることができる。単一の回答だけを含む追加の応答スーパーパケット240を送信するのではなく、オーバーフロー回答は、好ましいことに、次のリクエストスーパーパケットに対応した次の応答スーパーパケット240中に含まれることができる。ヘッダ250は、オーバーフロー状態の程度を決定するための適切な情報を含むことができるという利点がある。ピーク処理状態より低い状態では１より多くの回答が次の応答スーパーパケット中へオーバーフローされてもよい。
【００２６】
たとえば、応答スーパーパケット240中において、ヘッダ250は、２対の相補的フィールドとしてグループ化された少なくとも２つのシーケンス番号251-1および251-2および少なくとも２つのメッセージカウント252-1および252-2を含むことができる。“Ｓ”のシーケンス番号およびメッセージカウントの対が存在することができるが、典型的にＳは、たとえば、２、３、４、等の小さい数である。したがって、ヘッダ250はメッセージカウント252-1と対にされたシーケンス番号251-1、メッセージカウント252-2と対にされたシーケンス番号251-2等を含むことができる。一般に、メッセージカウント252-1は、シーケンス番号251-1に関連付けられたデータペイロード255内に含まれている回答の数を反映することができる。１実施形態において、シーケンス番号251-1は２バイトフィールドであることができ、一方メッセージカウント252-1は１バイトフィールドであることができる。
【００２７】
特別の例において、リクエストスーパーパケット220のデータペイロード235は７つのＤＮＳ問合せを含むことができる（図２に示されているように）。１実施形態において、シーケンス番号231-1は固有の値（たとえば、１０２４）を含むことができ、メッセージカウント232-1は７に設定されることができ、一方シーケンス番号231-2およびメッセージカウント232-2はゼロに設定されることができる。別の実施形態において、ヘッダ230は、たとえば、１０２４および７にそれぞれ設定されたシーケンス番号231-1およびメッセージカウント232-1等の、ただ１つのシーケンスおよび１つのメッセージカウントを含むことができる。典型的に、リクエストスーパーパケット220は、特定のシーケンス番号に関連付けられた問合せの全てを含むことができる。
【００２８】
応答スーパーパケット240のデータペイロード255は７つの対応したＤＮＳ回答を含むことができる（図２に示されているように）。この例において、ヘッダ250は応答スーパーパケット220に類似した情報、すなわち、同じ固有値（すなわち、１０２４）に設定されたシーケンス番号251-1、７に設定されたメッセージカウント252-1、および共にゼロに設定されたシーケンス番号252-2およびメッセージカウント252-2を含むことができる。しかしながら、別の例では、応答スーパーパケット240のデータペイロード255は５つの対応したＤＮＳ回答だけを含むことができ、メッセージカウント252-1は代りに５に設定されることができる。シーケンス番号１０２４に関連付けられた残っている２つの応答は、次の応答スーパーパケット240内に含まれることができる。
【００２９】
次の応答スーパーパケット240は異なったシーケンス番号（たとえば、１０２５）および少なくとも１つのＤＮＳ問合せを含むことができるため、この次の応答スーパーパケット240は１０２５のシーケンス番号に関連付けられた少なくとも１つの回答だけでなく１０２４のシーケンス番号に関連付けられた２つの前の回答もまた含むことができる。この例においては、次の応答スーパーパケット240のヘッダ250は１０２４に設定されたシーケンス番号251-1、２に設定されたメッセージカウント252-1、１０２５に設定されたシーケンス番号251-2および１に設定されたメッセージカウント252-2を含むことができる。したがって、応答スーパーパケット240は２つの異なったリクエストスーパーパケット内に含まれている３つの問合せに関連付けられた合計３つの回答を含むことができる。
【００３０】
図３は本発明の１実施形態によるメッセージ待ち時間データ構造アーキテクチャを示す詳細なブロック図である。メッセージ待ち時間データ構造300は、一般にメッセージ200の送信および受信と関連付けられた情報を含むことができる。ＤＮＳソリューションの実施形態において、メッセージ待ち時間データ構造300は、リクエストスーパーパケットおよび応答スーパーパケットに関する待ち時間情報を含んでいることができる。この待ち時間情報は、シーケンス番号値（たとえば、索引301）にしたがって索引を付けられたテーブルフォーマットで編成されることができる。たとえば、メッセージ待ち時間データ構造300は、テーブルエレメント310、320および330により全体的に示されているように、固有のシーケンス番号の合計数に等しい行の数Ｎを含むことができる。１実施形態において、スーパーパケットヘッダシーケンス番号は長さが２バイトであり、０から２16−１（すなわち、６５，５３５）までの固有のシーケンス番号の範囲を規定することができる。この場合、       Ｎは６５，５３６に等しくてもよい。待ち時間情報は、リクエスト時間スタンプ302、リクエスト問合せカウント303、応答時間スタンプ304、応答回答カウント305および応答メッセージカウント306を含んでいることができる。別の実施形態においては、待ち時間情報はまた初期応答時間スタンプ（示されていない）も含むことができる。
【００３１】
一例において、テーブルエレメント320は、１０２４に等しい単一のシーケンス番号231-1を有するリクエストスーパーパケット220に対する待ち時間情報を示している。リクエスト時間スタンプ302は、この特定のリクエストスーパーパケットがいつＬＵＥに送信されたかを示すことができる。リクエスト問合せカウント303は、いくつの問合せがこの特定のリクエストスーパーパケット内に含まれていたかを示すことができる。応答時間スタンプ304は、１０２４に等しいシーケンス番号を有する応答スーパーパケットがいつＰＥ（たとえば、ネットワークコンピュータ120-N）において受信されたかを示すことができ、２以上の応答スーパーパケットがＰＥにおいて受信された場合には更新されることができる。応答回答カウント305は、このシーケンス番号（すなわち、１０２４）に関連付けられた受信された応答スーパーパケットの全てに含まれる合計回答数を示すことができる。応答メッセージカウント306は、ＰＥに到達したこのシーケンス番号（すなわち、１０２４）を有する応答スーパーパケットの数を示すことができる。この特定のリクエストスーパーパケット内に含まれる問合せに対する回答はいくつかの応答スーパーパケットにより分割されることができ、その場合、追加の応答スーパーパケットがそれぞれ受信されたとき、応答時間スタンプ304、応答回答カウント305および応答メッセージカウント306が更新されることができる。別の実施形態においては、初期応答時間スタンプは、このシーケンス番号（すなわち、１０２４）に対する回答を含む第１の応答スーパーパケットがいつＰＥにおいて受信されたかを示すことができる。この実施形態では、応答時間スタンプ304は、追加の（すなわち、第２および後続する）応答スーパーパケットが受信されたときに更新されることができる。
【００３２】
種々の重要な待ち時間測定規準は、メッセージ待ち時間データ構造300内に含まれている待ち時間情報から決定されることができる。たとえば、所定の索引301（すなわち、シーケンス番号）に対する応答問合せカウント303と応答回答カウント305との間の簡単な相互チェックは、失われた回答の数を示すことができる。この差は、ＬＵＥにより説明不可能であるのでドロップされた問合せの数を示すことができる。リクエスト時間スタンプ302と応答時間スタンプ304を比較することにより、現在のメッセージロードの下におけるこの特定のＰＥ／ＬＵＥの組合せのパフォーマンスの程度を示すことができる。現在の応答スーパーパケットシーケンス番号と現在のリクエストスーパーパケットシーケンス番号との間の差はＬＵＥの応答パフォーマンスと関連付けられることができ、たとえば、その差が大きくなると、それだけ一層パフォーマンスは低くなる。応答メッセージカウント306は、各リクエストスーパーパケットに対して使用されている応答スーパーパケットの数を示すことができ、また、ＤＮＳソリューショントラフィック解析において重要である可能性がある。ＰＥとＬＵＥとの間を進行する問合せおよび回答の待ち時間が増加するにしたがって、ＰＥはシステムにより処理されるＤＮＳ問合せパケットの数を減少させることができる。
【００３３】
一般に、ＬＵＥは入ってきた多重化されたリクエストスーパーパケットに関して多重スレッドルックアップを行うことができ、また、その回答を出ていく多重化された応答スーパーパケットに結合することができる。たとえば、ＬＵＥは各アクティブにＰＥに対して１つのサーチスレッドまたはプロセスを生じさせ、全ての入ってきたリクエストスーパーパケットをそのＰＥからそのサーチスレッドまで経路設定することができる。ＬＵＥは、メモリ104中に位置されたデータベースを更新するために更新スレッドまたはプロセスを生じさせることができるだけでなく、サーチスレッドとのＰＥの関係を制御するためにマネジャスレッドまたはプロセスを生じさせることもまたできる。各サーチスレッドは、入ってきたリクエストスーパーパケットからサーチ問合せを抽出し、種々のサーチを実行し、サーチ回答を含む出ていく応答スーパーパケットを構成して、そのスーパーパケットを適切なＰＥに送信することができる。更新スレッドは、データベースへの更新をＯＬＴＰ140-1から受信し、新しいデータをデータベース中に組込むことができる。別の実施形態においては、複数のネットワークコンピュータ120-1・・・120-Nが更新をシステム100に送信することができる。これらの更新は、たとえば、入ってきたリクエストスーパーパケットメッセージストリーム内に含まれていてもよい。
【００３４】
したがって、スーパーパケットプロトコルにより、ＬＵＥがネットワーク処理に費やすそのプロセッサ容量は１５％未満となることができ、それによってサーチ問合せスループットを劇的に増加させることができる。１実施形態において、ＩＢＭ（Ｒ）８−ｗａｙ  Ｍ８０は、１８０ｋ乃至２２０ｋの秒当りの問合せ（ｑｐｓ）のサーチレートを維持することができ、一方ＩＢＭ（Ｒ）２４−ｗａｙ  Ｓ８０は、４００ｋ乃至５００ｋ  ｑｐｓを維持することができる。サーチレートを２倍にするには、すなわち、それぞれ５００ｋおよび１Ｍ  ｑｐｓにするには、ハードウェアの量を２倍にするだけでよい。すなわち、たとえば、２つのＬＵＥをそれらに付随するＰＥと共に２倍にするだけでよい。別の実施形態においては、二重のＰｅｎｔｉｕｍ（登録商標）ＩＩＩ  ８６６ＭＨｚ多重プロセッサパーソナルコンピュータオペレーティングＲｅｄ  Ｈａｔ  Ｌｉｎｕｘ（登録商標）６．２は１００Ｋ／秒程度の更新レートを維持することができる。当然ながら、ハードウェア性能が高くなると、本発明の実施形態に関連しているサーチおよび更新レートも増加し、製造業者がこれらの多重プロセッサコンピュータをさらに高速で動作するマシンで置換すると、それに応じて、たとえば、維持されるサーチおよび更新レートが増加することができる。一般に、システム100はクライアントまたはサーバアーキテクチャに制限されず、本発明の実施形態はハードウェアおよび、またはソフトウェアの任意の特定の組合せに制限されない。
【００３５】
図４は、本発明の１実施形態による一般的なデータベースアーキテクチャを示すブロック図である。この実施形態において、データベース400はデータベースレコード401の少なくとも１つのテーブルまたはグループと、データベースレコード401のグループ内の個々のレコードへのポインタ（索引、直接バイトオフセット等）を備えた少なくとも１つの対応したサーチ索引402とを含んでいることができる。たとえば、ポインタ405はデータベースレコード410を参照することができる。
【００３６】
１実施形態において、データベース400は、少なくとも１つのハッシュテーブル403を、データベースレコード401のテーブルまたはグループ中へのポインタ（索引、直接バイトオフセット等）を備えたサーチ索引として含んでいることができる。ハッシュ関数はサーチキーを整数値にマップすることができ、この整数値はその後ハッシュテーブル403中への索引として使用されてもよい。２以上のサーチキーが単一の整数値にマップすることができるので、ハッシュ連鎖ポインタの単連係リストを使用してハッシュバケットが生成されてもよい。たとえば、ハッシュテーブル403内の各エントリはあるハッシュバケットの第１のエレメントへのポインタを含むことができ、そのハッシュバケットの各エレメントは連係リスト中に次のエレメントまたはデータベースレコードへのハッシュ連鎖ポインタを含んでいることができる。ハッシュ連鎖ポインタは、ハッシュバケット中の後続するエレメントを参照するエレメントまたはデータベースレコードに対してのみ必要とされることができるという利点がある。
【００３７】
ハッシュテーブル403は、個々のデータベースレコード401への８バイトポインタのアレイを含んでいることができる。たとえば、ハッシュテーブル403内のハッシュポインタ404は、データベースレコード420をハッシュバケット内の第１のエレメントとして参照することができる。データベースレコード420は、ハッシュバケット中の次のエレメントまたはデータベースレコードを参照することのできるハッシュ連鎖ポインタ424を含むことができる。データベースレコード420はまたデータ長421および関連した固定または可変長データ422を含むことができる。１実施形態において、データ422の終了を示す空白文字423が含まれることができる。さらに、データベースレコード420は、追加のデータが位置されることのできるデータベースレコード401のグループ内または異なったデータベースレコードのテーブルまたはグループ（示されていない）内の別のデータベースレコードを参照することのできるデータポインタ425を含むことができる。
【００３８】
システム100は種々のよく知られているアルゴリズムを使用して、所定のサーチ用語またはキーを求めてこのデータ構造アーキテクチャをサーチすることができる。一般に、データベース400は、複数のプロセッサ102-1・・・102-Pの少なくとも１つにおいて実行する多数のサーチプロセスまたはスレッドによりサーチされることができる。しかしながら、データベース400内の情報の追加、修正または削除を行うために必要とされる時間期間中にサーチスレッド（単一または複数の）がデータベース400にアクセスすることを阻止されない限り、データベース400への修正は必ずしも更新スレッド（単一または複数の）により行われなくてもよい。たとえば、データベース400内のデータベースレコード430を修正するために、データベースレコード401のグループは、更新スレッドがデータベースレコード430内の情報を修正している期間中はサーチスレッドがデータベース400にアクセスすることを阻止するようにその更新スレッドによりロックされてもよい。サーチアクセスを阻止するためにデータベース400をロックする多くのメカニズムがよく知られており、それにはスピン・ロック、セマフォー、ミューテクス（ｍｕｔｅｘｅｓ）等の使用が含まれる。さらに、種々の市販のデータベースは、たとえば、Ｏｒａｃｌｅ社（Ｒｅｄｗｏｏｄ，Ｃａｌｉｆｉｒｎｉａ）製のＯｒａｃｌｅ８データベースにおけるテーブルロックコマンド等の、データベース400の一部または全てをロックする特定のコマンドを提供する。
【００３９】
図５は、本発明の別の実施形態による一般的なデータベースアーキテクチャを示すブロック図である。この実施形態においては、データベース500は高度に最適化された読出し専用マスタースナップショットファイル510および増大するルックアサイドファイル520を含むことができる。マスタースナップショットファイル510は、データベースレコード511の少なくとも１つのテーブルまたはグループと、データベースレコード511のグループ内の個々のレコードへのポインタ（索引、直接バイトオフセット等）を備えた少なくとも１つの対応したサーチ索引512とを含んでいることができる。その代り、マスタースナップショットファイル510は、少なくとも１つのハッシュテーブル513を、データベースレコード511のテーブルまたはグループへのポインタ（索引、直接バイトオフセット等）を有するサーチ索引として含んでいることができる。同様に、ルックアサイドファイル520は、データベース追加レコード521およびデータベース削除レコード531を含むデータベースレコードの少なくとも２つのテーブルのまたはグループを含んでいることができる。データベース追加レコード521およびデータベース削除レコード531内の個々のレコードへのポインタ（索引、直接バイトオフセット等）を備えた対応したサーチ索引522および532が提供されることができる。その代り、ルックアサイドファイル520はハッシュテーブル523および533を、データベース追加レコード521およびデータベース削除レコード531のそれぞれへのポインタ（索引、直接バイトオフセット等）を有するサーチ索引として含んでいることができる。
【００４０】
システム100は種々のよく知られているアルゴリズムを使用して、所定のサーチ用語またはキーを求めてこのデータ構造アーキテクチャをサーチすることができる。典型的な例においては、ルックアサイドファイル520はデータに対する最新の変更を全て含むことができ、読出し専用マスタースナップショットファイル510の前にサーチされることができる。ルックアサイドファイル520においてサーチキーが発見された場合、スナップショットファイル510にアクセスされずに応答が戻されるが、しかし、キーが見出されなかった場合はスナップショットファイル510がサーチされることができる。しかしながら、ルックアサイドファイル520がスナップショットファイル510を有するメモリ104でもはや適合しなくなったときには、サーチ問合せレートは、たとえば、１／１０乃至１／５０以上に、劇的に低下する。結果的に、サーチ問合せレートの低下を回避するか、あるいは最小にするために、スナップショットファイル510は、ルックアサイドファイル520内に含まれている追加、削除および修正の全てを組込むことにより周期的に更新され、あるいは再現されることができる。
【００４１】
スナップショットファイル510内のデータは物理的に変更されるのではなく、論理的に追加され、修正され、あるいは削除される。たとえば、スナップショットファイル510内のデータは、対応した削除レコードをデータベース削除レコード531内に生成し、その削除レコードへのポインタをハッシュテーブル533内の適切な位置に書込むことにより削除される、すなわち、論理的に“忘れられる”ことができる。スナップショットファイル510内のデータはスナップショットファイル510からのデータレコードをデータベース追加レコード521内の新しいデータレコードにコピーし、新しいエントリ内のデータを修正し、その後新しいエントリへのポインタを適切なハッシュテーブル（たとえば、ハッシュテーブル522）に書込むか、あるいはデータベース追加レコード521内に連鎖ポインタを書込むことにより論理的に修正されることができる。同様に、スナップショットファイル510内のデータは、データベース追加レコード521内において新しいデータレコードを生成し、その後新しいエントリへのポインタを適切なハッシュテーブル（たとえば、ハッシュテーブル522）に書込むか、あるいはデータベース追加レコード521内に連鎖ポインタを書込むことによりスナップショットファイル510に論理的に追加されることができる。
【００４２】
たとえば、ＤＮＳソリューションの実施形態では、スナップショットファイル510は、別々のサーチ索引（簡明化のために示されていないが、たとえば、511-1、511-2、512-1、512-2、513-1、513-2等）を有する別々のデータテーブルまたはブロックとして編成されたドメイン名データおよび名称サーバデータを含んでいることができる。同様に、ルックアサイドファイル520は、ドメイン名データおよび名称サーバデータの両者に対する削除だけでなく、ドメイン名データおよび名称サーバデータの両者に対する追加および修正（簡明化のために示されていないが、たとえば、521-1、521-2、522-1、522-2、523-1、523-2、531-1、531-2、532-1、532-2、533-1、533-2等）を含んでいることができる。
【００４３】
図６は、本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図である。一般に、データベース600は単一のサーチ可能なデータの表現に編成されることができる。データセット更新はデータベース600に連続的に組込まれることができ、削除または修正は、たとえば、後続的な追加または修正のためにメモリ104内のスペースをとるために関連したデータベースレコードに関して物理的に行われることができる。単一のサーチ可能な表現は、大きいデータセットサイズおよび高いサーチおよび更新レートに非常にうまくスケールし、多くのサーチエンジンコンピュータの間でスナップショットファイルを周期的に再現し、伝播し、再度ロードする必要性をなくす。
【００４４】
ＤＮＳソリューションの実施形態において、たとえば、デーダース600はドメイン名データ610および名称サーバデータ620を含んでいることができる。ドメイン名データ610および名称サーバデータ620は、可変長レコードのブロックへのポインタ（索引、直接バイトオフセット等）を有するサーチ索引を含んでいることができる。上述したように、ハッシュ関数は整数値にサーチキーをマップすることができ、この整数値はその後、ハッシュテーブルへの索引として使用されてもよい。同様に、ハッシュバケットはハッシュ連鎖ポインタの単連係リストを使用して各ハッシュテーブル索引に対して生成されることができる。ドメイン名データ610は、たとえば、ハッシュテーブル612をサーチ索引および可変長ドメイン名レコード611のブロックとして含むことができる。ハッシュテーブル612は、たとえば、ドメイン名レコード620を参照するポインタ613等のような、個々のドメイン名レコード611への８バイトのポインタのアレイを含むことができる。可変長ドメイン名レコード620は、たとえば、次のレコードオフセット621、名称の長さ622、正規化名称623、連鎖ポインタ624（すなわち、たとえば、ハッシュ連鎖内の次のレコードを指示する）、名称サーバの数625、および名称サーバポインタ626を含んでいることができる。連鎖ポインタ624および名称サーバポインタ626の両者のサイズは、たとえば、連鎖ポインタ624に対しては８バイトであり、名称サーバポインタ626に対しては４バイトのように、それぞれの特定のデータタイプに対して必要とされるブロックサイズを反映するように最適化されることができる。
【００４５】
名称サーバデータ630は、たとえば、ハッシュテーブル632をサーチ索引および可変長名称サーバレコード631のブロックとして含むことができる。ハッシュテーブル632は、たとえば、名称サーバレコード640を参照するポインタ633のような、個々の名称サーバレコード631への４バイトのポインタのアレイを含むことができる。可変長名称サーバレコード640は、たとえば、次のレコードオフセット641、名称の長さ642、正規化名称643、連鎖ポインタ644（すなわち、たとえば、ハッシュ連鎖内の次のレコードを指示する）、名称サーバネットワークアドレスの数645、名称サーバネットワークアドレス長646、および、たとえば、インターネットプロトコル（ＩＰ）ネットワークアドレスであってもよい名称サーバネットワークアドレス647を含むことができる。一般に、名称サーバネットワークアドレスは、ＡＳＣＩＩ（たとえば、ＩＳＯ−１４９６２−１９９７、ＡＮＳＩ−Ｘ３．４−１９７７等の情報交換用の米国規格コード）または２進フォーマットで記億されることができる。この例においては、名称サーバネットワークアドレス長646は、名称サーバネットワークアドレス647が２進フォーマット（たとえば、４バイト）で記憶されていることを示している。連鎖ポインタ644のサイズはまた、たとえば、４バイト等の、必要とされる名称サーバデータブロックサイズを反映するように最適化されることができる。
【００４６】
一般に、ハッシュテーブルのようなサーチ索引および可変長データレコードの両者は、８バイトのポインタがメモリ中の８バイトの境界上に位置されるように構成されることができる。たとえば、ハッシュテーブル612は、ドメイン名レコード611への８バイトポインタの連続したアレイを含むことができ、８で除算可能なメモリアドレス（すなわち、８バイト境界または８Ｎ）に記憶されることができる。同様に、ハッシュテーブルのようなサーチ索引および可変長データレコードの両者は、４バイトのポインタがメモリ中の４バイトの境界上に位置されるように構成されることができる。たとえば、ハッシュテーブル632は名称サーバレコード631への４バイトポインタの連続したアレイを含むことができ、４で除算可能なメモリアドレス（すなわち、４バイト境界または４Ｎ）に記憶されることができる。結果的に、データベース600に対する修正は、たとえば、ハッシュテーブルのようなサーチ索引に対する新しいポインタを書込むか、あるいは可変長データレコードに対する新しいハッシュ連鎖ポインタを書込む等を含む、単一の割込みの生じない動作を使用してメモリ中の整列されたアドレスへのポインタを更新することにより終了することができる。
【００４７】
図７は、本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図である。一般に、データベース700はまた単一のサーチ可能なデータの表現に編成されてもよい。データセット更新はデータベース700に連続的に組込まれることができ、削除または修正は、たとえば、後続的な追加または修正のためにメモリ104内のスペースをとるために関連したデータベースレコードに関して物理的に行われることができる。単一のサーチ可能な表現は、大きいデータセットサイズおよび高いサーチおよび更新レートに非常にうまくスケールし、多くのサーチエンジンコンピュータの間でスナップショットファイルを周期的に再現し、伝播し、再度ロードする必要性をなくす。
【００４８】
多数の種々の物理的データ構造編成が可能である。例示的な編成は、２進サーチツリーとデジタルサーチツリーの機能を組合せた３進サーチツリーまたはＴＳＴのようなデータレコードへの順序付けられた順次アクセスのためにハッシュテーブルに対する別のサーチ索引を使用することができる。たとえば、フーイズ、ＤＮＳ安全拡張（Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋｆｏｒｃｅ  Ｒｅｑｕｅｓｔ  ｆｏｒ  Ｃｏｍｍｅｎｔｓ：２５３５）等を使用するドメイン名ソリューションのようなテキストベースのアプリケーションにおいては、ＴＳＴは、とくにサーチミスの場合には、行われる必要のある比較動作の数を最少にするという利点があり、また、ハッシングによるサーチエンジン実施形態を越えるサーチパフォーマンス測定規準を生じさせることができる。さらに、ＴＳＴはまた、たとえば、フーイズ、ドメイン名ソリューション、インターネット内容サーチ等のテキストサーチアプリケーションにおいて有用なものであることのできるワイルドカードサーチ等のアドバンスドテキストサーチ機能を提供することができる。
【００４９】
１実施形態において、ＴＳＴは、階層関係で共に連結されたノードのシーケンスを含むことができる。ルートノードはツリーの最上部に位置されることができ、関連した子ノードおよびリンクはブランチを形成することができ、リーフノードは各ブランチを終らせることができる。各リーフノードは特定のサーチキーと関連付けられることができ、リーフノードへの通路上の各ノードがそのキーの単一の順次エレメントを含むことができる。ツリー中の各ノードは比較文字または分割値と、およびこのツリー中の別の連続した、すなわち“子”、ノードへの３つのポインタとを含んでいる。これらのポインタは、そのノードの分割値より小さい、等しい、あるいは大きい分割値を有する子ノードを参照する。したがって、特定のキーを求めてＴＳＴをサーチすることには、ルートノードから最終的なリーフノードまでツリーを横断し、そのキーの各エレメントまたは文字ポジションをノードの分割値と通路に沿って順次比較することを必然的に伴なう。さらに、リーフノードはまた、キーレコードへのポインタを含んでいることができ、このキーレコードは、そのキーと関連付けられたレコードデータ（たとえば、ＩＰアドレス）を含む端末データレコードへの少なくとも１つのポインタを含んでいることができる。その代り、キーレコードはレコードデータ全体を含むことができる。レコードデータは、２進フォーマット、ＡＳＣＩＩテキストフォーマット等で記億されることができる。
【００５０】
１実施形態において、データベース700は、複数の固定長サーチノード701、複数の可変長キーデータレコード702および複数の可変長端末データレコード703を含むＴＳＴとして編成されることがてきる。サーチノード701は、たとえば、比較文字（または値）およびポジション、ブランチノードポインタおよびキーポインタ等を含む上述した種々のタイプの情報を含むことができる。ノードポインタのサイズは一般にノードの数によって決定されることができ、一方キーポインタのサイズは一般に可変長キーデータセットによって決定されることができる。キーデータレコード702は、たとえば、端末データレコードまたは埋込まれたレコードデータへのポインタ等を含むキー情報および端末データ情報を含むことができ、一方端末データレコード703はレコードデータを含むことができる。
【００５１】
１実施形態において、各固定長サーチノードは長さが２４バイトであることができる。サーチノード710は、たとえば、８ビット比較文字（またはバイト値）711、１２ビット文字（またはバイト）ポジション712、および１２ビットノードタイプ／状態（簡明化のために示されていない）を含んでいることができる。これらのデータは、ノードの第１の４バイト内で符号化されることができる。比較文字711は図７に示されているようにノードの第１の４バイト内で符号化されることができ、あるいは、その代りに、文字ポジション712は、単なるシフト動作を使用してこの文字ポジション712へのアクセスを最適化するためにこのノードの第１の１２ビット内で符号化されることができる。各サーチノードの次の１２バイトは３つの３２ビットポインタ、すなわち、ブランチノードポインタ“より小さい”、“に等しい”、および“より大きい”ことをそれぞれ表すポインタ713、ポインタ714およびポインタ715を含んでいることができる。これらのポインタはバイトオフセットまたはメモリアドレスではなく、カウンタまたはノード索引を含んでいることができる。固定長サーチノードについては、バイトオフセットは、カウンタまたは索引値および、たとえば、カウンタ＊長のような固定長から計算されることができる。最後の４バイトは４０ビットキーポインタ716を含んでいることができ、これは、対応したキーデータレコードが存在しないことを示す空白値（示されている）であってもよいし、あるいは既存の対応したキーデータレコードへのポインタ（示されていない）であってもよいし、ならびに、たとえば、１２ビットキー長および１２ビットポインタタイプ／状態フィールド等を含む別のデータであってもよい。キーポインタ716は適切なキーデータレコードへのバイトオフセットを含んでいることができ、一方キー長は、ＴＳＴ内の一方向分岐を除去するときにサーチおよび挿入を最適化するために使用されることができる。ポインタタイプ／状態フィールドは、妥当性チェックにおいて使用される情報と、およびにメモリ管理において使用される割当データとを含んでいることができる。
【００５２】
１実施形態において、キーデータレコード750は、たとえば、可変長キー753と、少なくとも１つの端末データポインタとを含んでいることができる。図７に示されているように、キーデータレコード750は２つの端末データポインタ：端末データポインタ757および端末データポインタ758を含んでいる。キーデータレコード750は１２ビットキー長751および１２ビット端末ポインタカウント／状態752を前置されることができ、また、端末データポインタ757および端末データポインタ758をメモリ104内の８バイト境界上に整列させるためにパディング（簡明化のために示されていない）を含んでいることができる。端末データポインタ757および端末データポインタ758はそれぞれ、たとえば、端末データタイプ、長さ、状態または２進レコードサーチにおいて有用なデータ等の、種々のデータを含んでいることができる。端末データポインタ757および端末データポインタ758は、特定のリソースレコード（たとえば、端末データレコード760および端末データレコード770）を迅速に検索するために端末データタイプで分類されることができる。別の実施形態において、キーデータレコード740は、端末データレコードポインタではなく、あるいはこれに加えて、埋込まれた端末データ746を含んでいることができる。たとえば、キーデータレコード740は、キー長741、端末ポインタカウント742、可変長キー743、埋込まれたレコードエレメントの番号744、これに後続するレコードエレメント長745（たとえば、バイトでの）、および埋込まれたレコードエレメントの番号744のそれぞれに対する埋込まれたレコードデータ746（たとえば、ストリング、バイトシーケンス等）を含んでいることができる。
【００５３】
１実施形態において、端末データレコード760は、たとえば、１２ビット長761、４ビット状態、および可変長ストリング762（たとえば、ＩＰアドレス）を含んでいることができる。その代りに、可変長ストリング762はバイトシーケンスであってもよい。端末データレコード760は、各端末データレコードをメモリ104内の８バイト境界に整列させるためにパディングを含んでいることができる。その代りに、端末データレコード760は４バイト境界へのパディングを含んでいてもよく、あるいは端末データレコード760はパディングを含んでいなくてもよい。メモリ管理アルゴリズムは、一般に、端末データレコード760が８バイト、４バイトまたは０バイトのいずれの境界に埋められるのかを決定することができる。同様に、端末データレコード770は１２ビット長771、４ビット状態、および可変長ストリング772（たとえば、ＩＰアドレス）を含んでいることができる。
【００５４】
一般に、ＴＳＴのようなサーチ索引およびデータレコードの両者は、８バイトポインタがメモリ中の８バイト境界上に位置されるように構成されることができる。たとえば、キーポインタ726はキーデータレコード740への８バイト（またはそれより小さい）ポインタを含んでいることができ、また、８で除算可能なメモリアドレス（すなわち、８バイト境界または８Ｎ）に記憶されることができる。同様に、ＴＳＴのようなサーチ索引およびデータレコードの両者は、４バイトポインタがメモリ中の４バイト境界上に位置されるように構成されることができる。たとえば、ノードブランチポインタ724はノード730への４バイト（またはそれより小さい）ポインタを含んでいることができ、４で除算可能なメモリアドレス（すなわち、４バイト境界または４Ｎ）に記憶されることができる。結果的に、データベース700に対する修正は、たとえば、ＴＳＴノードのようなサーチ索引に対する新しいポインタを書込むか、あるいはデータレコードに対する新しいポインタを書込む等を含む、単一の割込みの生じない動作を使用してメモリ中の整列されたアドレスへのポインタを更新することにより終了することができる。
【００５５】
図８は、本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図である。上述したように、データベース800はまた、単一のサーチ可能なデータの表現に編成されることができる。データセット更新はデータベース800に連続的に組込まれることができ、削除または修正は、たとえば、後続的な追加または修正のためにメモリ104内のスペースをとるために関連したデータベースレコードに関して物理的に行われることができる。単一のサーチ可能な表現は、大きいデータセットサイズおよび高いサーチおよび更新レートに非常にうまくスケールし、多くのサーチエンジンコンピュータの間でスナップショットファイルを周期的に再現し、伝播し、再度ロードする必要性をなくす。
【００５６】
別のサーチ索引構造もまたレコードデータへのアクセスに対して可能である。１実施形態において、データベース800は、順序付けられたアクセスキーツリー（すなわち、“ＯＡＫツリー”）として編成された別の順序付けられたサーチ索引を使用することができる。データベース800は、たとえば、複数の可変長サーチノード801、複数の可変長キーレコード802および複数の可変長端末データレコード803を含んでいることができる。サーチノード801は、たとえば、サーチキー、別のサーチノードへのポインタ、キーレコードへのポインタ等の、上述の種々のタイプの情報を含んでいることができる。１実施形態において、複数の可変長サーチノード801は、別のサーチノードまたはキーレコードへのポインタだけでなく、サーチキーのフラグメント（たとえば、ストリング）を含む垂直および水平ノードもまた含んでいることができる。垂直ノードは、たとえば、少なくとも１つのサーチキーまたは文字、複数のサーチノード801内の水平ノードへのポインタ、複数のキーレコード802内のキーレコードへのポインタ等を含んでいることができる。水平ノードは、たとえば、少なくとも２つのサーチキーまたは文字、複数のサーチノード801内の垂直ノードへのポインタ、複数のキーレコード802内のキーレコードへのポインタ等を含んでいることができる。一般に、垂直ノードは、サーチキーフラグメント（たとえば、ストリング）を表すキー（たとえば、文字）のシーケンスを含んでいることができ、一方水平ノードは、サーチキーフラグメント（たとえば、ストリング）内の特定のポジションに存在することのできる種々のキー（たとえば、文字）を含んでいることができる。
【００５７】
１実施形態において、複数のサーチノード801は垂直ノード810、垂直ノード820および水平ノード830を含んでいることができる。垂直ノード810は、たとえば、２ビットノードタイプ811（たとえば、“１０”）、３８ビットアドレス812、８ビット長813（たとえば、“８”）、８ビットの第１の文字814（たとえば、“Ｉ”）および８ビットの第２の文字815（たとえば、“空白”）を含んでいることができる。この例においては、アドレス812はサーチツリー中の次のノード、すなわち、垂直ノード820を指示することができる。１実施形態においては、３８ビットアドレス812は、メモリ104の１Ｔバイト（ほぼ１０12バイト）のアドレススペース内の８バイトワードの１つを参照するために１ビット端末／ノードインジケータおよび３７ビットオフセットアドレスを含んでいることができる。したがって、垂直ノード810は長さが８バイト（６４ビット）であることができ、メモリ104内の８バイトワード境界上に位置されることができるという利点がある。一般に、複数のサーチノード801内の各垂直ノードはメモリ104内の８バイトワード境界上に位置されることができる。
【００５８】
垂直ノードは、マルチ文字、サーチキーフラグメント（たとえば、ストリング）を含んでいることができる。一般に、関連付けられたキーデータレコードを有しないサーチキーは、複数のサーチノード801内において必要とされる垂直ノードの数を効率的に減少させるために単一の垂直ノードにまとめられることができる。１実施形態において、垂直ノード810は、たとえば、８ビット文字816-1、816-2・・・816-N（擬似輪郭で示されている）等の、サーチキーフラグメント内の、３以上の文字である追加文字のそれぞれに対して８ビットを含むことができる。垂直ノード810は、ストリングフラグメント内に位置された追加文字の数にしたがってメモリ104内の６４ビット境界に埋められることができるという利点がある。たとえば、９個の文字が垂直ノード810内に含まれている場合、文字１および２は第１の文字814および第２の文字815にそれぞれ割当てられることができ、文字３乃至９に対応した追加文字情報の５６ビットが垂直ノード810に付加されることができる。パディングの追加の８ビットは、追加文字情報を８バイトワード境界上に整列させるために含まれることができる。
【００５９】
同様に、垂直ノード820は、たとえば、２ビットノードタイプ821（たとえば、“１０”）、３８ビットアドレス822、８ビット長823（たとえば、“８”）、８ビットの第１の文字824（たとえば、“ａ”）および８ビットの第２の文字825（たとえば、“空白”）を含んでいることができる。この例においては、アドレス822はサーチツリー中の次のノード、すなわち、水平ノード830を指示することができる。したがって、垂直ノード820は長さが８バイトであることができ、メモリ104内の８バイトワード境界上に位置されることができるという利点がある。当然ながら、必要ならば、垂直ノード810を参照として上述したように、追加情報もまた垂直ノード820内に含まれることができる。
【００６０】
水平ノード830は、たとえば、２ビットノードタイプ831（たとえば、“０１”）、３８ビットの第１のアドレス832、８ビットアドレスカウント833（たとえば、２）、８ビットの最初の文字834（たとえば、“・”）、８ビットの最後の文字835（たとえば、“ｗ”）、可変長ビットマップ836、および３８ビットの第２のアドレス837を含んでいることができる。この例においては、最初の文字834は垂直ノード810および820により規定されたサーチキーフラグメント“ｌａ”を表す単一の文字“・”を含んでいることができ、一方最後の文字831は垂直ノード810および820と水平ノード830のその最後の文字835とにより規定されたサーチキーフラグメント“ｌａｗ”を表す単一の文字“ｗ”を含んでいることができる。第１のアドレス832はサーチキーフラグメント“ｌａ”と関連付けられたキーデータレコード840を指示することができ、一方第２のアドレス837はサーチキーフラグメント“ｌａｗ”と関連付けられたキーデータレコード850を指示することができる。
【００６１】
ビットマップ836は、どのキー（たとえば、文字）が水平ノード830により参照されるかを示すという利点がある。ビットマップ836中のビットポジション内の“１”は、そのキーまたは文字が水平ノード830により参照されることを示し、一方ビットマップ836中のビットポジション内の“０”は、そのキーまたは文字が水平ノード830により参照されないことを示している。一般に、ビットマップ836の長さは、最初の文字834および最後の文字835を含めたこれらの境界文字の間の順次キーまたは文字の数に依存することができる。たとえば、最初の文字834が“ａ”であり、最後の文字835が“ｚ”である場合、ビットマップ836は長さが２６ビットであることができ、各ビットが“ａ”および“ｚ”を含むこれらの間の文字の１つに対応している。この例において、追加の３８ビットアドレスは、ビットマップ836内に表された文字のそれぞれに対応した水平ノード830の終りに付加されることができる。ビットマップ836だけでなく、これらの３８ビットアドレスのそれぞれもまた、メモリ104内の８バイトワード境界上に各量を整列させるために埋められることができる。１実施形態において、８ビットＡＳＣＩＩ文字セットは、ビットマップ836が２５６ビット（すなわち、２8ビットまたは３２バイト）の長さになることができるようにサーチキースペースとして使用されることができる。図８に示された実施形態においては、特殊な参照文字“・”および“２”のアドレスカウント833のために、ビットマップ836は長さが２ビットであることができ、最後の文字835に対応した各ビットポジション中に“１”を含んでいることができる。
【００６２】
１実施形態において、キーデータレコード750（図７）を参照として上述したように、キーデータレコード850は、たとえば、可変長キー853と、少なくとも１つの端末データポインタとを含んでいることができる。図８に示されているように、キーデータレコード850は２つの端末データポインタ：端末データポインタ857および端末データポインタ858を含んでいる。キーデータレコード850は１２ビットキー長851および１２ビット端末ポインタカウント／状態852を前に置かれることができ、また、端末データポインタ857および端末データポインタ858をメモリ104内の８バイト境界上に整列させるためにパディング（簡明化のために示されていない）を含むことができる。端末データポインタ857および端末データポインタ858はそれぞれ、１０ビットの端末データタイプと、たとえば、２進レコードサーチにおいて有用な長さ、状態またはデータ等の別のデータとを含んでいることができる。端末データポインタ857および端末データポインタ858は、特定のリソースレコード（たとえば、端末データレコード860および端末データレコード870）を迅速に検索するために端末データタイプで分類されることができる。
【００６３】
別の実施形態において、キーデータレコード740（図７）を参照として上述したように、キーデータレコード840は、端末データレコードポインタではなく、埋込まれた端末データ846を含んでいることができる。たとえば、キーデータレコード840は、キー長841、端末ポインタカウント842、可変長キー843、埋込まれたレコードエレメントの番号844、これに後続するレコードエレメント長845（たとえば、バイトでの）、および埋込まれたレコードエレメントの番号844のそれぞれに対する埋込まれたレコードデータ846（たとえば、ストリング、バイトシーケンス等）を含んでいることができる。
【００６４】
別の実施形態において、端末データレコード760（図７）を参照として上述したように、端末データレコード860は、たとえば、１２ビット長861、４ビット状態、および可変長ストリング862（たとえば、ＩＰアドレス）を含んでいることができる。その代りに、可変長ストリング862はバイトシーケンスであってもよい。端末データレコード860は、各端末データレコードをメモリ104内の８バイト境界に整列させるためにパディング（簡明化のために示されていない）を含んでいることができる。その代りに、端末データレコード860は４バイト境界へのパディング（簡明化のために示されていない）を含んでいてもよく、あるいは端末データレコード860はパディングを含んでいなくてもよい。メモリ管理アルゴリズムは、一般に、端末データレコード860が８バイト、４バイトまたは０バイトのいずれの境界に埋められるのかを決定することができる。同様に、端末データレコード870は１２ビット長871、４ビット状態、および可変長ストリング872（たとえば、ＩＰアドレス）を含むことができる。
【００６５】
一般に、ＯＡＫツリーのようなサーチ索引およびデータレコードの両者は、８バイトポインタがメモリ中の８バイト境界上に位置されるように構成されることができる。たとえば、垂直ノード810は垂直ノード820への８バイト（またはそれより小さい）ポインタを含んでいることができ、また、８で除算可能なメモリアドレス（すなわち、８バイト境界または８Ｎ）に記憶されることができる。同様に、ＯＡＫツリーのようなサーチ索引およびデータレコードの両者は、４バイトポインタがメモリ中の４バイト境界上に位置されるように構成されることができる。結果的に、データベース800に対する修正は、たとえば、ＯＡＫツリーノードのようなサーチ索引に対する新しいポインタを書込むか、あるいはデータレコードに対する新しいポインタを書込む等を含む、単一の割込みの生じない動作を使用してメモリ中の整列されたアドレスへのポインタを更新することにより終了することができる。
【００６６】
図８を参照として上述した種々の実施形態は多くの利点を提供する。たとえば、ＯＡＫツリーデータ構造は非常にスペース効率のよく、完全に８ビットである。正規表現サーチは、マルチ文字ストリングフラグメントを含む垂直ノードをサーチするために使用されることができる。これは、８ビットの第１の文字（第１の文字814）、８ビットの第２の文字（第２の文字8-15）および任意の追加の８ビット文字（たとえば、追加文字816-1・・・816-N）は垂直ノード（たとえば、垂直ノード810）内に隣接して位置されることができるからである。サーチミスは迅速に発見されることができ、Ｎ文字長のサーチストリングをサーチするにはノードをＮ個だけ横断すればよい。
【００６７】
図９は、本発明の１実施形態による、オペレーティングシステムまたはデータベーステーブルロックを使用せずにデータベースをサーチして同時に並行に更新する方法を示す最高レベルのフロー図である。
【００６８】
更新スレッドおよび複数のサーチスレッドが生成されることができる（900）。１実施形態において、システム100は、たとえば、ＯＬＴＰサーバ140-1からＷＡＮ124により受信されたローカルデータベースに更新を組込むために単一の更新スレッドを生じさせることができる。別の実施形態においては、システム100は更新をＷＡＮ124によりＯＬＴＰサーバ140-1・・・140-Sから受信できると共にＷＡＮ124またはＬＡＮ122により複数のネットワークコンピュータ120-1・・・120-Nから受信することができる。システム100はまた、複数のネットワークコンピュータ120-1・・・120-Nから受信された各セッションリクエストに応答してサーチスレッドを生じさせることができる。たとえば、マネジャスレッドは、複数のネットワークコンピュータ120-1・・・120-Nから送信されたセッションリクエストについて１以上のネットワークインターフェース114-1・・・114-Oと関連付けられた１以上の制御ポートをポーリングすることができる。特定のネットワークコンピュータ120-1・・・120-Nからのセッションリクエストが受信されると、マネジャスレッドはサーチスレッドを生じさせ、このサーチスレッドをその特定のネットワークコンピュータ（たとえば、ＰＥ）と関連付けることができる。
【００６９】
別の実施形態において、システム100は、複数のネットワークコンピュータ120-1・・・120-Nからのセッションリクエストに関してポーリングせずにいくつかのサーチスレッドを生じさせることができる。この実施形態では、サーチスレッドは特定のネットワークコンピュータと関連付けられなくてもよく、複数のプロセッサ102-1・・・102-Pの間で均一に分配されることができる。その代りに、サーチスレッドは複数のプロセッサ102-1・・・102-Pの部分集合において実行することができる。サーチスレッドの数はネットワークコンピュータの数（たとえば、Ｎ）と必ずしも一致しなくてもよい。
【００７０】
ネットワークにより複数のサーチ問合せが受信される（910）。１実施形態においては、複数のネットワークコンピュータ120-1・・・120-Nは複数のサーチ問合せをＬＡＮ122によって、あるいはその代りにＷＡＮ124によってシステム100に送信することができる。複数のサーチ問合せは、たとえば、各問合せと関連付けられた状態情報（たとえば、問合せソースアドレス、プロトコルタイプ等）だけでなく、サーチ用語またはキーもまた含んでいることができる。状態情報はシステム100によって明示的に維持されることができ、あるいは、その代わりに状態情報ハンドルが設けられることができる。好ましい実施形態において、複数のネットワークコンピュータ120-1・・・120-Nのそれぞれは、予め定められた数のサーチ問合せをシステム100への送信のための単一のネットワークパケット（たとえば、図２に示されているリクエストスーパーパケット220）に多重化することができる。
【００７１】
別の実施形態においては、複数のサーチ問合せおよび新しい情報がネットワークによって並行して受信されることができる（910、960）。たとえば、複数のネットワークコンピュータ120-1・・・120-Nは複数のサーチ問合せおよび新しい情報をＬＡＮ122によって、あるいはその代りにＷＡＮ124によってシステム100に送信することができる。複数のサーチ問合せは、たとえば、各問合せと関連付けられた状態情報（たとえば、問合せソースアドレス、プロトコルタイプ等）だけでなく、サーチ用語またはキーもまた含んでいることができる。新しい情報は、たとえば、データベースに対する追加、修正または削除を含んでいることができ、関連付けられた識別子によりトランザクションとしてグループ化されることができる。たとえば、１実施形態において、複数のネットワークコンピュータ120-1・・・120-Nのそれぞれは、予め定められた数のサーチ問合せおよび新しい情報を、たとえば、単一のリクエストスーパーパケット220（簡明化のために示されていない新しい情報）等の、システム100に送信するための単一のネットワークパケットに多重化することができる。トランザクション内の新しい情報に依存しているこれらの問合せのために、これらの問合せと関連付けられた状態情報はトランザクション識別子を含むことができ、また、典型的に、システム100により維持されることができる。更新スレッドがデータベースにトランザクション（すなわち、たとえば、進行中のトランザクション）を適用したとき、この更新スレッドがそのトランザクションの終了に成功して委託（ｃｏｍｍｉｔ）するまで、このトランザクションに依存するサーチ問合せは保留されることとなる。
【００７２】
各サーチ問合せは、処理のためにサーチスレッドの１つに割当てられることができる（920）。１実施形態において、各サーチスレッドは複数のネットワークコンピュータ120-1・・・120-Nの１つと関連付けられることができ、その特定のネットワークコンピュータから受信された全てのサーチ問合せがそのサーチスレッドに割当てられることができる（920）。換言すると、１つのサーチスレッドは単一のネットワークコンピュータ（たとえば、単一のＰＥ）から到着した全てのサーチ問合せを処理することができる。１実施形態において、各サーチスレッドは個々のサーチ問合せを単一の多重化されたネットワークパケット（たとえば、図２に示されているリクエストスーパーパケット220）から抽出することができ、あるいは、その代りに、抽出は異なったプロセッサまたはスレッドにより行われることができる。
【００７３】
別の実施形態において、複数のネットワークコンピュータ120-1・・・120-Nのそれぞれから受信されたサーチ問合せは、異なったサーチスレッドに割当てられることができる（920）。この実施形態では、多重スレッド割当は、たとえば、プロセッサローディング等を含む種々のシステムパラメータを組込むことのできる最適分配機能に基づくことができる。当然ながら、サーチスレッドに対するサーチ問合せの割当ては、プロセッサ使用可能度、システムコンポーネント性能等を含む種々のシステムパラメータに基づいて時間的に変わってもよい。システム100内の割当てられたサーチスレッドにサーチ問合せを伝達するために、たとえば、共用記憶域、プロセス間メッセージ、トークン、セマフォー等の種々のメカニズムが使用されることができる。
【００７４】
各サーチスレッドは割当てられたサーチ問合せに基づいてデータベースをサーチすることができる（930）。１実施形態において、各サーチスレッドは、個々のサーチ問合せを単一の多重化されたネットワークパケット（たとえば、図２に示されているリクエストスーパーパケット220）から抽出することができ、あるいは、その代りに、抽出は異なったプロセッサまたはスレッドにより行われることができる。明らかに、データベースのサーチは、データベースの基礎をなす構造に依存することができる。１実施形態において、データベースをサーチすることは、ある特定のトランザクションに依存したサーチ問合せに対するそのトランザクション内に含まれる修正に依存することができる。
【００７５】
図４に示されているデータベース実施形態を参照とすると、サーチキーを求めてデータベース400がサーチされることができる（930）。その後、そのサーチキーに対応したデータレコード（たとえば、データベースレコード420）が決定されることができる。図５に示されているデータベースの実施形態を参照とすると、サーチキーを求めてルックアサイドファイル520が最初にサーチされることができ（930）、一致が決定されなかった場合、スナップショットファイル510がサーチされることができる（930）。その後、サーチキーに対応したデータレコードが決定されることができる。
【００７６】
図６に示されているデータベース実施形態を参照とすると、サーチキーを求めてドメイン名データ610が最初にサーチされることができ（930）、その後、そのサーチキーに対応した名称サーバデータ630内のリソースデータが決定されることができる。たとえば、“ｌａ．ｃｏｍ”サーチキーについては、ドメイン名データ610内のドメイン名レコード620との一致が決定されることができる。たとえば、名称サーバポインタ626等を含む適切な情報が抽出されることができる。その後、名称サーバポインタ626を使用して、適切な名称サーバレコード640が索引を付けられることができ、名称サーバネットワークアドレス647が抽出されることができる。
【００７７】
図７に示されているデータベース実施形態を参照とすると、サーチキーを求めてＴＳＴがサーチされることができ（930）、このサーチキーからリソースデータが決定されることができる。たとえば、“ｌａｗ．ｃｏｍ”サーチキーでは、サーチノード701がサーチされることができ（930）、ノード730との一致が決定されることができる。キーポインタ736が抽出されることができ、このキーポインタ736からキーデータレコード750が決定されることができる。その後、端末データポインタの数752が識別されることができ、各端末データポインタが抽出されることができる。たとえば、端末データポインタ757は端末データレコード760を参照することができ、端末データポインタ758は端末データレコード770を参照することができる。その後、可変長リソースデータ、たとえば、名称サーバネットワークアドレス762および名称サーバネットワークアドレス772がその長さ761および771をそれぞれ使用して各端末データレコードから抽出されることができる。
【００７８】
図８に示されているデータベースの実施形態を参照とすると、サーチキーを求めてＯＡＫツリーがサーチされることができ（930）、このサーチキーからリソースデータが決定されることができる。たとえば、“ｌａｗ．ｃｏｍ”サーチキーでは、サーチノード801がサーチされることができ（930）、ノード830との一致が決定されることができる。第２のアドレス837が抽出され、この第２のアドレス837からキーデータレコード850が決定されることができる。その後、端末データポインタの数852が識別されることができ、各端末データポインタが抽出されることができる。たとえば、端末データポインタ857は端末データレコード860を参照することができ、端末データポインタ858は端末データレコード870を参照することができる。その後、可変長リソースデータ、たとえば、名称サーバネットワークアドレス862および名称サーバネットワークアドレス872がその長さ861および871をそれぞれ使用して各端末データレコードから抽出されることができる。
【００７９】
各サーチスレッドは、割当てられたサーチ問合せに対応した複数のサーチ回答を生成することができる（940）。あるサーチキーに対して一致が見出されなかった場合、その回答は、たとえば、空白文字のような適切な表示を含むことができる。図６乃至８を参照とすると、たとえば、サーチキーは“ｌａｗ．ｃｏｍ”であり、対応したリソースデータは“１８０．１．１．１”である。２以上の名称サーバネットワークアドレスがある１つのサーチキーに関連付けられることができ、この場合、２以上の名称サーバネットワークアドレスが決定されることができる。
【００８０】
回答はネットワークにより送信されることができる（950）。１実施形態において、各サーチスレッドは適切な回答を、元の問合せを含む単一のネットワークパケット（たとえば、リクエストスーパーパケット220）に対応した単一のネットワークパケット（たとえば、応答スーパーパケット240）に多重化することができる。その代り、異なったプロセスまたはスレッドが適切な回答を単一のネットワークパケット多重化することができる。その後、応答ネットワークパケットは、ＬＡＮ122によって、あるいはその代りにＷＡＮ124によって複数のネットワークコンピュータ120-1・・・120-N内の適切なネットワークコンピュータに送信されることができる（950）。１実施形態において、応答パケットは、リクエストパケットの発信元である同じネットワークコンピュータに送信されることができ、一方別の実施形態においては、応答パケットは異なったネットワークコンピュータに送信されることができる。
【００８１】
更新スレッドは、ネットワークによって新しい情報を受信することができる（960）。１実施形態において、新しい情報は、たとえば、ＯＬＴＰサーバ140-1からＷＡＮ124によってシステム100に送信されることができる。別の実施形態において、システム100は更新を、ＯＬＴＰサーバ140-1・・・140-SからＷＡＮ124によって、および複数のネットワークコンピュータ120-1・・・120-NからＷＡＮ124またはＬＡＮ122によって受信することができる。上述したように、１実施形態において、複数のネットワークコンピュータ120-1・・・120-Nは複数のサーチ問合せおよび新しい情報をＬＡＮ122によって、あるいは、その代りにＷＡＮ124によってシステム100に送信することができる。結果的に、この実施形態では、複数のサーチ問合せおよび新しい情報はネットワークによって並行に受信されることができる（910、960）。
【００８２】
ＤＮＳソリューションの実施形態において、たとえば、新しい情報は新しいドメイン名データ、新しい名称サーバデータ、既存のドメイン名に対する新しい名称サーバ等を含むことができる。その代りに、新しい情報は、ドメイン名レコード、名称サーバレコード等がデータベースから削除された可能性があることを示すことができる。一般に、データベース内に含まれている情報は、適宜、追加、修正または削除されることができる。１実施形態において、データベースに対するいくつかの修正は、トランザクションとしてグループ化され、整合（ｃｏｎｓｉｓｔｅｎｔ）修正セットとしてデータベースに適用されることができる。
【００８３】
たとえば、あるトランザクションは、データベースレコード追加、修正または削除の種々の組合せを含んでいることができる。データベースへのサーチアクセスは制限されていないため、インジケータフィールド（たとえば、“ダーティビット”）が各データベースレコード内に提供され、サーチスレッドに対して、ある特定のデータベースレコードに対してダーティビットが設定されたとき、あるトランザクションと関連付けられたデータベース修正が進行中であり、その特定のデータベースレコードの後続的な問合せ再試行が必要であることを知らせることができる。ひとたびトランザクションが適用されて、修正が終了すると、このトランザクションの結果得られたその新しいデータベースエレメントの全てに対してダーティビットがクリアされる。ある意味において、新しい情報は“委託”されるとみなされることができる。したがって、データベースは、データベースへのサーチアクセスを制限せずにある１つの有効状態から別の有効状態に変形されることができる。
【００８４】
これらの更新期間中、オペレーティングシステムまたはデータベーステーブルロックは、サーチ問合せによるデータベースへのアクセスを阻止することを要求されない。任意の特定のデータベースレコードに対してダーティビットが設定されることが決定された場合、サーチ問合せは繰返される必要があるため、わずかなパフォーマンスペナルティが生じる。ダーティビットはデータベースレコードの最上位ワード内に位置されることが可能であり、したがって、このワードが、たとえば、メモリ104からプロセッサ102-1に転送されると直にビットが挿入されることができる。このようにして、ダーティビットが設定されることが決定された場合にデータベースレコードの残りの部分に関連した付加的なメモリ転送が回避されることができる。問合せ再試行期間は、図１を参照として述べられた例示的なシステムの実施形態に対してナノ秒の程度でよい。典型的に、ダーティビットは問合せ再試行が特定のデータベースレコードに再度アクセスする前にクリアされることができる。
【００８５】
その代わりに、あるいは、ターティビットがトランザクション進行中に設定されたとき、トランザクションデータベースシステムにおいて普通行われているように、時点整合問合せの結果が、たとえばログマネジャ等の、やり直し（ｒｅｄｏ）ログの内容から再構成されることができる。進行中のトランザクションの一部ではない単一の進行中の修正のためにダーティビットに遭遇する可能性のあるサーチ問合せについて、通常、ログマネジャから問合せ結果を再構成するよりもその問合せを繰返すほうがパフォーマンスペナルティが小さい。ダーティビットが長時間にわたって受信された拡張（ｅｘｔｅｎｄ）された修正セットに関する進行中のトランザクションによるものである場合、問合せ結果が過度に遅延されないように、ログマネジャから問合せ結果を再構成するほうがよい。
【００８６】
単一のトランザクション内のデータベースレーコード修正の数は一般に無制限であるが、１つのトランザクションには、データベースの最小単位、一貫性、分離および永続性を保持するために十分な情報が含まれている。図４および６乃至８内に示されている各データベースの実施形態に対して、多くの異なったトランザクションが考えられる。図４を参照とすると、たとえば、あるトランザクションはデータベースレコード410および420を修正すること、データベースレコード420を修正して新しいデータベースレコード（たとえば、データベースレコード430）を追加すること、データベースレコード420を修正してあるデータベースレコード（たとえば、データベースレコード410）を削除すること等を含んでいることができる。図６を参照とすると、たとえば、あるトランザクションはドメイン名レコード620および名称サーバレコード640を修正すること、ドメイン名レコード620を削除してドメイン名レコード615を追加すること等を含んでいることができる。図７を参照とすると、たとえば、あるトランザクションはキーデータレコード750および端末データレコード760を修正して端末データレコード770を削除すること、キーデータレコード780を追加してキーデータレコード740を削除すること等を含んでいることができる。同様に、図８を参照とすると、たとえば、あるトランザクションはキーデータレコード850および端末データレコード860を修正して端末データレコード870を削除すること、キーデータレコード880を追加してキーデータレコード840を削除すること等を含むことができる。
【００８７】
更新スレッドは、新しい情報に基づいて複数の新しいエレメントを生成することができる（970）。典型的に、データベースのある既存のエレメント内に含まれている情報に対する修正は、その既存のエレメントに基づいて新しいエレメントを生成し、その後新しい情報を含むように新しいエレメントを修正することにより組込まれることができる。このプロセス中、新しいエレメントに対するポインタがデータベースに書込まれるまで、その新しいエレメントは、現在システム100上で実行しているサーチスレッドまたはプロセスには見えない。一般に、データベースへの追加は、既存のエレメント内に含まれる情報を必ず使用するとは限らないが、類似したやり方で行われることができる。１実施形態において、データベースからの既存のエレメントの削除は、新しい明示的な“削除”エレメントをデータベースに追加することにより行われることができる。別の実施形態では、データベースからの既存のエレメントの削除は、適切なインジケータ（たとえば、空白ポインタ等）で既存のエレメントへのポインタを重書きすることにより行われることができる。この実施形態においては、更新スレッドは、新しい情報を含む新しいエレメントをデータベース中に生成しない。
【００８８】
図４を参照とすると、たとえば、新しいデータレコード（たとえば、データレコード430）のためのメモリスペースは、データベースレコード401に関連付けられたメモリプールから割当てられることができる。新しい情報はデータレコード430のデータ432にコピーされることができ、たとえば、連鎖ポインタ434、データポインタ435等のような別の情報が計算され、データレコード430に追加されることができる。ダーティビット408もまた新しいデータレコード430に含まれることができる。図６乃至８に示されているデータベースの実施形態を参照とすると、新しい情報は、データベースに追加されることとなる新しいドメイン名および、またはドメイン名サーバを含んでいることができる。
【００８９】
図６を参照とすると、たとえば、新しいドメイン名レコード615のためのメモリスペースは、ドメイン名レコード611に関連付けられたメモリプールから、あるいは、その代りに、ドメイン名データ610に関連付けられた一般的なメモリプールから割当てられることができる。新しいドメイン名は正規化され、新しいドメイン名レコード615にコピーされることができ、また、既存の名称サーバ（たとえば、名称サーバレコード655）へのポインタが決定され、新しいドメイン名レコード615にコピーされることができる。ダーティビット618もまた新しいドメイン名レコード615に含まれることができる。たとえば名称サーバの数、連鎖ポインタ等の別の情報が計算され、新しいドメイン名レコード615に追加されることができる。さらに複雑な例においては、新しい情報は、対応したリソースデータを有する新しいサーチキーを含んでいることができる。
【００９０】
図７を参照とすると、さらに複雑な例において、新しいキーデータレコード780だけでなく、新しいサーチノード705もまた生成されることができる。この例においては、新しいサーチノード705は、既存のサーチノード710の第１のポジションにおける比較文字（“Ｉ”）より大きい比較文字（“ｍ”）を第１のポジションに含んでいることができる。結果的に、サーチノード705は、ＴＳＴ中においてサーチノード710と同じ“レベル”（すなわち、第１の文字ポジション）で挿入されることができる。サーチノード705がデータベースに委託される前に、サーチノード710の４バイトの“より大きい”ポインタ715は“空白”ポインタを含むことができる。サーチノード705はまた、新しいキーデータレコード780への４０ビットポインタを含んでいることのできる４バイトのキーポインタ706を含むことができる。キーデータレコード780は、キー長781（たとえば、“５”）およびタイプ782（たとえば、埋込まれたリソースデータを示す）、可変長キー783（たとえば、“ｍ．ｃｏｍ”）、埋込まれたリソースの数784（たとえば、“１”）、リソース長785（たとえば、“９”）、可変長リソースストリング786またはバイトシーケンス（たとえば、“１８０．１．１．１”）、およびダーティビット707を含んでいることができる。サーチノード705のためのメモリスペースは、ＴＳＴノード701に関連付けられたメモリプールから割当てられることができ、一方キーデータレコード770のためのメモリスペースは、複数のキーデータレコード702に関連付けられたメモリプールから割当てられることができる。
【００９１】
図８を参照とすると、たとえば、新しいキーデータレコード880だけでなく、新しいサーチノード890もまた生成されることができる。この例においては、新しいサーチノード890は、たとえば、２ビットのノードタイプ891（たとえば、“０１”）、３８ビットの第１のアドレス892、８ビットのアドレスカウント893（たとえば、“２”）、８ビットの最初の文字894（たとえば、“Ｉ”）、８ビットの最後の文字895（たとえば、“ｍ”）、可変長ビットマップ896および３８ビットの第２のアドレス897を含む水平ノードであることができる。第１のアドレス892は“Ｉ＜・・・＞”サーチストリング通路における次の垂直ノードである垂直ノード820を指示することができ、一方第２のアドレス897はサーチキーフラグメント“ｍ”と関連付けられたキーデータレコード880を指示することができる。キーデータレコード880は、キー長881（たとえば、“５”）およびタイプ882（たとえば、埋込まれたリソースデータを示す）、可変長キー883（たとえば、“ｍ．ｃｏｍ”）、埋込まれたリソースの数884（たとえば、“１”）、リソース長885（たとえば、“９”）、可変長リソースストリング886またはバイトシーケンス（たとえば、“１８０．１．１．１”）、およびダーティビット807を含むことができる。サーチノード890のためのメモリスペースは、複数のサーチノード801に関連付けられたメモリプールから割当てられることができ、一方キーデータレコード880のためのメモリスペースは、複数のキーデータレコード802に関連付けられたメモリプールから割当てられることができる。
【００９２】
新しい情報はまた、データベース内の既存のレコードに対するいくつかの修正を含んでいることができる。図４を参照とすると、新しい情報はデータレコード410に対する修正を含むことができる。この例では、新しいデータレコード420が生成されて、データレコード410からの情報がそれにコピーされることができる。上述したように、データレコード420のためのメモリスペースはデータレコード401に関連付けられたメモリプールから割当てられることができる。その後、修正はデータ422に適用されることができる。データレコード410および420はまたそれぞれダーティビット406および407を含むことができる。
【００９３】
図６を参照とすると、新しい情報は、たとえば、新しいＩＰアドレス（たとえば、“１８０．２．１．２”）等の、名称サーバレコード640に対する修正を含んでいてもよい。この例では、新しい名称サーバレコード660が生成されて、古い名称サーバレコード640からの情報がそれにコピーされることができる。上述したように、名称サーバレコード660のためのメモリスペースは名称サーバレコード631に関連付けられたメモリプールから、あるいは、その代りに、名称サーバデータ630と関連付けられた一般的なメモリプールから割当てられることができる。その後、新しい名称サーバＩＰアドレス、すなわち、たとえば、名称サーバＩＰアドレス667等は、名称サーバレコード660内の適切なフィールドにコピーされることができる。ダーティビット668は新しい名称サーバレコード660内に含まれていることができる。図７および８を参照として説明されているデータベースの実施形態内の種々のエレメントに対してもまた類似の修正が考えられる。
【００９４】
新しい情報はまた、データベース内の少なくとも１つの既存のエレメントの削除を含んでいてもよい。１実施形態において、新しいエレメントは生成されず、削除されるエレメントのダーティビットが更新スレッドにより設定されることができる。別の実施形態においては、新しい明示的“削除”エレメントが生成され、ダーティビットが設定され、前のエレメントがデータベースから削除されたことを示すことができる。図４を参照とすると、たとえば、新しい情報は、ダーティビット407を含むことのできるデータレコード410の削除を含んでいてもよい。図６を参照とすると、たとえば、新しい情報は、ダーティビット678を含んでいることのできるドメイン名レコード670の削除を含んでいてもよい。図７および８を参照として説明されたデータベースの実施形態内の種々のエレメントに対しても類似の削除が考えられる。
【００９５】
更新スレッドはダーティビットを複数の新しい各エレメント内に設定することができる（975）。上述したように、ダーティビットは、特定のデータベースレコードが現在のトランザクションと関連付けられていること、およびデータベースの後続的な問合せ再試行が行われなければならないことをサーチスレッドに知らせることができる。したがって、トランザクションの結果得られたデータベースレコードのそれぞれが識別されることができる。図４および図６乃至８を参照とすると、たとえば、更新スレッドはトランザクションの結果得られた各データベースレコード内にダーティビットを設定することができる。ダーティビット408は新しいデータレコード430に対して“１”に設定されることができ、ダーティビット407および406は修正されたデータレコード410および420に対してそれぞれ“１”に設定されることができる。ダーティビット618はまた新しいドメイン名レコード615に対して“１”に設定されることができ、ダーティビット606および668は修正された名称サーバレコード640および660に対してそれぞれ“１”に設定されることができる。ダーティビット707および807は新しいキーデータレコード780および880に対してそれぞれ“１”に設定されることができる。
【００９６】
簡明化のために、図９に示されている最高レベルのフロー図は、フロー図関連シンボルＡにより図１０に拡張される。図１０を参照とすると、削除されるデータベースレコードに対して、更新スレッドはまた適切なデータベースレコード内にダーティビットを設定することができる（1075）。たとえば、ダーティビット407は削除されたデータレコード410に対して“１”に設定され、ダーティビット678は削除されたドメイン名レコード670に対して“１”に設定されることができる。データレコード420および430、ドメイン名レコード615、名称サーバレコード660およびキーデータレコード780および880はデ―タベース内の“新しい”エレメントであるとみなされ、一方修正されたデータレコード410、修正された名称サーバレコード640、削除されたデータレコード410、および削除されたドメイン名レコード670デ―タベース内の“古い”エレメントであるとみなされることができる。これらの例においてデータレコード410は“修正”データレコードおよび“削除”データレコードの両者として使用される。
【００９７】
更新スレッドは、単一の割込みのない動作を使用してポインタをデータベースに書込むことができる（980）。一般に、新しいエレメントは、この新しいエレメントに対するポインタをデータベース内の適切な位置に書込むことによりデータベースに委託される（すなわち、直ちにサーチスレッドまたはプロセスに見えるようになる）ことができる。上述したように、この適切な位置は、単一の動作が適切な長さの単一の記憶命令を含むようにメモリ中において整列されることができる。新しいエレメントはポインタ書込み後にサーチスレッドに見えていても、“設定された”ダーティビットがそのサーチスレッドに対して、新しい各データベースエレメントは現在のトランザクションの一部であること、および後続的な問合せ再試行、またはやり直しログからの再構成が必要であることを知らせる。多数の索引を含むデータベース実施形態に関して、１つの索引は“古い”エレメントへのポインタを含み、一方別の索引は“新しい”エレメントへのポインタを含みむことが可能である。結果的に、ＤＮＳソリューションの実施形態において、たとえば、同じドメイン名または主キーを有する２つのドメイン名レコードがサーチスペース内に同時に、しかし特有の索引に対するそのレコードを含むトランザクションの期間中のみ存在することができる。
【００９８】
図４を参照とすると、新しいデータレコード430に対応した８バイトポインタがハッシュテーブル403に書込まれることができる。図６を参照とすると、新しいドメイン名レコード615に対応した８バイトポインタがハッシュテーブル612に書込まれることができる。これらのハッシュテーブルエントリは、この値を更新するために単一の８バイト記憶命令が使用されることを保証するためにメモリ104中の８バイト境界上に整列されることができることが重要である。図７を参照とすると、新しいサーチノード705に対応した４バイトポインタがサーチノード710内の４バイトの“より大きい”ノードポインタ715に書込まれることができる。このノードポインタ715は、この値を更新するために単一の４バイト記憶命令が使用されることを保証するためにメモリ104中の４バイト境界上に整列されることができることが重要である。図８を参照とすると、複数のサーチノード801はまたツリー上部アドレス899を含でいることができ、このツリー上部アドレス899はメモリ104中の８バイトワード境界上に整列されることができ、また、複数のサーチノード801内の第１のノード（すなわち、たとえば、垂直ノード810）を参照することができる。新しいサーチノード890に対応した８バイトポインタは、単一の記憶命令使用してツリー上部アドレス899に書込まれることができる。これらの実施形態のそれぞれにおいて、新しいデータは、記憶命令の直前ではサーチスレッドに見えておらず、一方、記憶命令の直後にはサーチスレッドに見えている。したがって、単一の割込みのない動作により、新しいデータは、オペレーティングシステムまたはデータベーステーブルロックを使用せずに、データベースに委託されることができる。
【００９９】
図１０を参照とすると、データベースから削除されるデータベースレコードに関して、１実施形態では、既存のレコードへの単数または複数のポインタが単一の割込みのない動作を使用して空白ポインタを書込まれることができる（1080）。空白ポインタは、既存のレコードをデリファレンス（ｄｅｒｅｆｅｒｅｎｃｅ）し、既存のレコードがデータベースから削除されたことを示すことができる。図４を参照とすると、たとえば、データレコード410は、８バイト空白ポインタをハッシュテーブル403内の適切なエントリに重書きすることによりデータベース400から削除されることができる。図６を参照とすると、たとえば、ドメイン名レコード670は、８バイト空白ポインタをハッシュテーブル612内の適切なエントリに重書きすることによりデータベース600から削除されることができる。別の実施形態においては、“削除された”ドメイン名レコード670に対応した新しい“明示的な”削除レコードへの８バイトポインタがハッシュテーブル613に書込まれることができる。この実施形態では、データベースに対する修正、追加および削除は同様にして行われることができる。
【０１００】
更新スレッドは、複数の新しい各エレメント内のダーティビットをクリアすることができる（985）。１実施形態において、このダーティビットは、そのダーティビットを“０”に設定することにより新しい各エレメントからクリアされることができる。たとえば、図４および６乃至８を参照として説明されているように、ダーティビット406および408は、データレコード420および430に対してそれぞれ“０”に設定されることができる。ダーティビット618はドメイン名レコード615に対して“０”に設定されることができ、ダーティビット606および668は名称サーバレコード640および660に対してそれぞれ“０”に設定されることができる。ダーティビット707および807はキーデータレコード780および880に対してそれぞれ“０”に設定されることができる。１実施形態において、ダーティビットは、新しいエレメントのそれぞれに対して任意の順序で“０”に設定されることができる。新しい各エレメント内のダーティビットがクリアされた（985）後、“古い”または既存のデータベースエレメントはデータベース内において、もはや非アクティブである、すなわち、参照されない。１実施形態において、これらのエレメント内のダーティビットは、その後そのダーティビットを“０”に設定することによりクリアされることができ、一方別の実施形態では、ダーティビットは全くクリアされなくてもよい。
【０１０１】
１実施形態において、更新スレッドは、ダーティビットが新しい各エレメントからクリアされた（985）後、修正された既存のデータベースエレメントをデータベースから物理的に削除することができる（990）。メモリ104からのこれらの修正されたエレメントの物理的削除は、進行中のサーチの一貫性を保存するために遅延されることができるという利点がある。たとえば、既存のエレメントが修正され、対応した新しいエレメントがデータベースに委託された後、メモリ104からの既存のエレメントの物理的削除は、新しいエレメントがデータベースに委託される直前に獲得されたある結果を有している既存のサーチスレッドがデータの前の状態を使用し続けることができるように遅延されることができる。更新スレッドは、既存のエレメントが修正される前に始まっていた全てのサーチスレッドが終了した後、既存のエレメントを物理的に削除することができる（990）。
【０１０２】
同様に、既存のエレメントがデータベースから削除された後、メモリ104からの既存のエレメントの物理的削除は、既存のエレメントがデータベースから削除される直前に獲得されたある結果を有している既存のサーチスレッドがデータの前の状態を使用し続けることができるように遅延されることができる。図１０を参照とすると、更新スレッドは、既存のエレメントがデータベースから削除される前に始まっていた全てのサーチスレッドが終了した後に、既存のエレメントを物理的に削除することができる（1090）。
【０１０３】
本発明の実施形態に関連した方法とシステム100の種々のアーキテクチャ特性の相互作用から、潜在的な問題が生じる可能性がある。たとえば、更新スレッドが実行しているプロセッサ（たとえば、プロセッサ102-1、102-2等）は、アウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）命令実行をサポートするためにハードウェアを含むことができる。別の例においては、システム100は、本発明の実施形態に関連付けられた命令のシーケンスを生成することのできる最適化コンパイラを備えることができ、それはプロセッサ（たとえば、プロセッサ102-1、102-2等）の内部アーキテクチャの並列要因を利用するように最適に再配列されている。当業者は、その他多くの問題を容易に許容することができる。アウトオブオーダー命令実行から発生するデータハザードは、たとえば、新しいエレメントの生成（970）とデータベースへのポインタ書込み（980）との間に依存性を生成することによって除去されることができる。
【０１０４】
１実施形態において、これらの依存性は、プロセッサ102-1により実行される命令のシーケンス中に、たとえば、排他的オア（ＸＯＲ）命令のような付加的な演算動作を挿入して、データベースへのポインタ書込み（980）の実行の前に、新しいエレメントの生成（970）に関連付けられた命令の実行を強制的に開始または終了させることにより設定されることができる。たとえば、新しいエレメントに対応し、ダーティビットを含んでいるメモリ104中の位置の内容は、新しいエレメントへのポインタに対応したメモリ104中の位置の内容により排他的オアされることができる。それに続いて、新しいエレメントをデータベースに委託するために新しいエレメントのアドレスがメモリ104に書込まれることができる（980）。
【０１０５】
本発明のいくつかの実施形態がとくに例示され、説明されている。しかしながら、本発明の修正および変形は本発明の技術的範囲を逸脱することなく上記の教示によりカバーされ、添付された請求の範囲内にあることが認識されるであろう。
【図面の簡単な説明】
【０１０６】
【図１】本発明の１実施形態によるシステムのブロック図。
【図２】本発明の１実施形態によるメッセージデータ構造を示す詳細なブロック図。
【図３】本発明の１実施形態によるメッセージ待ち時間データ構造アーキテクチャを示す詳細なブロック図。
【図４】本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図。
【図５】本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図。
【図６】本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図。
【図７】本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図。
【図８】本発明の１実施形態による一般的なデータベースアーキテクチャを示す詳細なブロック図。
【図９】本発明の１実施形態による、データベースをサーチして同時に更新する方法を示す最高レベルのフロー図。
【図１０】本発明の１実施形態による、データベースをサーチして同時に更新する方法を示す最高レベルのフロー図。
【図１】
2005508051.tif 000003
【図２】
2005508051.tif 000004
【図３】
2005508051.tif 000005
【図４】
2005508051.tif 000006
【図５】
2005508051.tif 000007
【図６】
2005508051.tif 000008
【図７】
2005508051.tif 000009
【図８】
2005508051.tif 000010
【図９】
2005508051.tif 000011
【図１０】
2005508051.tif 000012
【国際公開パンフレット】
2005508051.tif 000013
2005508051.tif 000014
2005508051.tif 000015
2005508051.tif 000016
2005508051.tif 000017
2005508051.tif 000018
2005508051.tif 000019
2005508051.tif 000020
2005508051.tif 000021
2005508051.tif 000022
2005508051.tif 000023
2005508051.tif 000024
2005508051.tif 000025
2005508051.tif 000026
2005508051.tif 000027
2005508051.tif 000028
2005508051.tif 000029
2005508051.tif 000030
2005508051.tif 000031
2005508051.tif 000032
2005508051.tif 000033
2005508051.tif 000034
2005508051.tif 000035
2005508051.tif 000036
2005508051.tif 000037
2005508051.tif 000038
2005508051.tif 000039
2005508051.tif 000040
2005508051.tif 000041
2005508051.tif 000042
2005508051.tif 000043
2005508051.tif 000044
2005508051.tif 000045
2005508051.tif 000046
2005508051.tif 000047
2005508051.tif 000048
2005508051.tif 000049
2005508051.tif 000050
2005508051.tif 000051
2005508051.tif 000052
2005508051.tif 000053
2005508051.tif 000054
2005508051.tif 000055
2005508051.tif 000056
2005508051.tif 000057
2005508051.tif 000058
2005508051.tif 000059
2005508051.tif 000060
2005508051.tif 000061
2005508051.tif 000062
2005508051.tif 000063
2005508051.tif 000064
2005508051.tif 000065
2005508051.tif 000066
2005508051.tif 000067
【国際調査報告】
2005508051.tif 000068
2005508051.tif 000069