(57)【要約】【課題】  メンバを登録したシステムが、偽陽性判定確率の上昇を抑えつつ、効率的にメンバを検索出来ない。【解決手段】  メンバ管理装置は、検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部と、検索値と範囲情報から特定される第１の区間に対応する第１のビット列が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを第１のビット列に登録し、生成条件を満たせば、第２の区間の範囲情報と第２のビット列を生成してフィルタ記憶部に格納し、第１の区間の範囲情報を第１の区間と第２の区間が重複しないように変更して（変更後を第３の区間とする）、メンバを第３の区間のビット列または第２のビット列に登録する登録手段を備える。【選択図】      図１
2010266952.tif 000002
【特許請求の範囲】
【請求項１】
属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、
検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部と、
ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、
ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録手段、を備えるメンバ管理装置。
【請求項２】
時間を分割した複数の区間であって最終区間の終了時刻が未定である区間ごとに、区間の範囲情報とビット列を格納する前記フィルタ記憶部と、
前記検索値として現時刻を、前記第１の区間として前記最終区間を特定し、前記生成条件を満たした場合に、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録手段、を備える請求項１のメンバ管理装置。
【請求項３】
前記最終区間の開始時刻から所定時間が経過すると、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録手段を備える請求項２のメンバ管理装置。
【請求項４】
区間ごとに当該区間のビット列に登録されているメンバへのアクセス情報を格納するメンバ記憶部と、
前記第１の区間を分割して、前記第２の区間と前記第３の区間を生成して両区間の範囲情報を格納し、前記第１のビット列に登録されていたメンバを前記メンバ記憶部の情報に基づいて、前記第３の区間に対応するビット列または前記第２のビット列に登録し直す前記登録手段、を備える請求項１乃至３の何れかのメンバ管理装置。
【請求項５】
２のべき乗のビット数を有するビット列を格納する前記フィルタ記憶部と、
前記フィルタ記憶部のビット列に登録されているメンバの数に基づいてビット数２のｊ乗を算出し、前記ビット列の最下位ビット（第０番目ビット）から数えてｉ番目ビットがＯＮであるとき各ｉを２のｊ乗で除した乗余（ｍｏｄ）値を求め、各ｍｏｄ値番目ビットをＯＮに、他のビットをＯＦＦに設定したビット数２のｊ乗の新たなビット列を生成して、前記ビット列を置換する圧縮手段、を備える請求項１乃至４の何れかのメンバ管理装置。
【請求項６】
２のべき乗の整数（ａ）倍のビット数を有するビット列を格納する前記フィルタ記憶部と、
区間ごとに当該区間のビット列に登録されているメンバのペア情報を格納するメンバ記憶部と、
メンバとビット列のビット数を入力とした複数（ｋ）個のハッシュ関数の各関数値で特定されるビットをＯＮにして当該ビット列に当該メンバを登録し、
ビット列ごとに登録する各メンバ対応に、ｋ個のハッシュ関数ごとのＲｐ（当該メンバと当該ビット列の現ビット数ａ×２のｊ乗のハッシュ関数値）とＲｍ（当該メンバとａ×２のｍ乗（ｍは０乃至（ビット列の所定最大ビット数−１）の各整数値）のハッシュ関数値が奇数であれば最下位ビット（第０ビット目）から数えて第ｍ番目ビットをＯＮ、偶数であればＯＦＦとしたビット列）のｋ個のペアを前記ペア情報として前記メンバ記憶部に格納し、
前記生成条件を満たす場合、前記メンバ記憶部に格納されている前記第１のビット列対応に格納されている前記Ｒｐと前記Ｒｍのペアに基づいて、
ａ）前記Ｒｍの最下位ビット（第０番目ビット）から数えて第ｊ番目ビットがＯＦＦである各ペアについては前記Ｒｐ番目ビットをＯＮに、
ｂ）前記Ｒｍの第ｊ番目ビットがＯＮである各ペアについて前記Ｒｐ＋２のｊ乗番目ビットをＯＮに、
他のビットをＯＦＦに設定したビット数が２倍（ａ×２のｊ＋１乗）のビット列を生成して、前記第１のビット列を置換する前記登録手段、を備える請求項１乃至４の何れかのメンバ管理装置。
【請求項７】
入力された検索値の範囲の少なくとも一部を包含する全ての区間を前記フィルタ記憶部の範囲情報に基づいて取得し、入力データから生成したメンバが、取得した前記区間に対応するビット列から検出できるか否かを判定して判定結果を出力する検索手段、を備える請求項１乃至６の何れかのメンバ管理装置。
【請求項８】
請求項１乃至６の何れかのメンバ管理装置と、
前記メンバ管理装置と前記フィルタ記憶部を共有し、
入力された検索値の範囲の少なくとも一部を包含する全ての区間を前記フィルタ記憶部の範囲情報に基づいて取得し、入力データである又は入力データから生成したメンバが、取得した前記区間に対応するビット列から検出できるか否かを判定して判定結果を出力する検索手段、を備えるメンバ検索装置を包含するメンバ管理システム。
【請求項９】
属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、
検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部を備えるコンピュータに、
ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、
ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録処理、を実行させるメンバ管理プログラム。
【請求項１０】
時間を分割した複数の区間であって最終区間の終了時刻が未定である区間ごとに、区間の範囲情報とビット列を格納する前記フィルタ記憶部を備える前記コンピュータに、
前記検索値として現時刻を、前記第１の区間として前記最終区間を特定し、前記生成条件を満たした場合に、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録処理、を実行させる請求項９のメンバ管理プログラム。
【請求項１１】
前記コンピュータに
前記最終区間の開始時刻から所定時間が経過すると、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録処理を実行させる請求項１０のメンバ管理プログラム。
【請求項１２】
区間ごとに当該区間のビット列に登録されているメンバへのアクセス情報を格納するメンバ記憶部を備える前記コンピュータに、
前記第１の区間を分割して、前記第２の区間と前記第３の区間を生成して両区間の範囲情報を格納し、前記第１のビット列に登録されていたメンバを前記メンバ記憶部の情報に基づいて、前記第３の区間に対応するビット列または前記第２のビット列に登録し直す前記登録処理、を実行させる請求項９乃至１１の何れかのメンバ管理プログラム。
【請求項１３】
２のべき乗のビット数を有するビット列を格納する前記フィルタ記憶部を備える前記コンピュータに、
前記フィルタ記憶部のビット列に登録されているメンバの数に基づいてビット数２のｊ乗を算出し、前記ビット列の最下位ビット（第０番目ビット）から数えてｉ番目ビットがＯＮであるとき各ｉを２のｊ乗で除した乗余（ｍｏｄ）値を求め、各ｍｏｄ値番目ビットをＯＮに、他のビットをＯＦＦに設定したビット数２のｊ乗の新たなビット列を生成して、前記ビット列を置換する圧縮処理、を実行させる請求項９乃至１２の何れかのメンバ管理プログラム。
【請求項１４】
２のべき乗の整数（ａ）倍のビット数を有するビット列を格納する前記フィルタ記憶部と、区間ごとに当該区間のビット列に登録されているメンバのペア情報を格納するメンバ記憶部を備える前記コンピュータに、
メンバとビット列のビット数を入力とした複数（ｋ）個のハッシュ関数の各関数値で特定されるビットをＯＮにして当該ビット列に当該メンバを登録し、
ビット列ごとに登録する各メンバ対応に、ｋ個のハッシュ関数ごとのＲｐ（当該メンバと当該ビット列の現ビット数ａ×２ｊ乗のハッシュ関数値）とＲｍ（当該メンバとａ×２のｍ乗（ｍは０乃至（ビット列の所定最大ビット数−１）の各整数値）のハッシュ関数値が奇数であれば最下位ビット（第０ビット目）から数えて第ｍ番目ビットをＯＮ、、偶数であればＯＦＦとしたビット列）のｋ個のペアを前記ペア情報として前記メンバ記憶部に格納し、
前記生成条件を満たす場合、前記メンバ記憶部に格納されている前記第１のビット列対応に格納されている前記Ｒｐと前記Ｒｍのペアに基づいて、
ａ）前記Ｒｍの最下位ビット（第０番目ビット）から数えて第ｊ番目ビットがＯＦＦである各ペアについては前記Ｒｐ番目ビットをＯＮに、
ｂ）前記Ｒｍの第ｊ番目ビットがＯＮである各ペアについて前記Ｒｐ＋２のｊ乗番目ビットをＯＮに、
他のビットをＯＦＦに設定したビット数が２倍（ａ×２のｊ＋１乗）のビット列を生成して、前記第１のビット列を置換する前記登録処理、を実行させる請求項９乃至１２の何れかのメンバ管理プログラム。
【請求項１５】
前記コンピュータに
入力された検索値の範囲の少なくとも一部を包含する全ての区間を前記フィルタ記憶部の範囲情報に基づいて取得し、入力データから生成したメンバが、取得した前記区間に対応するビット列から検出できるか否かを判定して判定結果を出力する検索処理、を実行させる請求項９乃至１４の何れかのメンバ管理プログラム。
【請求項１６】
属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、
検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部を備えるコンピュータが、
ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、
ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録工程、を有するメンバ管理方法。
【請求項１７】
時間を分割した複数の区間であって最終区間の終了時刻が未定である区間ごとに、区間の範囲情報とビット列を格納する前記フィルタ記憶部を備える前記コンピュータが、
前記検索値として現時刻を、前記第１の区間として前記最終区間を特定し、前記生成条件を満たした場合に、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録工程、を有する請求項１６のメンバ管理方法。
【請求項１８】
前記コンピュータが
前記最終区間の開始時刻から所定時間が経過すると、前記最終区間の終了時刻が現時刻の直前になるように当該区間の範囲情報を変更して、前記第２の区間の範囲情報として、開始時刻が前記現時刻である新たな最終区間の範囲情報を生成して前記フィルタ記憶部に格納する前記登録工程を有する請求項１７のメンバ管理方法。
【請求項１９】
区間ごとに当該区間のビット列に登録されているメンバへのアクセス情報を格納するメンバ記憶部を備える前記コンピュータが、
前記第１の区間を分割して、前記第２の区間と前記第３の区間を生成して両区間の範囲情報を格納し、前記第１のビット列に登録されていたメンバを前記メンバ記憶部の情報に基づいて、前記第３の区間に対応するビット列または前記第２のビット列に登録し直す前記登録工程、を有する請求項１６乃至１８の何れかのメンバ管理方法。
【請求項２０】
２のべき乗のビット数を有するビット列を格納する前記フィルタ記憶部を備える前記コンピュータが、
前記フィルタ記憶部のビット列に登録されているメンバの数に基づいてビット数２のｊ乗を算出し、前記ビット列の最下位ビット（第０番目ビット）から数えてｉ番目ビットがＯＮであるとき各ｉを２のｊ乗で除した乗余（ｍｏｄ）値を求め、各ｍｏｄ値番目ビットをＯＮに、他のビットをＯＦＦに設定したビット数２のｊ乗の新たなビット列を生成して、前記ビット列を置換する圧縮工程、を有する請求項１６乃至１９の何れかのメンバ管理方法。
【請求項２１】
２のべき乗の整数（ａ）倍のビット数を有するビット列を格納する前記フィルタ記憶部と、区間ごとに当該区間のビット列に登録されているメンバのペア情報を格納するメンバ記憶部を備える前記コンピュータが、
メンバとビット列のビット数を入力とした複数（ｋ）個のハッシュ関数の各関数値で特定されるビットをＯＮにして当該ビット列に当該メンバを登録し、
ビット列ごとに登録する各メンバ対応に、ｋ個のハッシュ関数ごとのＲｐ（当該メンバと当該ビット列の現ビット数ａ×２ｊ乗のハッシュ関数値）とＲｍ（当該メンバとａ×２のｍ乗（ｍは０乃至（ビット列の所定最大ビット数−１）の各整数値）のハッシュ関数値が奇数であれば最下位ビット（第０ビット目）から数えて第ｍ番目ビットをＯＮ、、偶数であればＯＦＦとしたビット列）のｋ個のペアを前記ペア情報として前記メンバ記憶部に格納し、
前記生成条件を満たす場合、前記メンバ記憶部に格納されている前記第１のビット列対応に格納されている前記Ｒｐと前記Ｒｍのペアに基づいて、
ａ）前記Ｒｍの最下位ビット（第０番目ビット）から数えて第ｊ番目ビットがＯＦＦである各ペアについては前記Ｒｐ番目ビットをＯＮに、
ｂ）前記Ｒｍの第ｊ番目ビットがＯＮである各ペアについて前記Ｒｐ＋２のｊ乗番目ビットをＯＮに、
他のビットをＯＦＦに設定したビット数が２倍（ａ×２のｊ＋１乗）のビット列を生成して、前記第１のビット列を置換する前記登録工程、を有する請求項１６乃至１９の何れかのメンバ管理方法。
【請求項２２】
前記コンピュータが
入力された検索値の範囲の少なくとも一部を包含する全ての区間を前記フィルタ記憶部の範囲情報に基づいて取得し、入力データから生成したメンバが、取得した前記区間に対応するビット列から検出できるか否かを判定して判定結果を出力する検索工程、を有する請求項１６乃至２１の何れかのメンバ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メンバ管理装置、メンバ管理システム、メンバ管理プログラム、および、メンバ管理方法に関する。
【背景技術】
【０００２】
特許文献１は、文書ＩＤをブルームフィルタに登録し、検索するデータベースピアを開示する。当該ブルームフィルタは、登録される文書の数が増加していくにつれて、長さが段階的に４０９６ビット数ずつ長くなる。
【０００３】
特許文献２は、ブラウズセッションＩＤごとにパーティションに分割されて、各自の範囲のセッションＩＤに関連付けられたイベントデータを記憶するキャッシュ層サーバを開示する。このサーバは、ブルームフィルタの容量が満たされると、当該ブルームフィルタを大きなものに交換する。
【０００４】
特許文献３は、電子メールアドレスから算出されるビットパターンを登録したビット列をユーザ対応に保持するフィルタシステムを開示する。当該システムは、ユーザ宛の電子メールを受信すると、当該ユーザのビット列を検索して、ビット列に送信元アドレスが登録された場合だけ当該ユーザに当該電子メールを転送する。
【０００５】
特許文献４は、他の各々のボーダールータから受信したエリアサマリーをブルームフィルタとして格納するボーダールータを開示する。当該ルータは、この情報を用いて全てのエリア間宛先へのパスを計算する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１０２７９５
【特許文献２】特表２００７−５２６５３７
【特許文献３】特開２００８−３０６３６９
【特許文献４】特表２００３−５１６０３５
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ビット列に属性値の組（メンバ）を登録したシステムが、偽陽性判定確率の上昇を抑えつつ、効率的にメンバを検索出来ない。
【０００８】
特許文献１のデータベースピアは、登録ファイル数の増加に応じてブルームフィルタの長さを拡張する。従って、ファイル数が増加してくるとブルームフィルタのサイズが大きくなり、検索効率が悪化する。その理由は、検索時にブルームフィルタに対して局所性の無いアクセスが発生したり、桁数の大きなハッシュ値を計算する過程で長整数型データ演算が発生したりするからである。特許文献２のサーバも同様である。
【０００９】
特許文献３のシステムおよび特許文献４のボーダールータは、偽陽性判定確率の上昇を抑えないため、上述の課題を解決しない。
【００１０】
本発明は、上記課題を解決する、メンバ管理装置、メンバ管理システム、メンバ管理プログラム、および、メンバ管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一実施形態のメンバ管理装置は、属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部と、ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録手段、を備える。
【００１２】
本発明の一実施形態のメンバ管理プログラムは、属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部を備えるコンピュータに、ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録処理、を実行させる。
【００１３】
本発明の一実施形態のメンバ管理方法は、属性値の組であるメンバとビット列のビット数で特定される、前記ビット列中のビットをＯＮにすることを『ビット列にメンバを登録する』、当該ビットがONであることを検出することを『ビット列からメンバ検出する』、登録されていないメンバを検出してしまう確率を『偽陽性判定確率』、ビット列にメンバを追加すると当該ビットの偽陽性判定確率が所定の最大値以上になることを『生成条件』と定義した場合に於いて、検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報とビット列を格納するフィルタ記憶部を備えるコンピュータが、ａ）検索値と範囲情報から特定される第１の区間に対応するビット列（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを前記第１のビット列に登録し、ｂ）前記生成条件を満たせば、新たな区間（第２の区間）の範囲情報とビット列（第２のビット列）を生成して前記フィルタ記憶部に格納し、前記第１の区間の範囲情報を前記第１の区間と前記第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを前記第３の区間に対応するビット列または前記第２のビット列に登録する登録工程、を有する。
【発明の効果】
【００１４】
ビット列にメンバを登録したシステムが、偽陽性判定確率の上昇を抑えつつ、効率的にメンバを検索出来る。
【図面の簡単な説明】
【００１５】
【図１】第１の実施形態にかかるメンバ管理装置１０の全体構成図である。
【図２】フィルタ記憶部２３の構成を示す図である。
【図３】メンバ記憶部２２の構成を示す図である。
【図４】許容表５０の構成を示す図である。
【図５】登録手段２０（初期設定）の動作フローチャートである。
【図６】登録手段２０（登録処理）の動作フローチャートである。
【図７】検索手段２１の動作フローチャートである。
【図８】圧縮手段２４の動作フローチャートである。
【図９】登録手段２０（定期処理）の動作フローチャートである。
【図１０】第２の実施形態にかかるメンバ記憶部２２の構成を示す図である。
【図１１】第２の実施形態にかかる登録手段２０（フィルタ生成登録処理）の動作フローチャートである。
【図１２】第３の実施形態にかかるメンバ管理装置システム６０の全体構成図である。
【図１３】メンバ管理装置１０の基本構成図である。
【発明を実施するための形態】
【００１６】
データベースの負荷低減を行うために、ブルームフィルタをキャッシュとして利用する方法が提案されている。ブルームフィルタは次の非特許文献に示されている。
2004年、インターネット・マセマティクス、ネットワーク・アプリケーションズ・オブ・ブルーム・フィルタース：ア・サーベイ（Network Applications of Bloom Filters: A Survey, Internet Mathematics, vol. 1, no. 4: 485-509, 2004.http://www.internetmathematics.org/volumes/1/4/Broder.pdf）
ブルームフィルタの役割は、メンバシップクエリを実現することである。メンバシップクエリとは、特定のデータがデータベースに格納されているか否かの判定を行うことである。例えば、メンバシップクエリを行うサーバ等は「ユーザＸは、以前にＵＲＬ（Uniform Resource Locator）Ｙにアクセスしたことがあるか？」という問い合わせに対して、当該事実のログがログデータベースに有るか否かの判定を行う。判定の結果に応じて、サーバ等は、膨大なログデータベースに対する検索処理を省略できる。
【００１７】
また、サプライチェインマネジメント等のアプリケーションは、製品の流通履歴を解析しコスト最適化を行う。当該アプリケーションは、製品の流通履歴を把握するために、サプライチェインに関わる企業間をまたがって製品のトラッキングが必要となる。
【００１８】
製品のトラッキングに於いて、当該アプリケーションは、所望の製品のトレース情報を保有するデータベースサーバ等を特定する必要がある。このようなデータベースサーバがブルームフィルタをキャッシュとして備えることで、アプリケーションは、必要なデータを保有する候補となるデータベースサーバ等をより効率良く絞り込むことができる。
【００１９】
ブルームフィルタを備えない場合、アプリケーションが「指定された検索条件に合う情報を保持しているか」を判定するには、検索条件を用いて実際にデータベースの検索を行う必要がある。このため、上述の判定のための問い合わせが頻繁に行われると、サーバ等のデータベース検索負荷が増大する。
【００２０】
ブルームフィルタへの入力は、{（ユーザＩＤ，Ｘ），（ＵＲＬ，Ｙ），…}のような、属性情報のリストである。属性情報は、ユーザＩＤやＵＲＬ等といったデータの種類を特定する属性名と、ＸやＹ等の具体値である属性値の組から構成される。この属性情報のリストがメンバである。
【００２１】
ブルームフィルタは、ビット数Ｍのビット列とＫ個のハッシュ関数群｛ｈ１，ｈ２，…，ｈｋ｝で構成される。ビット列のすべてのビットはＯＦＦ（例えば０）で初期化される。あるメンバｅのブルームフィルタへの登録は、各ハッシュ関数ｈｉ（ｉ＝１，２，…，ｋ）に対して、Ｂ［ｈｉ（ｅ，Ｍ）］をＯＮ（例えば１）とすることでなされる。
【００２２】
ここで、Ｂ［ｈｉ（ｅ，Ｍ）］は、メンバｅとビット数Ｍを入力とする各ハッシュ関数ｈｉの関数値で特定されるビット列のビットである。Ｂ［ｈｉ（ｅ，Ｍ）］は、例えば、ビット列の最下位ビット（第０番目ビット）から数えて第ｈｉ（ｅ，Ｍ）番目のビットである。なお、ＯＮ／ＯＦＦと０／１の対応は逆でも良い。
【００２３】
メンバシップクエリを実行するサーバ等は、Ｂ［ｈｉ（ｅ，Ｍ）］の値が全てＯＮである場合、メンバｅはフィルタに登録されている（真）と判定し、そうでない場合は、登録されていない（偽）と判定する。
【００２４】
ブルームフィルタを用いたメンバシップクエリの判定結果は、偽陽性を含むことがある。偽陽性は、フィルタに登録されていないメンバの検索に対して、本来偽と判定すべきところを誤って真と判定することである。偽陽性判定確率とは、あるブルームフィルタを用いたメンバシップクエリの判定結果に、偽陽性が含まれる確率である。
【００２５】
ブルームフィルタに登録されるメンバ数の増加に伴い、偽陽性判定確率は上昇する。例えば、前述の特許文献２のシステムにおいて、あるユーザＸの操作履歴は、時間経過とともに増加する。操作回数が一定限度を越えた場合、偽陽性判定確率が高くなり過ぎてブルームフィルタはキャッシュとしての機能を果たさなくなる。
【００２６】
偽陽性判定確率が所定の定数ｐ以下であるとの条件下で、ブルームフィルタに登録できるメンバの最大数が当該ブルームフィルタの許容値である。ブルームフィルタの許容値は、当該ブルームフィルタのビット数に依存する。
【００２７】
なお、多くの場合、メンバシップクエリの検索条件は、検索範囲を絞り込むために時間等の指定を含む。これは、データベースに保持されている全てのデータを検索対象とする必要が無いことが多いからである。従って、検索効率向上のため、ブルームフィルタを備えた装置が「ここ1カ月の内に物品Ｘのエラー情報Ｙは記録されたか？」というようなメンバシップクエリを処理できることが望ましい。
【００２８】
以下、図面を参照して、本発明の第１の実施形態にかかるメンバ管理装置１０について説明する。
【００２９】
図１は、本発明の第１の実施形態にかかるメンバ管理装置１０の全体構成図である。メンバ管理装置１０は、直接または通信網経由でイベント生成装置１２および検索端末１３と接続されている。接続関係は一対一に限られない。例えば、一台の検索端末１３が複数のメンバ管理装置１０に接続されて、複数のメンバ管理装置１０に検索依頼を行う。
【００３０】
イベント生成装置１２は、ある事象の発生等に伴って、イベントデータを生成して検索値と共にメンバ管理装置１０に送信する。ここで、イベントデータは、複数個の属性情報のリストを包含する。属性情報は属性名と属性値から構成される。属性名は属性値の種類を特定する。イベントデータ内に於ける順序で属性値の種類が特定できるとき、属性名は省略されても良い。イベントデータは、発生した事象等を表現するデータであり、タグＩＤ、ユーザ名、住所、温度等を包含する。
【００３１】
イベント生成装置１２は、例えば、サプライチェインに所属する企業の製品出荷管理システムである。イベント生成装置１２は、例えば製品の出荷を検知すると、出荷のイベントデータとして、製品ＩＤ（タグＩＤ）、製品種類、出荷先ユーザ名、住所等からなるイベントデータを出力する。
【００３２】
検索値は、メンバ管理装置１０に登録されたイベントデータを検索する時の検索範囲を限定するために用いられる値である。検索値は、例えば、イベントデータの生成時刻、通番、イベント生成装置１２の識別子である。以降、検索値はメンバ１４の生成時刻であるとする。なお、生成時刻は、イベント生成装置１２が生成してメンバ管理装置１０に送信しても良いし、メンバ管理装置１０がイベントデータを受信したときに生成しても良い。
【００３３】
メンバ管理装置１０は、イベントデータと検索値をイベントＤＢ２６（Database）に記憶すると共に、イベントデータから生成したメンバをブルームフィルタに登録する。
【００３４】
メンバはイベントデータ内のＬ個の属性情報から構成される。メンバの属性値（Ｘｉ、ｉ＝１，２，…，Ｌ）は一般にイベントデータの属性値を正の整数値に変換したものである。例えば、データ長が長いユーザ名、住所等は、以降の処理を簡潔にするため、予め登録された整数コード等に変換される。当該変換はなされなくても構わない。
【００３５】
検索端末１３は、イベントデータｅのＬ個の属性情報と検索値の範囲をメンバ管理装置１０に送信する。メンバ管理装置１０は、指定された検索値の範囲内に、指定されたＬ個の属性情報から生成されたメンバが、ブルームフィルタに登録されているかを調べて判定し、その判定結果を検索端末１３に送信する。
【００３６】
検索端末１３は、上記判定結果が真であるメンバ管理装置１０に、イベントデータｅのイベントＤＢ２６からの検索依頼を送信する。
【００３７】
メンバ管理装置１０は、登録手段２０、検索手段２１、圧縮手段２４、ＤＢＭＳ２５、メンバ記憶部２２、フィルタ記憶部２３、イベントＤＢ２６を包含する。
【００３８】
登録手段２０は、入力したイベントデータからメンバを生成し、ブルームフィルタに登録等する。検索手段２１は、入力した属性情報からメンバを生成し、当該メンバがブルームフィルタに登録されているか否かを判定し、判定結果を出力する。圧縮手段２４は登録されたメンバ数に併せて、ブルームフィルタのビット数を小さくする。ＤＢＭＳ２５（Database Ｍanagiment System）は、イベントＤＢ２６にイベントデータおよび検索値を登録したり、イベントＤＢ２６からイベントデータおよび検索値を検索したりする。
【００３９】
登録手段２０、検索手段２１、圧縮手段２４およびＤＢＭＳ２５は、論理回路装置としてハードウェアで実現される。登録手段２０、検索手段２１、圧縮手段２４またはＤＢＭＳ２５は、コンピュータ１１であるメンバ管理装置１０のプロセッサが、メモリ上のメンバ管理プログラム２９を実行することで実現されても良い。
【００４０】
また、ＤＢＭＳ２５は、市販のデータベース管理システムを使用しても良い。また、ＤＢＭＳ２５とイベントＤＢ２６は、メンバ管理装置１０とは別の装置（データベースサーバ等）に備えられていても良い。
【００４１】
フィルタ記憶部２３は、ブルームフィルタの情報を格納する。メンバ記憶部２２は、ブルームフィルタに登録されているメンバに関する情報を格納する。フィルタ記憶部２３およびメンバ記憶部２２は、ディスク装置、メモリ等の記憶装置に設けられる。
【００４２】
図２は、フィルタ記憶部２３の構成を示す図である。フィルタ記憶部２３は、複数の区間エントリ３０と、各区間エントリ３０に対応したビット列３７を格納する。ビット列３７はブルームフィルタとして機能する。各区間エントリ３０は、区間ＩＤ３１、範囲情報３２、サイズ３３、許容数３４、登録数３５、フィルタポインタ３６を包含する。区間ＩＤ３１は、時刻等の検索値の範囲を分割した区間の識別子である。
【００４３】
範囲情報３２は区間の範囲を規定する。範囲情報３２は、例えば、開始時刻と終了時刻を年月日時分の形式で包含する。この場合、区間は、例えば開始時刻から終了時刻直前までである。区間には、開始時刻だけが決まっていて、終了時刻が決まっていない区間（最終区間と呼ぶ）があっても良い。
【００４４】
区間が重複しない（ある期間で同時に二つ以上のビット列３７を使用することが無い）場合、範囲情報３２は開始時刻だけを格納しても良い。この場合、区間は、例えば、当該開始時刻から次の区間の開始時刻直前迄である。
【００４５】
なお、区間の重複は、区間の区切りが異なる複数台のメンバ管理装置１０で作成したフィルタ記憶部２３のデータをマージした場合等に発生する。
【００４６】
サイズ３３は、対応するビット列３７のビット数を格納する。本実施形態に於いてサイズ３３は、例えば２のべき乗の整数倍（整数ａ×２＊＊ｊと表記する）である。許容数３４は、偽陽性判定確率をシステムパラメータ等で与えられた定数ｐ以下に抑えるための、当該区間エントリ３０に対応するビット列３７の許容値である。
【００４７】
登録数３５は、当該区間エントリ３０に対応するビット列３７に登録されているメンバ数である。フィルタポインタ３６は、当該区間エントリ３０に対応するビット列３７へのポインタ情報（アドレス等）である。
【００４８】
図３はメンバ記憶部２２の構成を示す図である。メンバ記憶部２２は、区間に対応した複数の区間行４０を格納する。各区間行４０は区間ＩＤ３１とペア情報４３を格納する。ペア情報４３は、区間ＩＤ３１に対応するビット列３７に登録されているメンバ対応にメンバエントリ４１を格納する。各メンバエントリ４１には、各ハッシュ関数ｈｉ（ｉ＝１，２，…，ｋ）の２つの関数値（後述）であるＲｐｉとＲｍｉのペアを格納する。このペア情報４３はビット列３７の拡張に使用される。
【００４９】
図４は許容表５０の構成を示す図である。許容表５０は図示しないメモリ等に設けられる作業域である。許容表５０はビット列３７のサイズ３３ごとの所定の偽陽性判定確率に対する許容数３４を格納する。許容表５０は、システムパラメータとして与えられても良いし、後述するように初期設定処理で作成されても良い。
【００５０】
図５は、登録手段２０（初期設定）の動作フローチャートである。登録手段２０は、許容される偽陽性判定確率ｐ、ビット列３７のビット数の最小値（ａ×２＊＊ｘ等）、最大値（ａ×２＊＊ｚ等）を入力する（Ｓ３０１）。これらの値は、例えば、システムパラメータとして与えられる。
【００５１】
次に登録手段２０は許容表５０を作成する（Ｓ３０２）。同手段は、許容表５０の各エントリのサイズ３３に、最小値（ａ×２＊＊ｘ等）から始まって、順次２倍しながら、最大値（ａ×２＊＊ｚ等）迄の値を格納する。次に同手段は、各エントリの許容数３４を算出して格納する。
【００５２】
各エントリの許容数３４は次式で計算される。
2010266952.tif 000003
【００５３】
また、ｃｅｉｌ（ｘ）は、ｃｅｉｌｉｎｇ関数であり、実数ｘより大きい最小の整数を返す関数である。なお、許容数３４のうち最大の値が最大許容値である。最大許容値は、ビット列３７のビット数の最大値（Ｂｍａｘ）から算出される許容数３４である。
【００５４】
なお、前述したハッシュ関数の個数ｋも同様に以下の式で決定される。
2010266952.tif 000004
【００５５】
これらの値の導出に関する詳細は、以下の非特許文献開示されている。
インターネット・マセマティクス、ネットワーク・アプリケーションズ・オブ・ブルーム・フィルタース：ア・サーベイ（Network Applications of Bloom Filters: A Survey, InternetＭathematics, vol. 1, no. 4: 485-509, 2004.
http://www.internetmathematics.org/volumes/1/4/Broder.pdf）
初期設定の最後に、登録手段２０はフィルタ記憶部２３に最初の区間エントリ３０とビット列３７を、メンバ記憶部２２に最初の区間行４０を生成して、初期設定する（Ｓ３０３）。
【００５６】
具体的に同手段は、当該区間エントリ３０の区間ＩＤ３１に通番を、範囲情報３２の開始時刻に現時刻を、範囲情報３２の終了時刻に『未定』を格納する。登録手段２０は、『未定』を表す値として、例えば、メンバ数が許容数３４以上になる十分遠い将来の時刻を格納する。次いで同手段は、当該区間エントリ３０のサイズ３３には、システムパラメータで与えられたビット列３７の初期ビット数（ａ×２＊＊ｙ等；ｙはｘ以上ｚ以下の値）を格納する。同手段は、当該区間エントリ３０の許容数３４に、サイズ３３が初期ビット数である許容値表５０エントリの許容数３４の値をコピーする。登録数３５は０に設定される。
【００５７】
同手段は、初期ビット数のビット列３７を生成して全ビットをＯＦＦで初期化して、そのアドレスをフィルタポインタ３６に格納する。また、同手段は、メンバ記憶部２２に最初の区間行４０を生成して、区間エントリ３０の区間ＩＤ３１を区間行４０の区間ＩＤ３１にコピーする。
【００５８】
図６は、登録手段２０（登録処理）の動作フローチャートである。登録手段２０は、登録処理により、受信したイベントデータからメンバを生成してフィルタ記憶部２３に登録する。
【００５９】
登録手段２０は、イベント生成装置１２から受信したイベントデータからメンバを生成する（Ｓ１０１）。同手段は、イベントデータ内の予め定められたＬ個の属性情報を取得して、属性値を正の整数値等に変換して、メンバの属性値（ｘｉ  ｉ＝１，２，…，Ｌ）を得る。また、受信したイベントデータ内にある属性の値が含まれない場合、登録手段２０はそのことを表す予約数値（システムパラメータ等として与えられている）を属性値ｘとして設定する。
【００６０】
取得したメンバをブルームフィルタに登録するために、登録手段２０は、フィルタ記憶部２３内の最終区間のフィルタポインタ３６から最終区間のビット列３７を取得する(Ｓ１０２)。最終区間の登録数３５が許容数３４よりも小さい場合（Ｓ１０５でＮ）、そのメンバを最終区間のビット列３７に登録する(Ｓ１０３)。
【００６１】
メンバのビット列３７への登録は、ｋ個のハッシュ関数ｈｉ（ｉ＝１，２，…，ｋ）の関数値で示される位置のビットをＯＮにすることで行われる。ここで、ビット位置は、最下位ビット（第０番目ビット）から数えられる。各ハッシュ関数ｈｉは、次のように設計される。
ｈｉ（ｘ１，ｘ２，…，ｘＬ，μ）＝（ａｉ１×ｘ１＋ａｉ２×ｘ２＋…＋ａｉＬ×ｘＬ）ｍｏｄ  μ
ここで、ａｉ１、ａｉ２、…、ａｉＬはシステムパラメータとして与えられる定数係数である。また、除数μは、登録するビット列３７のサイズ３３を意味する。最終区間のビット列３７にメンバを登録する際は、サイズ３３は最終区間の区間エントリ３０から取得される。また、登録手段２０は最終区間の登録数３５に１を加算する。
【００６２】
登録されるメンバ数に応じたビット列３７の拡張を容易にするために、サイズ３３は、定数ａ×２のべき乗で表される整数値とする。また、各ｉ＝１，２，…，ｋに関して、ａｉ１，ａｉ２，…，ａｉＬおよびμは、互いに素であるように設定されている。例えば、ａｉ１、ａｉ２、…、ａｉＬは、互いに異なる３以上の素数である。
【００６３】
続いて、登録手段２０は、ビット列３７の拡張処理に必要なペア情報４３を生成し、メンバ記憶部２２に記録する（Ｓ１０４）。記録に当たり、登録手段２０は最終区間と同じ区間ＩＤ３１を有するメンバ記憶部２２の区間行４０を特定する。同手段は、当該行に新たなメンバエントリ４１を生成して、生成したペア情報４３を格納する。
【００６４】
ここで、ペア情報４３はｋ組の数値（Ｒｐｉ，Ｒｍｉ）（ｉ＝１，２，…，ｋ）のペアである。Ｒｐｉは現在のビット列３７のビット数（サイズ３３の値）を除数μとしたときのハッシュ関数ｈｉの関数値である。Ｒｍｉは、ａ×２＊＊ｍ（ｍ＝０，１，…，Ｂｍａｘ−１）を除数μとしたときのハッシュ関数ｈｉが奇数の時はＯＮ、偶数の時はＯＦＦであるＢｍａｘビット長のビット列である。ここで、Ｂｍａｘはビット列３７のビット数の最大値であり、システムパラメータ等としてメンバ管理装置１０に与えられる。
【００６５】
最終区間の登録数３５が許容数３４と等しいが（Ｓ１０５でＹ）、最大許容数より小さい場合（Ｓ１０６でＮ）、登録手段２０はフィルタ拡張処理を行う。
【００６６】
本処理に於いて登録手段２０は、まず最終区間の現在のビット列３７のサイズ３３をフィルタ記憶部２３から、最終区間の全ペア情報４３をメンバ記憶部２２から取得する（Ｓ１０７）。取得したサイズ３３がａ×２＊＊ｊであると仮定する。
【００６７】
続いて同部は、ビット数を２倍に拡張したビット列３７を生成し、そのアドレスを最終区間のフィルタポインタ３６に設定する。同部は、最終区間のサイズ３３を２倍（ａ×２＊＊（ｊ＋１））にすると共に許容数３４も更新する（Ｓ１１０）。このとき同部は、新たに生成した全ビットをＯＦＦに初期設定すると共に、古いビット列３７を削除する。最終区間の区間エントリ３０の許容数３４は、サイズ３３がａ×２＊＊（ｊ＋１）である許容値表５０エントリの許容数３４の値で更新される。
【００６８】
同手段は取得したペア情報４３のＲｐｉの更新処理を行う（Ｓ１１１）。具体的に、同手段は、ペア情報４３のＲｍｉの最下位ビット（第０番目ビット）から数えてｊ番目ビットがＯＦＦであれば更新せず、ＯＮであればＲｐｉに２＊＊ｊを加算して更新する。
【００６９】
同手段は、生成した新たなビット列３７のＲｐｉ番目のビットをＯＮに設定する（Ｓ１１２）。
【００７０】
上記のようなフィルタ拡張処理を行っても、そのブルームフィルタを利用したメンバシップクエリの真偽判定の結果が変わらないことは、次のことから保証される。任意の整数Ａに対する２＊＊ｊの剰余演算は、Ａのｊビット以上のビット値を０にすることである。整数Ａの２＊＊ｊと２＊＊（ｊ＋１）を除数とするそれぞれの剰余値をｘとｘ’、ｘとｘ’の排他的論理和の値をｙとする。このとき、ｘ’＝ｘ＋ｙが成り立つ。従って、サイズ３３が２＊＊ｊから２＊＊（ｊ＋１）への拡張を行ったビット列３７と、もとのサイズ３３が２＊＊ｊのビット列３７では同じ位置に１が設定される。
【００７１】
最終区間の全てのペア情報４３についての処理が終了したら（Ｓ１１３でＹ）、登録手段２０は、拡張されたビット列３７に対してメンバを登録する（Ｓ１０３、Ｓ１０４）。なお、登録手段２０は、フィルタ拡張処理を実行しないように実現されても良い。
【００７２】
最終区間の登録数３５が最大許容数と等しい場合（Ｓ１０５、Ｓ１０６でＹ）、登録手段２０はフィルタ生成登録処理を行う。
【００７３】
フィルタ生成登録処理において、登録手段２０は、現在の最終区間の範囲情報３２の終了時刻を『未定』から現時刻に変更する（Ｓ１０８）。このとき、登録手段２０は、現在の最終区間の区間行４０（格納されている全ペア情報４３を含む）を削除しても良い。本実施形態に於いては、今後、当該区間を対象としたフィルタ拡張処理は発生せず、当該区間のペア情報４３は不要となるからである。
【００７４】
次に同手段は、フィルタ記憶部２３に新たな区間エントリ３０とビット列３７を、メンバ記憶部２２に新たな区間行４０を生成して、新たな最終区間として初期設定する（Ｓ１０９）。具体的な処理は、前述の初期設定処理Ｓ３０３に準ずる。
【００７５】
図７は、検索手段２１の動作フローチャートである。
【００７６】
検索手段２１は、検索端末１３からＬ個の属性情報と検索の範囲を受信し、受信した属性情報からメンバを生成する（Ｓ２０１）。検索手段２１は、メンバの生成を登録手段２０と同様に行う。なお、検索の範囲は受信しなくても構わない。また、検索手段２１は、Ｌ個の属性値の代わりにイベントデータ全体を受信しても良い。
【００７７】
検索の範囲を受信した場合（Ｓ２０２でＹ）、検索手段２１は、フィルタ記憶部２３の範囲情報３２を走査して、当該検索の範囲の検索値の範囲の少なくとも一部を包含する全ての区間の区間エントリ３０を取得する（Ｓ２０３）。具体的に同手段は、区間エントリ３０のアドレスまたは区間ＩＤ３１のリストを取得する。
【００７８】
検索の範囲を受信しない場合（Ｓ２０２でＮ）、検索手段２１は全ての区間の区間エントリ３０を取得する（Ｓ２０４）。
【００７９】
検索手段２１は、取得した全ての区間のビット列３７を取得し、生成したメンバが、当該ビット列３７に登録されているかどうかを判定する(Ｓ２０５)。メンバのビット列３７への登録判定は、上述したｋ個のハッシュ関数ｈｉ（ｉ＝１，２，…，ｋ）の関数値で示される位置のビットがＯＮであるか否かで行われる。ここで、ビット位置は、最下位ビット（第０番目ビット）から数えられる。ハッシュ関数ｈｉの関数値で示された位置のビットが全てＯＮであれば、検索手段２１はメンバが登録されている（真）と判定する。そうでない場合、同手段は登録されていない（偽）であると判定する。
【００８０】
ある区間のビット列３７について判定を行った結果が真である場合（Ｓ２０６でＹ）、検索手段２１は、真という判定結果を検索端末１３に送信する(Ｓ２０８)。
【００８１】
取得した全ての区間のビット列３７について偽である場合（Ｓ２０６、Ｓ２０７共にＮ）、検索手段２１は、偽という判定結果を検索端末１３に送信する(Ｓ２０８)。
【００８２】
図８は圧縮手段２４の動作フローチャートである。圧縮手段２４は、登録数３５に対して偽陽性判定確率がｐ以下を保証することのできるビット列３７のビット数Ｍを計算し、ビット列３７をＭビット数に縮小させて、フィルタ記憶部２３の容量を削減する。
【００８３】
圧縮手段２４は、フィルタ拡張処理が実装されていない場合等、ビット列３７の生成される初期ビット数が大きな場合に有効である。圧縮手段２４は実装されていなくても良い。
【００８４】
圧縮手段２４は例えば、定期的に繰り返し起動される。圧縮手段２４は新たな最終区間の生成に伴って起動されても良い。起動されると、圧縮手段２４はフィルタ記憶部２３を参照して、例えば最終区間以外の全区間について、登録数３５から偽陽性判定確率がｐ以下であることを保証できるビット数Ｍを求める（Ｓ４０１）。
【００８５】
具体的に、圧縮手段２４は以下の式を満たす値ｊを求め、Ｍ＝ａ×２＊＊ｊとする。
2010266952.tif 000005
【００８６】
次に、圧縮手段２４は、ある区間について値Ｍが処理対象区間のサイズ３３より小さい場合（Ｓ４０２でＹ）、次の手順に従い当該区間のビット列３７の圧縮処理を行う。そのような区間が複数ある場合は、全てのそのような区間について圧縮処理を行う。圧縮手段２４は、先ず、圧縮処理対象区間の現在のビット列３７（Ｂ）をフィルタポインタ３６から取得する（Ｓ４０３）。同手段は、ビット数がＭのビット列３７（Ｂ’）を生成して全ビットをＯＦＦに初期化する。同手段は、そのアドレスとビット数Ｍを、処理対象区間のサイズ３３とフィルタポインタ３６に設定し、許容数３４をＭに合わせて更新する（Ｓ４０４）。許容数３４の更新は許容表５０を参照して行われる。
【００８７】
最後に圧縮手段２４は、Ｂに登録されていたメンバをＢ’に登録し直す（Ｓ４０５）。同手段は、同時にペア情報４３の更新も行う。具体的に、圧縮手段２４は処理対象区間の区間行４０に格納されている全てのペア情報４３を対象に以下のことを行う。
１）圧縮手段２４は、Ｒｍｉの第ｎビット目（ｎ＝Ｍ−１．．．ｊ＋１）のＯＮ／ＯＦＦを検査し、ＯＮである時はＲｐｉからａ×２＊＊ｎを減ずるように更新し、ＯＦＦである時はそのままの値とする。
２）圧縮部２４は、更新後のＲｐｉの値に基づいて、Ｂ’の第Ｒｐｉ番目ビットをＯＮとする。
【００８８】
ビット列３７のビット長が２のべき乗（ａ＝１）のとき、圧縮手段２４は、Ｂを走査し、ＯＮが設定されているビット位置ｉに対して、Ｍを除数とするｉの剰余ｉ’を求め、Ｂ’のｉ’番目のビットをＯＮに設定しても良い。この場合、圧縮手段２４は、ペア情報４３を必要としない。検索時に、Ｂの代わりにＢ’を用いても偽陽性判定確率が悪化しないことは、圧縮前と圧縮後のサイズ３３が共に２のべき乗であることにより保証される。
【００８９】
図９は、登録手段２０（定期処理）の動作フローチャートである。本処理に於いて、登録手段２０は、例えば定期的に起動され（Ｓ５０１）て、フィルタ生成登録処理を行う（Ｓ５０２）。フィルタ生成登録処理は、登録手段２０（登録処理）の一部として行われるものと同じである（図６参照）。
【００９０】
本処理を実装したメンバ管理装置１０は、メンバ数がビット列３７の最大許容値と等しくなった時点で新たなビット列３７を生成することに加え、ビット列３７の使用開始後、一定時間経過に伴い新たなビット列３７を生成する。
【００９１】
本処理により、同一ビット列３７が長時間使用される（当該ビット列３７の区間が長期間にわたる）ことを防止し、時間範囲指定を伴うメンバ検索時の偽陽性判定確率の上昇を抑えることが出来る。
【００９２】
なお、本処理は実装されなくても良い。さらに、本処理を実装したときは、登録手段２０の登録処理におけるフィルタ生成登録処理はなくても良い。
【００９３】
［具体的な説明］
以下、メンバ管理装置１０のいくつかの処理について、データ例を挙げて説明する。
【００９４】
最初は、メンバeをブルームフィルタ（ビット列３７）に登録する処理の説明である。以下の説明に於いて、フィルタ記憶部２３のブルームフィルタの情報は以下の４つの項目で表現される。
（区間ＩＤ３１、サイズ３３、登録数３５、ビット列３７）
フィルタの最大ビット数をＭ、現在のフィルタのビット数（サイズ３３の値）をＭｊとする。ブルームフィルタの最大ビット数をＭ＝２＊＊２３＝８３８８６０８、偽陽性判定確率をｐ＝０．０１とする。
【００９５】
このとき、ハッシュ関数の個数ｋ（式（１））は、小数点以下を繰り上げてｋ＝７となる。以下は、属性値の数Ｌを２とした場合のハッシュ関数例である。
ｈ１（ｘ１，ｘ２）＝（６１７×ｘ１＋２０８９×ｘ２）  ｍｏｄ  μ
ｈ２（ｘ１，ｘ２）＝（２２７８３×ｘ１＋１５５１１×ｘ２）  ｍｏｄ  μ
ｈ３（ｘ１，ｘ２）＝（４１５７×ｘ１＋７５１×ｘ２）  ｍｏｄ  μ
ｈ４（ｘ１，ｘ２）＝（１１１６１×ｘ１＋１０３９９×ｘ２）  ｍｏｄ  μ
ｈ５（ｘ１，ｘ２）＝（６７８０１×ｘ１＋１１１１３×ｘ２）  ｍｏｄ  μ
ｈ６（ｘ１，ｘ２）＝（８３×ｘ１＋２６７１×ｘ２）  ｍｏｄ  μ
ｈ７（ｘ１，ｘ２）＝（１０７×ｘ１＋５４５１７×ｘ２）  ｍｏｄ  μ
但し、μはフィルタの最大ビット数Ｍもしくは現在のフィルタのビット数Ｍｊである。各ハッシュ関数ｈｉ（ｘ１，ｘ２，…，ｘＬ）＝（ａｉ１×ｘ１＋ａｉ２×ｘ２＋…＋ａｉＬ×ｘＬ）  ｍｏｄ  μの、剰余演算を行う前の値がＹｉ（＝ａｉ１×ｘ１＋ａｉ２×ｘ２＋…＋ａｉＬ×ｘＬ）であるとする。
【００９６】
メンバｅの属性値１および属性値２が、それぞれｘ１＝１２３、ｘ２＝４５６であるとする。このとき、取得した最新のブルームフィルタの情報が、（０００００１，６５５３６，６８３６，Ｂ）であるとする。
【００９７】
ハッシュ関数ｈ１（１２３，４５６）のＹ１の値は１０２８４７５となる。従って、登録手段２０は、Ｂの（Ｘ１  ｍｏｄ  Ｍｊ）＝４５４３５番目のビット（Ｂ［４５４３５］）を１にセットする。登録手段２０は、他の各ハッシュ関数についても同様にＢの更新を行う。
【００９８】
このとき、ブルームフィルタの拡張やブルームフィルタの生成登録が無ければ、登録手段２０が（０００００１，６５５３６，６８３７，Ｂ）をブルームフィルタの情報としてフィルタ記憶部２３に格納して、メンバｅの登録を完了する（Ｓ１０３）。
【００９９】
次の説明は、各ハッシュ関数ｈｉ（１２３，４５６）から導出されるメンバ情報を生成する場合についての説明である。
【０１００】
現在使用しているブルームフィルタの区間ＩＤ３１が０００００１である場合、ハッシュ関数ｈ１を用いて生成されるメンバ情報（区間ＩＤ３１，Ｒｐ１，Ｒｍ１）は、（０００００１，４５４３５，１０２８４７５）である。ここで、Ｒｐ１＝Ｙ１  ｍｏｄ  Ｍｊである。Ｒｍ１は、第ｍビットを、Ｙ１  ｍｏｄ  ２＊＊ｍが奇数であれば１、偶数であれば０とする最大ビット数Ｍのビット列である。上記のメンバ登録処理と同様、登録手段２０は、他の各ハッシュ関数から導出されるメンバ情報についても計算し、メンバ記憶部２２に格納する（Ｓ１０４）。
【０１０１】
次の説明は、メンバ情報を使用したフィルタの拡張処理の説明である。
【０１０２】
フィルタ拡張処理（図６参照）は、例えば、Ｍｊ＝６５５３６でｐ＝０．０１と設定されている場合、登録数３５が、許容数３４（Ｍｊ／ｌｏｇ０．６１８５（ｐ）＝６５５３６／９．５８４９５７１６７＝６８３７）と等しい状態で実行される。
【０１０３】
登録手段２０は、ブルームフィルタ０００００１のサイズ３３を拡張するため、ブルームフィルタのビット列３７の更新と、その更新に伴うメンバ情報の修正を行う。同手段は、各メンバ情報について以下の処理を行う。
【０１０４】
ここで、メンバ情報が、（０００００１，４５４３５，１０２８４７５）および（０００００１，４４９２５，１４８６７１７）であるとする。現在使用しているブルームフィルタのビット列３７（Ｂ）において、Ｂ［４５４３４］とＢ［４４９２４］は１にセットされている。
【０１０５】
このとき、登録手段２０は、サイズ３３を６５５３６（２の１６乗）から１３１０７２（２の１７乗）へ拡張しても、ハッシュ関数で指されるビット位置の値が同じであることを保証するように更新を行う。
【０１０６】
メンバ情報（０００００１，４５４３５，１０２８４７５）に関して、Ｒｍｉである１０２８４７５（１１１１  １０１１  ０００１  ０１１１  １０１１２）の１６ビット目が１である。従って、登録手段２０は、４５４３５＋Ｍｊを計算し、メンバ情報を（０００００１，１１０９７１，１０２８４７５）に更新する。
【０１０７】
メンバ情報（０００００１，４４９２５，１４８６７１７）に関して、Ｒｍｉである１４８６７１７（１  ０１１０  １０１０  １１１１  ０１１１  １１０１２）は１６ビット目が０であるので、メンバ情報の変更は行われない。
【０１０８】
登録手段２０は、更新があったメンバ情報について、Ｂ［更新後Ｒｐi］値を１にセットすることでフィルタを更新する。さらに登録手段２０は、フィルタ記憶部２３が管理する情報についても（０００００１，６５５３６，６８３６，Ｂ）から（０００００１，１３１０７２，６８３７，Ｂ’）のように更新する（Ｓ１１０）。
【０１０９】
上記のようなフィルタ拡張処理を行っても、そのブルームフィルタを利用したメンバシップクエリの真偽判定の結果が変わらないのは、ｘ≦ｙのとき、以下の恒等式から保証される。
2010266952.tif 000006
【０１１０】
ここでＡは任意の正整数である。例えば、μ＝６５５３６およびμ＝１３１０７２とした場合のハッシュ関数ｈ１（１２３，４５６）およびｈ２（１２３，４５６）の値は等しい。
【０１１１】
次の説明は、検索範囲を入力した場合の検索処理についての説明である。
【０１１２】
属性値（１２３，３４５）および検索範囲［Ｔｓ，Ｔｅ］が与えられた場合、検索手段２１は以下の検索を行う。例えば、範囲情報３２が｛（００００００，２００９０２０１００００），（０００００１，２００９０２０１０１００），（０００００２，２００９０２０１０２００），…，（００００２４，２００９０２０２００００）｝であるとする。ここで、（００００００，２００９０２０１０００）は、区間ＩＤ３１が００００００で、範囲情報３２の開始時刻が２００９年２月１日午前０時０分を表しているものとする。終了時刻は、次の区間の開始直前である。
【０１１３】
この状況において、検索手段２１が、Ｔｓ＝２００９０２０１０８３０（２００９年２月１日８時３０分）とＴｅ＝２００９０２０１１７１５（２００９年２月１日１７時１５分）の検索範囲を入力したとする。
【０１１４】
検索手段２１は、範囲情報３２に対して二分探索などを実行することにより、ＴｓおよびＴｅに関して、それら以下の値のなかで最も大きい値（predecessor；Pre）を持つような値をそれぞれ求める。開始時刻ＴｓのPreは２００９０２０１０８００であり、終了日時ＴｅのPreは２００９０２０１１７００となる。その結果、検索手段２１は、区間ＩＤ３１の集合｛０００００８，０００００９，…，００００１７｝を得る（Ｓ２０３）。検索手段２１は、これらの区間ＩＤ３１に対応するビット列３７に対して、検索を実行する。
【０１１５】
なお、フィルタ記憶部２３は、範囲情報３２が無効な（所定の無効値が格納されている）区間エントリ３０を包含しても良い。当該区間は、例えば、検索値を伴わずにイベントデータが入力された場合に、メンバ登録対象となる。また、当該区間は、検索範囲を伴わずに属性情報が入力された場合に、メンバ検索対象となる。
【０１１６】
本実施形態のメンバ管理装置１０の第１の効果は、時間経過等とともにイベントデータの個数が増加するようなデータベースの利用に関し、偽陽性判定確率を増加させることなく、効率的にブルームフィルタをキャッシュとして利用できることである。その理由は、時間等の区間ごとにブルームフィルタとして使用するビット列３７を用意し、登録数３５の上昇を抑えるように、新たな区間を生成して当該区間に新たなビット列３７を生成するからである。
【０１１７】
本実施形態のメンバ管理装置１０の第２の効果は、時間等の検索範囲指定を含むメンバシップクエリを実現できることである。その理由は、時間等の検索値の区間ごとにブルームフィルタを分割し、検索の際に必要とするフィルタを特定し、検索処理を行うためである。
【０１１８】
本実施形態のメンバ管理装置１０の第３の効果は、メンバ管理装置１０がブルームフィルタの記憶容量を無駄にしないことである。その理由は、登録されているメンバの数に比して、ビット列３７が大きすぎる場合に圧縮するからである。
【０１１９】
本実施形態のメンバ管理装置１０の第４の効果は、効率よくブルームフィルタの拡張／圧縮を行うことである。その理由は、ブルームフィルタとして使用するビット列３７のサイズ３３を定数a×２のべき乗に設定し、拡張／圧縮処理を簡単にしているためである。メンバ管理装置１０は、ブルームフィルタの拡張／圧縮処理において、ハッシュ値の計算を省くことができ、さらに、単純なビット操作により更新が実行できる。
【０１２０】
以下は、本発明の第２の実施形態にかかるメンバ管理装置１０の説明である。本実施形態のメンバ管理装置１０は、範囲の定まった（例えば、開始時刻と終了時刻等が定まった）区間のビット列３７にメンバを追加しても、偽陽性判定確率の上昇を抑えつつ効率的にメンバを検索出来る。従って、本実施形態のメンバ管理装置１０は、年齢や温度のような一般に有界な値を検索範囲に使用する場合に適している。
【０１２１】
図１０は、第２の実施形態にかかるメンバ記憶部２２の構成を示す図である。本実施形態のメンバ記憶部２２の各メンバエントリ４１はペア情報４３に加え、メンバポインタ４４を格納する。メンバポインタ４４は、各イベントデータまたは各メンバへのアクセス情報である。メンバポインタ４４は、例えば、メンバ自体でも良いしイベントＤＢ２６に格納されているイベントデータのアドレスでも良い。
【０１２２】
本実施形態において、イベント生成装置１２が送信する検索値は温度等である。第１の実施形態のような場合には、検索値は過去のある時点の時刻であってもよい。検索値はイベントデータの属性値のひとつ（例えば、イベントデータが属性値として温度を包含する）でも良い。以降、検索値はイベントデータの属性値のひとつであるとする。
【０１２３】
本実施形態の登録手段２０は、図６の登録処理においてメンバ生成（Ｓ１０１）後、フィルタ記憶部２３から、入力検索値を範囲情報３２の範囲内に含む区間エントリ３０を特定して、当該エントリのポインタ３６からビット列３７を取得する（Ｓ１０２）。ここで、特定した区間を第１の区間とする。
【０１２４】
なお、検索値がイベントデータの属性値のひとつであって、当該属性値が省略されたイベントデータが入力された場合、登録手段２０は、範囲情報３２が無効な区間エントリ３０からビット列３７を取得する。
【０１２５】
図１１は、第２の実施形態にかかる登録手段２０（フィルタ生成登録処理）の動作フローチャートである。本処理に於いて、登録手段２０は第１の区間を分割して２つの区間（第２の区間と第３の区間）とそれぞれの区間のビット列３７を生成する。
【０１２６】
登録手段２０は、第２の区間用にファイル記憶部２３に区間エントリ３０、ビット列３７を、メンバ記憶部２２に区間行４０を新たに生成する（Ｓ６０１）。ビット列３７は、初期ビット数で生成され全ビットＯＦＦで初期化される。許容数３４は、許容表５０から取得された初期ビット数対応の値を格納する。登録数３５は０に設定される。
【０１２７】
なお、第３の区間の区間エントリ３０、ビット列３７、区間行４０は、第１の区間のものが流用される。流用せず、登録手段２０が新たに生成しても良い。
【０１２８】
登録手段２０は、新たに作成した区間エントリ３０に第２の区間の範囲情報３２を、第１の区間の区間エントリ３０に第３の区間の範囲情報３２をそれぞれ格納する（Ｓ６０２）。例えば、第１の区間の中央値を境界値として第１の区間を分割すると、登録手段２０は、第１の区間の開始値と中央値を第２の区間の範囲情報３２に格納し、中央値と第１の区間の終了値を第３の区間の範囲情報３２に格納する。境界値は他の値であっても構わない。
【０１２９】
登録手段２０は、第１の区間のビット列３７の全ビットをＯＦＦで初期化する。また、登録手段２０は第１の区間の区間エントリ３０の登録数３５を０に設定する（Ｓ６０３）。
【０１３０】
登録手段２０は、メンバ記憶部２２の第１の区間のメンバポインタ４４経由で、イベントＤＢ２６内のイベントデータにアクセスして、各イベントデータからメンバを生成する（Ｓ６０４）。
【０１３１】
登録手段２０は、生成されたメンバから検索値を取り出して、第２の区間に属するか判断する（Ｓ６０５）。メンバが第２の区間に属せば（Ｓ６０５でＹ）、登録手段２０は当該メンバを第２の区間に登録する（Ｓ６０６）。具体的に、登録手段２０は、第２の区間のビット列３７に当該メンバを登録し、登録数３５を１加算する。さらに登録手段２０は、メンバ記憶部２２の第２の区間の区間行４０に当該メンバのメンバエントリ４１を追加して、当該メンバのペア情報４３を新たに作成して格納する。同手段は、追加したメンバエントリ４１に第１の区間の区間行４０の当該メンバのメンバエントリ４１のメンバポインタ４４をコピーし、第１の区間の当該メンバのメンバエントリ４１を削除する。
【０１３２】
メンバが第３の区間に属せば（Ｓ６０５でＮ）、登録手段２０は当該メンバを第３の区間に登録する（Ｓ６０７）。具体的に、登録手段２０は、第３の区間のビット列３７に当該メンバを登録し、登録数３５を１加算する。
【０１３３】
登録手段２０は、第１の区間に登録されていた全メンバの処理が終了すると（Ｓ６０８でＹ）、フィルタ生成登録処理を終了する。
【０１３４】
本実施形態は、他の点に於いて、第１の実施形態と同じである。
【０１３５】
本実施形態のメンバ管理装置１０は、範囲の定まった区間のビット列３７にメンバを追加しても、偽陽性判定確率の上昇を抑えつつ効率的にメンバを検索出来る。その理由は、区間ごとにブルームフィルタとして使用するビット列３７を用意し、登録数３５の上昇を抑えるように、区間を分割して当該分割区間の各々に新たなビット列３７を生成するからである。
【０１３６】
図１２は、第３の実施形態にかかるメンバ管理システム６０の全体構成図である。本実施形態にかかるメンバ管理システム６０は、メンバ管理装置１０、メンバ検索装置６１、イベント生成装置１２および検索端末１３を包含する。
【０１３７】
本実施形態のメンバ管理装置１０は検索部２１を備えない。検索部２１は、メンバ管理装置１０とフィルタ記憶部２３を共有するメンバ検索装置６１に包含されている。本実施形態のメンバ管理装置１０は負荷軽減が可能である。
【０１３８】
図１３は、メンバ管理装置１０の基本構成図である。
【０１３９】
メンバ管理装置１０は、検索値がとりうる範囲を分割した区間ごとに、区間の範囲情報３２とビット列３７を格納するフィルタ記憶部２３と、ａ）検索値と範囲情報３２から特定される第１の区間に対応するビット列３７（第１のビット列）が生成条件を満たさなければ、入力データである又は入力データから生成したメンバを第１のビット列に登録し、ｂ）生成条件を満たせば、新たな区間（第２の区間）の範囲情報３２とビット列３７（第２のビット列）を生成してフィルタ記憶部２３に格納し、第１の区間の範囲情報３２を第１の区間と第２の区間が重複しないように変更して（変更後を第３の区間とする）、当該メンバを第３の区間に対応するビット列３７または第２のビット列に登録する登録手段２０、を備える。
【符号の説明】
【０１４０】
１０    メンバ管理装置
１１    コンピュータ
１２    イベント生成装置
１３    検索端末
２０    登録手段
２１    検索手段
２２    メンバ記憶部
２３    フィルタ記憶部
２４    圧縮手段
２５    ＤＢＭＳ
２６    イベントＤＢ
２９    メンバ管理プログラム
３０    区間エントリ
３１    区間ＩＤ
３２    範囲情報
３３    サイズ
３４    許容数
３５    登録数
３６    フィルタポインタ
３７    ビット列
４０    区間行
４１    メンバエントリ
４３    ペア情報
４４    メンバポインタ
５０    許容表
６０    メンバ管理システム
６１    メンバ検索装置
【図１】
2010266952.tif 000007
【図２】
2010266952.tif 000008
【図３】
2010266952.tif 000009
【図４】
2010266952.tif 000010
【図５】
2010266952.tif 000011
【図６】
2010266952.tif 000012
【図７】
2010266952.tif 000013
【図８】
2010266952.tif 000014
【図９】
2010266952.tif 000015
【図１０】
2010266952.tif 000016
【図１１】
2010266952.tif 000017
【図１２】
2010266952.tif 000018
【図１３】
2010266952.tif 000019