本発明では、データ(IPパケットのペイロード)を圧縮又は伸張する場合に用いられる情報として辞書又は頻度表の少なくともいずれかを用いるものとして説明する。ただし、本発明はこれに限定されず、データを圧縮又は伸張するために用いられる情報であればどのような情報であってもよい。
実施例1では、通信内容に応じて、複数の辞書の中から最も圧縮率の高い辞書を用いて通信内容を圧縮又は伸張する方法、装置及びシステムについて説明する。
図1は、本発明の実施例1における計算機システムの構成の一例を示す説明図である。
図1に示す計算機システムは、クライアント装置101、102、サーバ103、及び圧縮伸張装置111、121、131から構成される。クライアント装置A101及びクライアント装置B102と、サーバ103との間は広域網104を介した接続される。なお、クライアント装置A101及びクライアント装置B102とサーバ103とは、LAN、SAN等の広域網104以外のネットワークを介して接続されてもよい。
本実施例では、クライアント装置A101は、「192.168.1.0/24」のサブネット112に属し、IPアドレスは「192.168.1.101」である。また、クライアント装置B102は、「192.168.2.0/24」のサブネット122に属し、IPアドレスは「192.168.2.102」である。また、サーバ103は、「192.168.10.0/24」のサブネット132に属し、IPアドレスは「192.168.10.103」である。
クライアント装置A101及びクライアント装置B102は、広域網104を介して、サーバ103との間でデータの送受信を行う。本発明は、送受信されるデータの種別、及び内容等に限定されない。なお、クライアント装置A101、クライアント装置B102、及びサーバ103は、一般的な計算機であって、CPU(図示省略)、メモリ(図示省略)、及びネットワークインタフェース(図示省略)等のハードウェアを備える。
圧縮伸張装置A111、圧縮伸張装置B121、及び圧縮伸張装置C131は、送受信されるデータを圧縮し、また、圧縮されたデータを伸張する。ここで、本発明では、圧縮伸張装置がペアとなるように使用する。例えば、圧縮伸張装置A111及び圧縮伸張装置C131をペアとし、また、圧縮伸張装置B121及び圧縮伸張装置C131をペアとして使用する。
なお、クライアント装置側の圧縮伸張装置とサーバ側の圧縮伸張装置とは、図1に示すようなn対1(図1では2対1)の構成でもよいし、n対nの構成であってもよい。
図2は、本発明の実施例1における圧縮伸張装置の構成例を示すブロック図である。図2では、圧縮伸張装置A111の構成例を示す。なお、圧縮伸張装置B121及び圧縮伸張装置C131も同一の構成である。
圧縮伸張装置A111は、CPU201、主記憶装置202、二次記憶装置203、及び二つのネットワークインタフェース(NIC)204、205を備える。
CPU201は、主記憶装置202に格納されるプログラムを実行する。CPU201がプログラムを実行することによって、圧縮伸張装置A111が備える機能を実現することができる。
主記憶装置202は、CPU201によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、主記憶装置202は、プログラムが一時的にデータを格納するワークエリアを提供する。主記憶装置202は、例えば、DIMM等のメモリ等が考えられる。
本実施例では、主記憶装置202には、圧縮伸張モジュール221、通信先−辞書対応情報222、及び辞書管理情報223が格納される。圧縮伸張モジュール221は、圧縮伸張モジュールプログラム231によって実現されるプログラムモジュールである。通信先−辞書対応情報222の詳細については図3A及び図3Bを用いて後述し、また、辞書管理情報223の詳細については図4を用いて後述する。
CPU201は、圧縮伸張装置A111の起動時に、圧縮伸張モジュールプログラム231を二次記憶装置203から読み出し、主記憶装置202上に当該圧縮伸張モジュールプログラム231を展開する。さらに、CPU201は、展開された圧縮伸張モジュールプログラム231を実行することによって圧縮伸張モジュール221を実現する。圧縮伸張モジュール221は、後述する通信先−辞書対応情報222及び辞書管理情報223を主記憶装置202上に展開する。
二次記憶装置203は、プログラム及び情報を格納する。二次記憶装置203は、例えば、HDD又はSDD等が考えられる。本実施例では、二次記憶装置203には、圧縮伸張モジュールプログラム231が格納される。
NIC1(204)及びNIC2(205)は、他の装置と接続するためのインタフェースである。本実施例では、NIC1(204)は、拠点側の装置、すなわち、クライアント装置A101と接続され、また、NIC2(205)は、広域網104と接続される。
ここで、圧縮伸張モジュール221について説明する。
圧縮伸張モジュール221は、所定の圧縮方式に基づいて、データを圧縮し、また圧縮されたデータを伸張する。本実施例では、LZ78及びLZ78から派生したLZWのような辞書式圧縮方式に基づいて、圧縮処理及び伸張処理が実行されるものとする。
本実施例の圧縮伸張モジュール221は、通信先−辞書対応情報222及び辞書管理情報223に基づいて、NIC1(204)から受信したIPパケットのペイロードを圧縮し、NIC2(205)から圧縮されたペイロードを含むIPパケットを通信先の装置に転送する。また、圧縮伸張モジュール221は、通信先−辞書対応情報222及び辞書管理情報223に基づいて、NIC2(205)から受信したIPパケットのペイロードを伸張し、NIC1(204)から伸張されたペイロードを含むIPパケットを通信先の装置に転送する。
なお、本発明は、LZ78及びLZWのような辞書式圧縮方式に限定されず、送信側の圧縮伸張モジュール221から受信側の圧縮伸張モジュール221に辞書を別途配信しなくとも、受信側の圧縮伸張モジュール221が伸張処理を実行可能な辞書式圧縮方式であれば、どのような圧縮方式を使用してもよい。
図3A及び図3Bは、本発明の実施例1における通信先−辞書対応情報222の一例を示す説明図である。図3Aは圧縮伸張装置C131が保持する通信先−辞書対応情報222を示し、図3Bは圧縮伸張装置A111が保持する通信先−辞書対応情報222を示す。
通信先−辞書対応情報222は、通信先の装置のIPアドレスの範囲と、通信先の装置との間の通信に用いる辞書との対応関係を示す情報を保持する。具体的には、通信先−辞書対応情報222は、ID301、通信先302、装置ID303、辞書名304、辞書数305、現辞書番号306、圧縮率短期平均307、及び圧縮率長期平均308から構成される。
ID301は、通信先−辞書対応情報222の各行を識別するための識別番号である。
通信先302は、共通の辞書を用いてデータを圧縮又は伸張するIPアドレスの範囲である。より具体的には、通信先302は、IPパケットの送信先の装置が所属するネットワークを指定するIPアドレスの範囲を示すものである。例えば、広域網140を介して、LAN等の複数のネットワークが接続されるネットワークシステムの場合、通信先302には、当該ネットワークを示すIPアドレスの範囲が格納される。
図3Aの行332及び333の通信先302には、IPアドレスの範囲としてサブネットマスクが指定される。また、図3Bの行312の通信先302には、IPアドレスの範囲として個々の装置のIPアドレスが指定される。
なお、通信先302に格納される値の表現形式は、共通の辞書を用いてデータを圧縮又は伸張するIPアドレスの範囲を定義できる表現形式であればどのような表現形式であってもよい。また、通信先302に格納される値は、設定ファイルなどの手段によって管理者が設定することを想定しているが、設定方法はどのようなものであってもよい。例えば、通信時に、圧縮伸張装置が互いを自動的に認識し、圧縮伸張装置間で情報を交換することによって、通信先302の値を設定する方法が考えられる。
装置ID303は、通信先302に対応する装置側に配置される圧縮伸張装置のIDである。装置ID303に格納される値は、圧縮伸張装置の起動後に管理者によって入力されることを想定しているが、設定方法はどのようなものであってもよい。例えば、通信時に、圧縮伸張装置が互いを自動的に認識し、圧縮伸張装置間で情報を交換することによって、装置ID303の値を設定する方法が考えられる。
辞書名304は、通信先302に対応する装置との間の通信において使用される辞書の名前である。辞書名304の値は、圧縮伸張モジュール221によって決定される。
辞書数305は、辞書名304に対応する辞書名で定義された辞書の総数である。本実施例では、一つの辞書名に対し、一つ以上の辞書が生成される。
現辞書番号306は、辞書名304に対応する辞書のうち、現在使用している辞書の番号である。
圧縮率短期平均307は、通信先302に対応する装置との間の通信におけるデータの圧縮率の、直近短期間の移動平均を表す。
平均を取る期間の長さは、ユーザ定義の値として設定ファイルなどの手段によって管理者が設定することを想定しているが、メーカー定義の値として適当な値を予め装置に設定してもよい。また、期間の表し方として、ここでは100パケットといったパケット数で表す方法を想定しているが、1分といった時間で表す方法を用いてもよい。また、平均の算出方法として、ここでは単純な相加平均を想定しているが、直近の値の影響を大きくする加重平均、又は相乗平均が用いられてもよい。
圧縮率長期平均308は、通信先302に対応する装置との間の通信におけるデータの圧縮率の、直近長期間の移動平均を表す。
平均を取る期間の長さは、ユーザ定義の値として設定ファイルなどの手段によって管理者が与えることを想定しているが、メーカー定義の値として適当な値を予め装置に設定してもよい。また、期間の表し方として、100,000パケットといったパケット数で表す方法を想定しているが、1,000分といった時間で表す方法でもよい。また、平均の取り方として、ここでは単純な相加平均を想定しているが、直近の値の影響を大きくする加重平均、又は相乗平均が用いられてもよい。
図3Aに示すように、圧縮伸張装置C131の通信先−辞書対応情報222は、クライアント装置A101に対応する行332、及びクライアント装置B102に対応する行333を保持する。一方、図3Bに示すように、圧縮伸張装置A111の通信先−辞書対応情報222は、サーバ103に対応する行312を保持する。
ここで、行332及び行312は、圧縮伸張装置C131及び圧縮伸張装置A111の間の通信に関する行である。ペアとなっている圧縮伸張装置は、同一の複数の辞書を保持し、同一の辞書を用いてIPパケットを圧縮又は伸張する。したがって、行333及び行312の辞書数305、現辞書番号306、圧縮率短期平均307、及び圧縮率長期平均308の値は同一のものとなる。
図4は、本発明の実施例1における辞書管理情報223の一例を示す説明図である。図4は、圧縮伸張装置C131が保持する辞書管理情報223を示す。
辞書管理情報223は、圧縮伸張装置が保持する辞書のデータを管理する情報である。具体的には、辞書管理情報223は、ID401、辞書名402、辞書番号403、及び辞書データ404から構成される。
ID401は、辞書管理情報223の各行を識別するための識別番号である。
辞書名402は、通信先−辞書対応情報222の辞書名304と同一のものである。
辞書番号403は、辞書名402に対応する辞書名で定義された辞書のうち、現在使用されている辞書の識別番号である。
本実施例では、辞書名304に対応する辞書名で定義される辞書には、辞書数305の数だけに識別番号が付与される。そのため、辞書番号403には、現在使用される辞書の識別番号が格納される。例えば、辞書数305が「5」の場合、辞書名304に対応する辞書名で定義される辞書は五つ存在し、それぞれの辞書には「1」から「5」までの番号が付与される。
辞書データ404は、辞書名402及び辞書番号403に対応する辞書の辞書データである。本実施例では、辞書データ404には、圧縮伸張モジュール221が操作する内部表現のデータが格納されているものとする。なお、本発明はこれに限定されず、辞書データ404には、図14に示すような表形式の辞書データが格納されてもよい。また、辞書管理情報223とは別に辞書データが管理されている場合、辞書データ404には、当該辞書データにアクセスするためのポインタを格納してもよい。
なお、辞書管理情報223は高速化のため主記憶装置202上に格納する。そのため、個々の辞書データ404のサイズに上限を設ける。辞書データ404のサイズの上限は設定ファイルなどを用いて管理者によって設定される値であり、例えば「4MB」が設定される。前述した辞書データ404のサイズの上限は一例であって、「4MB」より大きい値、又は小さい値であってもよい。なお、辞書データ404のサイズの上限は、圧縮伸張モジュールプログラム231に予め埋め込む等、その他の手段を用いて設定されてもよい。
圧縮伸張装置C131は、通信先−辞書対応情報222に示すように、圧縮伸張装置A111を通る通信先「192.168.1.0/24」のサブネット112との間の通信において、辞書名が「辞書A」である辞書を五つ保持し、また、圧縮伸張装置B121を通る通信先「192.168.2.0/24」との間の通信において、辞書名が「辞書B」である辞書を六つ保持する。そのため、辞書管理情報223には、辞書Aの五つ分の行4401〜4405、辞書Bの六つ分の行4406〜4411を含む。
圧縮伸張モジュール221は、通信先−辞書対応情報222及び辞書管理情報223を用いて、通信先の装置との通信に使用する辞書を一意に取得することができる。例えば、サーバ103がクライアント装置A101に対してIPパケットを送信する場合、圧縮伸張装置C131の圧縮伸張モジュール221は、以下の手順にしたがって辞書を取得する。
圧縮伸張モジュール221は、IPパケットのIPヘッダから通信先の装置(クライアント装置A101)のIPアドレスを取得する。ここでは、IPアドレス「192.168.1.101」が取得される。
次に、圧縮伸張モジュール221は、通信先−辞書対応情報222から、IPパケットから取得されたIPアドレスが通信先302に含まれる行を取得する。ここでは、行332が取得される。
次に、圧縮伸張モジュール221は、取得された行332の辞書名304及び現辞書番号306の値を取得する。ここでは、辞書名として「辞書A」、現辞書番号として「5」が取得される。
次に、圧縮伸張モジュール221は、辞書管理情報223を参照し、辞書名402及び辞書番号403が、行332の辞書名304及び現辞書番号306から取得された値と一致する行を検索する。さらに、圧縮伸張モジュール221は、検索された行の辞書データ404から辞書データを取得する。ここでは、行4405が検索される。
次に、圧縮伸張モジュール221が実行する処理の詳細について説明する。
図5A及び図5Bは、本発明の実施例1における圧縮伸張モジュール221がIPパケットを受信した場合に実行するIPパケットの転送処理を説明するフローチャートである。
図5Aは、NIC1(204)からIPパケットを受信した場合に実行される、圧縮処理を伴うIPパケットの転送処理を示す。図5Bは、NIC2(205)からIPパケットを受信した場合に実行される、伸張処理を伴うIPパケットの転送処理を示す。
いずれのIPパケットの転送処理も、圧縮処理又は伸張処理の部分以外の処理は同様の処理であるため、比較しながら説明する。
まず、図5Aを用いて圧縮処理を伴うIPパケットの転送処理について説明する。
圧縮伸張モジュール221は、NIC1(204)からIPパケットを受信すると(ステップS511)、当該IPパケットの送信先の装置に対して適用される辞書を取得する。具体的には、ステップS512からステップS514の手順にしたがって辞書が取得される。
まず、圧縮伸張モジュール221は、受信したIPパケットのIPヘッダから宛先IPアドレス(Destination IP Address)を取得する(ステップS512)。
次に、圧縮伸張モジュール221は、通信先−辞書対応情報222から、通信先302にステップS512において取得された宛先IPアドレスが含まれる行を検索し、さらに、当該行の辞書名304及び現辞書番号306の値を取得する(ステップS513)。
圧縮伸張モジュール221は、辞書管理情報223を参照し、辞書名402及び辞書番号403が、ステップS513において取得された辞書名304及び現辞書番号306の値と一致する行を検索し、さらに、当該行の辞書データ404に格納される辞書データを取得して一時領域に格納する(ステップS514)。
圧縮伸張モジュール221は、一時領域に格納される辞書データを用いて、受信したIPパケットのペイロードを圧縮する(ステップS515)。このとき、圧縮伸張モジュール221は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加する。また、圧縮伸張モジュール221は、IPパケットの短期の圧縮率及び長期の圧縮率を算出する。
なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。また、新たに単語を追加することによって辞書のサイズが辞書データ404のサイズの上限を超えてしまう場合にも、新たな単語は追加されない。また、新たに単語を追加することによって辞書のサイズが辞書データ404のサイズの上限を超えてしまう場合の別の対処法として、最も使われていない単語を削除する方法も知られている。
圧縮伸張モジュール221は、圧縮されたペイロードを含むIPパケットをNIC2(205)から、宛先IPアドレスに対応する装置に送信する(ステップS516)。
その後、圧縮伸張モジュール221は、辞書管理情報223の更新処理を実行し(ステップS517)、処理を終了する。
なお、辞書管理情報223の更新処理の詳細は、図8を用いて後述するが、ステップS515において更新された辞書データは、辞書管理情報223の更新処理において一時領域から辞書管理情報223に書き戻される。
次に、図7Bを用いて伸張処理を伴うIPパケットの転送処理について説明する。
圧縮伸張モジュール221は、NIC2(205)からIPパケットを受信すると(ステップS521)、当該IPパケットの送信先の装置に対して適用される辞書を取得する。具体的には、ステップS523からステップS524の手順にしたがって辞書が取得される。
まず、圧縮伸張モジュール221は、受信したIPパケットのIPヘッダから送信元IPアドレス(Source IP Address)を取得する(ステップS522)。
次に、圧縮伸張モジュール221は、ステップS513と同様に、通信先−辞書対応情報222から、通信先302にステップS522において取得された送信元IPアドレスが含まれる行を検索し、さらに、当該行の辞書名304及び現辞書番号306の値を取得する(ステップS523)。
圧縮伸張モジュール221は、ステップS514と同様に、辞書管理情報223を参照し、辞書名402及び辞書番号403が、ステップS523において取得された辞書名304及び現辞書番号306の値と一致する行を検索し、さらに、当該行から辞書データ404に格納される辞書データを取得して一時領域に格納する(ステップS524)。
圧縮伸張モジュール221は、一時領域に格納される辞書データを用いてIPパケットのペイロードを伸張する(ステップS525)。このとき、圧縮伸張モジュール221は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加する。また、圧縮伸張モジュール221は、IPパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
圧縮伸張モジュール221は、伸張されたペイロードを含むIPパケットをNIC1(204)から、宛先IPアドレスに対応する装置に送信する(ステップS526)。
その後、圧縮伸張モジュール221は、辞書管理情報223の更新処理を実行し(ステップS527)、処理を終了する。
なお、辞書管理情報223の更新処理の詳細は、図8を用いて後述するが、ステップS525において更新された辞書データは、辞書管理情報223の更新処理において一時領域から辞書管理情報223に書き戻される。
図6は、本発明の実施例1における圧縮伸張モジュール221が実行する辞書管理情報223の更新処理を説明するフローチャートである。
圧縮伸張モジュール221は、辞書管理情報223の更新処理を開始すると(ステップS601)、サイズ要件が成立し、かつ、圧縮率要件が成立するか否かを判定する。(ステップS602)。ここで、ステップS602の判定処理について説明する。
サイズ要件は、辞書のサイズが第一の閾値以上であることとする。本実施例では、辞書のサイズは、辞書に登録される単語数を想定しているが、辞書のバイト数を用いてもよい。
第一の閾値は、設定ファイルなどを用いて管理者によって設定される値であり、例えば、単語数として「30,000」が設定される。前述した第一の閾値は一例であって、「30,000」より大きい値、又は小さい値であってもよい。なお、第一の閾値は、圧縮伸張モジュールプログラム231に予め埋め込む等、その他の手段を用いて設定されてもよい。
また、圧縮率要件は、圧縮率の短期平均及び圧縮率の長期平均の比率(圧縮率の長期平均に対する圧縮率の短期平均の比率)が第二の閾値以下であることとする。すなわち、圧縮率要件は、現在の辞書を用いた圧縮後のデータ又は現在の辞書を用いて伸張される前のデータが十分小さいサイズに圧縮されたデータであるか否かを判定するものである。なお、圧縮率の短期平均及び圧縮率の長期平均は、通信先−辞書対応情報222の圧縮率短期平均307及び圧縮率長期平均308から取得可能な値である。
第二の閾値は、設定ファイルなどを用いて管理者によって設定される値であり、例えば、比率として「0.4(40%)」が設定される。前述した第二の閾値は一例であって、「0.4」より大きい値、又は小さい値であってもよい。なお、第二の閾値は、圧縮伸張モジュールプログラム231に予め埋め込む等、その他の手段を用いて設定されてもよい。
ステップS602の判定処理は、現在の通信内容に対して適切な辞書が使用されているか否かを判定するための処理である。具体的には、以下のような判定がなされる。
サイズ要件が成立し、かつ、圧縮率要件が成立する場合、現在の通信内容に対して適切な辞書が使用されていないことを示す。したがって、この場合、圧縮伸張モジュール221は、他の辞書を使用し、又は新たな辞書を生成する必要がある。
サイズ要件は成立するが、圧縮率要件が成立しない場合、現在の通信内容に対して適切な辞書が使用されていることを示す。
サイズ要件が成立しない場合、新しく生成された辞書の単語数が十分でないことを示す。後述するステップS631において新しい辞書が生成された直後は、当該辞書の単語数が十分ではないため圧縮率が上がらない。したがって、新しく生成された辞書の単語数が増えるまで、辞書の変更及び新規辞書の生成を行わないようにするためにサイズ要件が成立するか否かが判定される。
以上が、ステップS602の判定処理の説明である。
サイズ要件又は圧縮率要件の少なくともいずれかが成立していないと判定された場合、圧縮伸張モジュール221は、辞書管理情報223の辞書データ404を更新する(ステップS611)。これは、現在の通信内容に対して適切な辞書データが使用されていること、又は新たな辞書データが生成された直後であることを示す。そのため、圧縮伸張モジュール221は、現在の辞書を更新し、当該辞書の使用を継続する。
具体的には、圧縮伸張モジュール221は、ステップS515又はステップS525において新たに単語が追加された最新の辞書データを、ステップS514又はステップS524において辞書管理情報223から検索された行の辞書データ404に格納する。
圧縮伸張モジュール221は、通信先−辞書対応情報222の圧縮率短期平均307を更新し(ステップS612)、また、通信先−辞書対応情報222の圧縮率長期平均308を更新し(ステップS613)、処理を終了する。具体的には、以下のような処理が実行される。
圧縮伸張モジュール221は、ステップS513又はステップS523において、通信先−辞書対応情報222から取得された行の圧縮率短期平均307に、ステップS515又はステップS525において算出されたIPパケットの短期の圧縮率を格納する。
また、圧縮伸張モジュール221は、ステップS513又はステップS523において、通信先−辞書対応情報222から取得された行の圧縮率長期平均308に、ステップS515又はステップS525において算出されたIPパケットの長期の圧縮率を格納する。
以上がステップS612及びステップS613の処理の説明である。
ステップS602において、サイズ要件が成立し、かつ、圧縮率要件が成立すると判定された場合、圧縮伸張モジュール221は、辞書管理情報223から現在使用している辞書データとは異なる辞書データを取得し、一時領域に当該辞書データを格納する(ステップS621)。すなわち、圧縮伸張モジュール221は、現在使用されていない辞書を取得する。
具体的には、圧縮伸張モジュール221は、辞書管理情報223から辞書名402の値がステップS513又はステップS523において取得された辞書名に一致し、かつ辞書番号403の値がステップS513又はステップS523において取得された現辞書番号とは異なる行を全て抽出する。さらに、圧縮伸張モジュール221は、抽出された行の辞書データ404から辞書データを取得し、一時領域に取得された辞書データを格納する。
圧縮伸張モジュール221は、ステップS621において取得された辞書データを用いて、IPパケットのペイロードの圧縮率を算出する(ステップS622)。
具体的には、圧縮伸張モジュール221は、取得された辞書データを用いて、ステップS511において受信したIPパケット又はステップS526において送信されたIPパケットのペイロードを圧縮する。これによって、圧縮伸張モジュール221は、当該IPパケットのペイロードの圧縮率を算出できる。
圧縮伸張モジュール221は、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在するか否かを判定する(ステップS623)。すなわち、他の辞書を用いた圧縮後のデータが十分小さいサイズに圧縮されたデータであるか否かが判定される。
具体的には、圧縮伸張モジュール221は、ステップS622において算出されたペイロードの圧縮率と、ステップS513又はステップS523において取得された行の圧縮率長期平均308の値とを比較し、算出されたペイロードの圧縮率が圧縮率長期平均308の値より大きいか否かを判定する。
他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在しないと判定された場合、圧縮伸張モジュール221は、辞書管理情報223に新たな辞書データに対応する行を追加する(ステップS631)。
このとき、圧縮伸張モジュール221は、追加された行のID401に任意の値を設定し、辞書名402にステップS513又はステップS523において取得された辞書名を設定し、辞書番号403にステップS513又はステップS523において取得された行の辞書数305の値に「1」を加算した値を設定する。なお、追加された行の辞書データ404は空の辞書データとする。
圧縮伸張モジュール221は、通信先−辞書対応情報222の辞書数305及び現辞書番号306を更新し(ステップS632)、さらに、圧縮率短期平均307を「0%」に更新し(ステップS633)、その後、ステップS613に進む。
具体的には、圧縮伸張モジュール221は、ステップS513又はステップS523において取得された行の辞書数305の値に「1」を加算する。また、圧縮伸張モジュール221は、当該行の現辞書番号306の値に、更新された辞書数305の値を格納する。
ステップS623において、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書を用いたペイロードの圧縮率長期平均より高い辞書データが存在すると判定された場合、圧縮伸張モジュール221は、通信先−辞書対応情報222の現辞書番号306を更新し(ステップS641)、さらに、圧縮率短期平均307を更新し(ステップS642)、その後、ステップS613に進む。これは、過去に似たような通信内容のIPパケットが送信されたことを示す。この場合、他の辞書データに切り替えて通信を行うこととなる。
具体的には、圧縮伸張モジュール221は、ステップS513又はステップS523において取得された行の現辞書番号306の値を、現在使用している辞書を用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データの番号に更新する。また、圧縮伸張モジュール221は、当該行の圧縮率短期平均307の値を、ステップS515又はステップS525において算出されたIPパケットの圧縮率に更新する。
なお、ステップS622において、現在使用している辞書を用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データが複数存在する場合、圧縮伸張モジュール221は、最も圧縮率の高い辞書データを選択するものとする。
なお、実施例1では、圧縮伸張装置間を接続するネットワーク構成について説明したが本発明はこれに限定されない。例えば、クライアント装置側に圧縮機能のみを備えた圧縮装置を接続し、サーバ側に伸張機能のみを備えた伸張装置を接続するネットワーク構成であってもよい。
なお、実施例1では、クライアント装置及びサーバと別の装置として圧縮伸張装置を記載したが本発明はこれに限定されない。例えば、クライアント装置及びサーバが、圧縮伸張装置が備える機能を有してもよい。
なお、実施例1では、圧縮率短期平均及び圧縮率長期平均を用いて辞書の切り替え、又は辞書の生成を行うか否かを判定していたが本発明はこれに限定されない。例えば、圧縮率短期平均の絶対値が第二の閾値以下の場合に圧縮率要件が成立すると判定してもよい。
以上で説明したように、実施例1によれば、圧縮伸張装置は、一つの通信先に対して、IPパケットを圧縮又は伸張するための情報である複数の辞書を保持し、通信内容に応じて圧縮率が高い辞書を用いて通信内容を圧縮又は伸張することができる。
これによって、各通信先の装置との間で送受信されるデータの圧縮率を高めることができる。また、通信内容に応じて、動的に辞書を切り替え、又は、新たに辞書を生成することによって、最適な圧縮率を実現可能な通信が可能となる。
さらに、小さいサイズの辞書を用いるため、全ての辞書を主記憶装置202上に格納することができる。したがって、検索時のI/O速度を高速化することができる。
実施例2では、実施例1の圧縮伸張装置が使用する辞書式圧縮にエントロピー符号を組合せることによって、さらに圧縮率を高めている点が異なる。以下、実施例1との差異を中心に実施例2について説明する。
実施例2の計算機システムの構成は、実施例1と同一であるため説明を省略する。ただし、実施例2では、圧縮伸張装置A111、圧縮伸張装置B121、及び圧縮伸張装置C131の構成が異なる。
以下、図7から図10を用いて、実施例2の圧縮伸張装置の構成について説明する。なお、実施例2の圧縮伸張装置は、実施例1の圧縮伸張装置にエントロピー符号に関する機能が追加されている点が異なる。したがって、実施例2の圧縮伸張装置について、実施例1の圧縮伸張装置との差異を中心に説明する。
図7は、本発明の実施例2における圧縮伸張装置の構成例を示すブロック図である。図7では、圧縮伸張装置A111の構成例を示す。なお、圧縮伸張装置B121及び圧縮伸張装置C131も同一の構成である。
圧縮伸張装置A111のハードウェア構成は実施例1と同一であるため説明を省略する。
実施例2の二次記憶装置203には、辞書エントロピー圧縮伸張モジュール721を実現する辞書エントロピー圧縮伸張モジュールプログラム731が格納される。
CPU201は、圧縮伸張装置A111の起動時に、辞書エントロピー圧縮伸張モジュールプログラム731を二次記憶装置203から読み出し、主記憶装置202上に展開する。さらに、CPU201は、展開された辞書エントロピー圧縮伸張モジュールプログラム731を実行することによって辞書エントロピー圧縮伸張モジュール721を実現する。辞書エントロピー圧縮伸張モジュール721は、後述する通信先−辞書頻度表対応情報722及び辞書頻度表管理情報723を主記憶装置202上に展開する。
辞書エントロピー圧縮伸張モジュール721は、後述する通信先−辞書頻度表対応情報722及び辞書頻度表管理情報723に基づいて、NIC1(204)から受信したIPパケットのペイロードを圧縮し、NIC2(205)から圧縮されたペイロードを含むIPパケットを通信先の装置に転送する。また、圧縮伸張モジュール221は、通信先−辞書頻度表対応情報722及び辞書頻度表管理情報723に基づいて、NIC2(205)から受信したIPパケットのペイロードを伸張し、NIC1(204)から伸張されたペイロードを含むIPパケットを通信先の装置に転送する。
図8は、本発明の実施例2における通信先−辞書頻度表対応情報722の一例を示す説明図である。図8は圧縮伸張装置C131が保持する通信先−辞書頻度表対応情報722を示す。
通信先−辞書頻度表対応情報722は、実施例1の通信先−辞書対応情報222を、通信先の装置と、辞書及び頻度表との対応を管理するように変更したものである。具体的には、通信先−辞書対応情報222の辞書名304、辞書数305、及び現辞書番号306が、辞書頻度表名804、辞書頻度表数805、及び現辞書頻度表番号806に変更される。その他の情報列は実施例1と同一のものである。
なお、実施例2では、辞書の切り替えと同時に、頻度表も切り替えられるため、辞書及び頻度表を同一の行で管理する。しかし、辞書及び頻度表は異なるタイミングで切り替えることも考えられる。この場合、通信先−辞書頻度表対応情報722の情報列には、辞書名及び頻度表名、並びにそれらの番号を管理する辞書数、頻度表数、現辞書番号、及び現頻度表番号が含まれる。
図9は、本発明の実施例2における辞書頻度表管理情報723の一例を示す説明図である。図9は、圧縮伸張装置C131が保持する辞書頻度表管理情報723を示す。
辞書頻度表管理情報723は、頻度表を管理するために、実施例1の辞書管理情報223に頻度表データ905が追加された構造になっている。
また、辞書頻度表管理情報723では、実施例1の辞書管理情報223の辞書名402、及び辞書番号403が辞書頻度表名902及び辞書頻度表番号903に変更される。その他の情報列は実施例1と同一のものである。
圧縮伸張装置C113は、通信先−辞書頻度表対応情報722に示すように、圧縮伸張装置A111を通る通信先「192.168.1.0/24」のサブネット112との間の通信において、辞書頻度表名が「辞書頻度表A」である辞書頻度表管理情報を構成する辞書データ及び頻度表データを五つ保持し、また、圧縮伸張装置B121を通る通信先「192.168.2.0/24」のサブネット122との間の通信において、辞書頻度表名が「辞書頻度表B」である辞書頻度表管理情報を構成する辞書データ及び頻度表データを六つ保持する。そのため、辞書頻度表管理情報723には、辞書頻度表Aの五つ分の行9401〜9405、辞書頻度表Bの六つ分の行9406〜9411を含む。
辞書エントロピー圧縮伸張モジュール721は、通信先−辞書頻度表対応情報722及び辞書頻度表管理情報723を用いて、通信先の装置との通信に使用する辞書及び頻度表を一意に取得することができる。例えば、サーバ103がクライアント装置A101に対してIPパケットを送信する場合、圧縮伸張装置C131の辞書エントロピー圧縮伸張モジュール721は、以下の手順にしたがって辞書データ及び頻度表データを取得する。
辞書エントロピー圧縮伸張モジュール721は、IPパケットのIPヘッダから通信先の装置(クライアント装置A101)のIPアドレスを取得する。ここでは、IPアドレス「192.168.1.101」が取得される。
次に、辞書エントロピー圧縮伸張モジュール721は、通信先‐辞書頻度表対応情報722から、取得されたIPアドレスが通信先302に含まれる行を取得する。ここでは、行832が取得される。
次に、辞書エントロピー圧縮伸張モジュール721は、取得された行832の辞書頻度表名804及び現辞書頻度表番号806の値を取得する。ここでは、辞書頻度表名として「辞書頻度表A」、現辞書頻度表番号として「5」が取得される。
次に、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723を参照し、辞書頻度表名902及び辞書頻度表番号903が、行832から取得された辞書頻度表名804及び現辞書頻度表番号806の値と一致する行を検索する。ここでは、行9405が検索される。
さらに、辞書エントロピー圧縮伸張モジュール721は、検索された行9405の辞書データ404及び頻度表データ905から辞書データ及び頻度表データを取得する。
次に、辞書エントロピー圧縮伸張モジュール721が実行する処理の詳細について説明する。
図10A及び図10Bは、本発明の実施例2における辞書エントロピー圧縮伸張モジュール721がIPパケットを受信した場合に実行するIPパケットの転送処理を説明するフローチャートである。
図10Aは、NIC1(204)からIPパケットを受信した場合に実行される、圧縮処理を伴うIPパケットの転送処理を示す。図10Bは、NIC2(205)からIPパケットを受信した場合に実行される、伸張処理を伴うIPパケットの転送処理を示す。
なお、辞書エントロピー圧縮伸張モジュール721が実行するIPパケットの転送処理は、圧縮伸張モジュール221が実行するIPパケットの転送処理と基本的には同一の手順となるため、以下の説明では差異を中心に説明する。
辞書エントロピー圧縮伸張モジュール721は、NIC1(204)からIPパケットを受信すると(ステップS511)、当該IPパケットのIPヘッダから宛先IPアドレス(Destination IP Address)を取得する(ステップS512)。
次に、辞書エントロピー圧縮伸張モジュール721は、通信先−辞書頻度表対応情報722から、通信先302にステップS512において取得された宛先IPアドレスが含まれる行を検索し、さらに、当該行の辞書頻度表名804と現辞書頻度表番号806の値を取得する(ステップS1013)。
辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723を参照し、辞書頻度表名902及び辞書頻度表番号903が、ステップS1013において取得された辞書頻度表名804及び現辞書頻度表番号806の値と一致する行を検索し、さらに、当該行から辞書データ404及び頻度表データ905に格納される辞書データ及び頻度表データを取得して一時領域に格納する(ステップS1014)。
辞書エントロピー圧縮伸張モジュール721は、一時領域に格納される辞書データ及び頻度表データを用いて、受信したIPパケットのペイロードを圧縮する(ステップS1015)。このとき、辞書エントロピー圧縮伸張モジュール721は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語が追加し、また頻度表データの出現頻度を更新する。また、辞書エントロピー圧縮伸張モジュール721は、IPパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
辞書エントロピー圧縮伸張モジュール721は、圧縮されたペイロードを含むIPパケットをNIC2(205)から、宛先IPアドレスに対応する装置に送信する(ステップS516)。
その後、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723の更新処理を実行し(ステップS1017)、処理を終了する。
なお、辞書頻度表管理情報723の更新処理の詳細は図11を用いて後述するが、ステップS1015において更新された辞書データ及び頻度表データは、辞書頻度表管理情報723の更新処理において一時領域から辞書頻度表管理情報723に書き戻される。
次に、図10Bを用いて伸張処理を伴うIPパケットの転送処理について説明する。
辞書エントロピー圧縮伸張モジュール721は、NIC2(205)からIPパケットを受信すると(ステップS521)、受信したIPパケットのIPヘッダから送信元IPアドレス(Source IP Address)を取得する(ステップS522)。
次に、辞書エントロピー圧縮伸張モジュール721は、ステップS513と同様に、通信先−辞書頻度表対応情報722から、通信先302にステップS522において取得された送信元IPアドレスが含まれる行を検索し、さらに、当該行の辞書頻度表名804及び現辞書頻度表番号806の値を取得する(ステップS1023)。
辞書エントロピー圧縮伸張モジュール721は、ステップS1014と同様に、辞書頻度表管理情報723を参照し、辞書頻度表名902及び辞書頻度表番号903が、ステップS1023において取得された辞書頻度表名804及び現辞書頻度表番号806の値と一致する行を検索し、さらに、当該行から辞書データ404及び頻度表データ905に格納される辞書データ及び頻度表データを取得して一時領域に格納する(ステップS1024)。
辞書エントロピー圧縮伸張モジュール721は、ステップS1015と同様に、一時領域に格納される辞書データ及び頻度表データを用いて、受信したIPパケットのペイロードを伸張する(ステップS1025)。このとき、辞書エントロピー圧縮伸張モジュール721は、送信される通信内容に基づいて、一時領域に格納される辞書データに新しい単語を追加し、頻度表データの出現頻度を更新する。また、辞書エントロピー圧縮伸張モジュール721は、IPパケットの短期の圧縮率及び長期の圧縮率を算出する。なお、新たな単語が検出されない場合、辞書データには新たな単語は追加されない。
辞書エントロピー圧縮伸張モジュール721は、伸張されたペイロードを含むIPパケットをNIC1(204)から、宛先IPアドレスに対応する装置に送信する(ステップS526)。
その後、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723の更新処理を実行し(ステップS1027)、処理を終了する。
なお、辞書頻度表管理情報723の更新処理は、図11を用いて後述するが、ステップS1025において更新された辞書データ及び頻度表データは、辞書頻度表管理情報723の更新処理において一時領域から辞書頻度表管理情報723に書き戻される。
図11は、本発明の実施例2における辞書エントロピー圧縮伸張モジュール721が実行する辞書頻度表管理情報723の更新処理を説明するフローチャートである。
なお、辞書エントロピー圧縮伸張モジュール721が実行する辞書頻度表管理情報723の更新処理は、圧縮伸張モジュール221が実行する辞書管理情報223の更新処理と基本的には同一の手順となるため、以下の説明では差異を中心に説明する。
辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723の更新処理を開始すると(ステップS1101)、サイズ要件が成立し、かつ、圧縮率要件が成立するか否かを判定する(ステップS602)。
サイズ要件又は圧縮率要件の少なくともいずれかが成立していないと判定された場合、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723の辞書データ404及び頻度表データ905を更新する(ステップS1111)。これは、現在の通信内容に対して適切な辞書データ及び頻度表データが使用されていること、又は新たな辞書データ及び頻度表データが生成された直後であることを示す。そのため、辞書エントロピー圧縮伸張モジュール721は、現在の辞書データ及び頻度表データの使用を継続する。
具体的には、辞書エントロピー圧縮伸張モジュール721は、ステップS1015又はステップS1025において新たに単語が追加された辞書データ及び頻度が更新された頻度表データを、ステップS1014又はステップS1024において辞書頻度表管理情報723から検索された行の辞書データ404及び頻度表データ905に格納する。
辞書エントロピー圧縮伸張モジュール721は、通信先−辞書頻度表対応情報722の圧縮率短期平均307を更新し(ステップS1112)、また、通信先−辞書頻度表対応情報722の圧縮率長期平均308を更新し(ステップS1113)、処理を終了する。具体的には、以下のような処理が実行される。
辞書エントロピー圧縮伸張モジュール721は、ステップS1013又はステップS1023において、通信先−辞書頻度表対応情報722から取得された行の圧縮率短期平均307に、ステップS1015又はステップS1025において算出されたIPパケットの短期の圧縮率を格納する。
また、辞書エントロピー圧縮伸張モジュール721は、ステップS1013又はステップS1023において、通信先−辞書頻度表対応情報722から取得された行の圧縮率長期平均308に、ステップS1015又はステップS1025において算出されたIPパケットの長期の圧縮率を格納する。
以上がステップS1112及びステップS1113の処理の説明である。
ステップS602において、サイズ要件が成立し、かつ、圧縮率要件が成立すると判定された場合、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723から、現在使用している辞書データとは異なる辞書データ、及び、現在使用している頻度表データとは異なる頻度表データを取得し、一時領域に当該辞書データ及び頻度表データを格納する(ステップS1121)。すなわち、辞書エントロピー圧縮伸張モジュール721は、現在使用されていない辞書データ及び頻度表データを取得する。
具体的には、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723から辞書頻度表名902の値がステップS1013又はステップS1023において取得された辞書頻度表名に一致し、かつ、辞書頻度表番号903の値がステップS1013又はステップS1023において取得された現辞書頻度表番号とは異なる行を全て抽出する。さらに、辞書エントロピー圧縮伸張モジュール721は、抽出された行の辞書データ404及び頻度表データ905から辞書データ及び頻度表データを取得し、一時領域に格納する。
辞書エントロピー圧縮伸張モジュール721は、ステップS1121において取得された辞書データ及び頻度表データを用いて、IPパケットのペイロードの圧縮率を算出する(ステップS1122)。
具体的には、辞書エントロピー圧縮伸張モジュール721は、取得された辞書データ及び頻度表データを用いて、ステップS511において受信したIPパケット又はステップS526において送信されたIPパケットのペイロードを圧縮する。これによって、辞書エントロピー圧縮伸張モジュール721は、当該IPパケットのペイロードの圧縮率を算出できる。
辞書エントロピー圧縮伸張モジュール721は、ステップS1121において取得された辞書データ及び頻度表データを用いて圧縮されたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在するか否かを判定する(ステップS1123)。
具体的には、辞書エントロピー圧縮伸張モジュール721は、ステップS1122において算出されたペイロードの圧縮率と、ステップS1013又はステップS1023において取得された行の圧縮率長期平均308の値と比較し、算出されたペイロードの圧縮率が圧縮率長期平均308の値より大きいか否かを判定する。
他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在しないと判定された場合、辞書エントロピー圧縮伸張モジュール721は、辞書頻度表管理情報723に新たな辞書データ及び頻度表データに対応する行を追加する(ステップS1131)。
このとき、辞書エントロピー圧縮伸張モジュール721は、追加された行のID401に任意の値を格納し、辞書頻度表名902にステップS1013又はステップS1023において取得された辞書頻度表名を格納し、辞書頻度表番号903にステップS1013又はステップS1023において取得された行の辞書頻度表数805の値に「1」を加算した値を格納する。なお、追加された行の辞書データ404には空の辞書データが格納され、頻度表データ905には空の頻度表データが格納される。
辞書エントロピー圧縮伸張モジュール721は、通信先−辞書頻度表対応情報722の辞書頻度表数805及び現辞書頻度表番号806を更新し(ステップS1132)、さらに、圧縮率短期平均307を「0%」に更新し(ステップS1133)、その後、ステップS1113に進む。
具体的には、辞書エントロピー圧縮伸張モジュール721は、ステップS1013又はステップS1023において取得された行の辞書頻度表数805の値に「1」を加算する。また、辞書エントロピー圧縮伸張モジュール721は、当該行の現辞書頻度表番号806に、更新された辞書頻度表数805の値を格納する。
ステップS1123において、他の辞書データを用いたペイロードの圧縮率が、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より高い辞書データ及び頻度表データが存在すると判定された場合、辞書エントロピー圧縮伸張モジュール721は、通信先−辞書頻度表対応情報722の現辞書頻度表番号806を更新し(ステップS1141)、さらに、圧縮率短期平均307を更新し(ステップS1142)、その後、ステップS613に進む。これは、過去に似たような通信内容のIPパケットが送信されたことを示す。この場合、他の辞書データ及び頻度表データに切り替えて通信を行うこととなる。
具体的には、辞書エントロピー圧縮伸張モジュール721は、ステップS1013又はステップS1023において取得された行の現辞書頻度表番号806の値を、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データ及び頻度表データに対応する辞書頻度表番号に更新する。また、辞書エントロピー圧縮伸張モジュール721は、当該行の圧縮率短期平均307の値を、ステップS1015又はステップS1025において算出されたIPパケットの圧縮率に更新する。
なお、ステップS1122において、現在使用している辞書データ及び頻度表データを用いたペイロードの圧縮率長期平均より大きい圧縮率の辞書データ及び頻度表データが複数存在する場合、辞書エントロピー圧縮伸張モジュール721は、最も圧縮率が高い辞書データ及び頻度表データを選択する。
なお、実施例2では、辞書及び頻度表を用いてIPパケットを圧縮又は伸張していたが、頻度表のみを用いてIPパケットを圧縮又は伸張してもよい。すなわち、実施例1における辞書の代わりに頻度表を用いた実施例であってもよい。
以上で説明したように、実施例2によれば、圧縮伸張装置は、通信先に対して複数の辞書及び頻度表を保持し、通信内容に応じて圧縮率が高い辞書及び頻度表を用いて通信内容を圧縮することができる。
これによって、各通信先に送受信されるデータの圧縮率を高めることができる。また、通信内容に応じて、動的に辞書及び頻度表を切り替え、又は、新たに辞書及び頻度表を生成することによって、最適な圧縮率を実現可能な通信を実現することができる。
さらに、辞書はIPパケットに含まれる通信内容(ペイロード)から生成されるものであるため小さいサイズに辞書となり、全ての辞書を主記憶装置202上に格納することができる。したがって、検索時のI/O速度を高速化することができる。
実施例3では、圧縮伸張装置のメモリの記憶容量には上限があるため、運用中に必要性の低い辞書を削除することによって、辞書を格納する記憶容量を確保する点が実施例1と異なる。以下、実施例1との差異を中心に実施例3について説明する。なお、本実施例は実施例1のシステムを拡張したものだが、実施例2のシステムを同様に拡張することによって辞書及び頻度表を格納する記憶容量に上限がある場合にも対応可能である。
辞書を格納する記憶容量に上限がある場合、圧縮伸張モジュール221は、辞書管理情報223の更新処理において、記憶容量の不足から新しい辞書が生成できない可能性又は新たな辞書を格納できない可能性がある。
そのため、圧縮伸張モジュール221は、適切なタイミングで、辞書管理情報223の辞書名402に対応する辞書毎に、必要性の低い辞書を削除する。
なお、辞書を削除するタイミングとしては、例えば、1日単位等、周期的なタイミングが考えられる。また、辞書を削除するタイミングの他の例としては、通信先−辞書対応情報222に新たな行が追加されたタイミング、新しい辞書が生成されるタイミングなどが考えられる。
また、本実施例では、非特許文献5に開示されたキャッシュメモリのページ置換アルゴリズムであるLRU−k方式を用いて必要性の低い辞書を特定する。なお、本実施例では簡単のためLRU−kのパラメータkを「k=1」として説明するが、kは「2」以上であってもよい。また、LRU以外に、FIFO及び2Q等の他のページ置換アルゴリズムを用いることも可能である。
図12は、本発明の実施例3における辞書管理情報223の一例を示す説明図である。図12に示す辞書管理情報223は、前述のようにパラメータkが1のLRU−1に対応したものである。
実施例3の辞書管理情報223は、新たに、最終アクセス時刻1205の情報列が追加される。最終アクセス時刻1205には、辞書データが更新された時刻を格納する。例えば、ステップS611において辞書データが更新された時刻、ステップS631において、辞書管理情報223に新たな辞書データに対応する行が追加された時刻が格納される。
なお、最終アクセス時刻1205の他に、最終アクセス時刻の一つ前のアクセス時刻を管理する情報列を追加することによって、LRU−2に対応した辞書管理情報223になる。また、最終アクセス時刻1205の代わりに、仮想的にキューを想定し、当該キュー内での順序を表す番号を管理する情報列を追加することによってFIFOに対応した辞書管理情報223になる。さらに、仮想的なキューを2本又は3本想定し、それらの中での順序を表す番号を管理する列も2つ又は3つ追加することによって2Qに対応した辞書管理情報223になる。
図13A及び図13Bは、本発明の実施例3における辞書の削除処理を説明するフローチャートである。
以下の説明では、LRU−1に対応した辞書管理情報223の辞書名402の値を「a」と指定するものとする。なお、辞書名402の値「a」には、通信先−辞書対応情報222の辞書名304の値のいずれか一つが代入される。そのため、通信先−辞書対応情報222から辞書名304の値の一覧を取得し、それらに対して繰り返し、辞書名が「a」である辞書の削除処理を実行することによって、各通信先の辞書から必要性の低い辞書が削除される。
圧縮伸張モジュール221は、辞書の削除処理を開始すると(ステップS1301)、LRU−1に対応した辞書管理情報223から辞書名402が「a」である行を取得する(ステップS1302)。例えば、「a=辞書A」である行が取得される。
圧縮伸張モジュール221は、取得された行の最終アクセス時刻1205を参照し、最終アクセス時刻1205が最も古い行を辞書管理情報223から削除する(ステップS1303)。ここで、FIFO又は2Q等、LRU−1以外の方式を用いて必要性の低い辞書を特定する場合には、各方式に対応した処理内容に変更される。
圧縮伸張モジュール221は、通信先−辞書対応情報222の辞書名304が「a」である行の辞書数305及び現辞書番号306を更新する(ステップS1304)。
具体的には、圧縮伸張モジュール221は、辞書名304が「a」である行の辞書数305の値を「1」減算する。当該行の現辞書番号306の値については、削除された辞書が現辞書番号306の値に一致する辞書である場合、現辞書番号306の値が「1」減算され、削除された辞書が現辞書番号306の値に一致しない辞書である場合、現辞書番号306は特に更新されない。
次に、圧縮伸張モジュール221は、削除された辞書を保持する対向装置を特定する(ステップS1305)。ここで、対向装置とは、削除された辞書を用いて通信を行う送信先の圧縮伸張装置のことを示す。
具体的には、圧縮伸張モジュール221は、通信先−辞書対応情報222の辞書名304が「a」である行を参照し、当該行の装置ID303から対向装置の装置IDを取得する。
圧縮伸張モジュール221は、対向装置に対して、辞書管理情報223から削除された行の情報を含むメッセージを送信する(ステップS1306)。削除された行の情報としては、辞書名402及び辞書番号403がペアとなった(a、辞書番号)のような情報が考えられる。
メッセージを受信した対向装置の圧縮伸張モジュール221は、辞書の削除処理を開始する(ステップS1311)。
圧縮伸張モジュール221は、LRU−1に対応した辞書管理情報223から、辞書名402及び辞書番号403が、メッセージに含まれる(a、辞書番号)に一致する行を削除する(ステップS1312)。
圧縮伸張モジュール221は、通信先−辞書対応情報222の辞書名304が「a」である行の辞書数305及び現辞書番号306を更新する(ステップS1313)。
具体的には、圧縮伸張モジュール221は、辞書名304が「a」である行の辞書数305の値を「1」減算する。当該行の現辞書番号306の値については、削除された辞書が現辞書番号306の値に一致する辞書である場合、現辞書番号306の値が「1」減算され、削除された辞書が現辞書番号306の値に一致しない辞書である場合、現辞書番号306は特に更新されない。
以上で説明したように、実施例3によれば、圧縮伸張モジュール221は、辞書を格納する記憶容量が上限を超えないように、運用中に必要性の低い辞書を削除することによって、記憶容量の上限にあわせた辞書の管理を行うことが可能となる。
各実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。