(57)【要約】【課題】シャード・データベースのシャード・テーブルにレコードを記憶する、およびそこからレコードを検索するためのコンピュータ実装方法、コンピュータ・プログラム製品およびシステムを提供する。【解決手段】シャード・データベースは、複数のデータベース・シャードを含む。データベース・シャードは、それぞれが、シャード・テーブルのレコードの部分集合を記憶するように構成される。データベース・シャードは、また、それぞれが、それぞれのブルーム・フィルタと関連する。複数のそれぞれのブルーム・フィルタのそれぞれと共に用いるために、記憶されるレコードのシャーディング・キーのそれぞれの表現を生成することによって、レコードが、シャード・テーブルに挿入される。次に、複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現との間のハミング距離が計算され、レコードを記憶するためのデータベース・シャードが、計算されたハミング距離に基づき、それらのデータベース・シャードの中から選択される。【選択図】図１
2021500649.tif 000002
【特許請求の範囲】
【請求項１】
シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ実装方法であって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記コンピュータ実装方法が、
記憶される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得することと、
複数の前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成することと、
前記複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるための前記シャーディング・キーの前記それぞれの表現との間のハミング距離を計算することと、
前記計算されたハミング距離に基づき、データベース・シャードを選択することと、
前記レコードを前記選択されたデータベース・シャードに記憶することと
を含む、コンピュータ実装方法。
【請求項２】
前記それぞれのブルーム・フィルタのそれぞれが、同じビット数と同じハッシュ関数とを用いる、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記それぞれのブルーム・フィルタのそれぞれが、カウンティング・フィルタである、請求項１に記載のコンピュータ実装方法。
【請求項４】
データベース・シャードを選択することが、前記計算されたハミング距離が前記計算されたハミング距離の中の最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードを選択することを含む、請求項１に記載のコンピュータ実装方法。
【請求項５】
前記計算されたハミング距離が前記計算されたハミング距離の中の最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードを選択することが、前記計算されたハミング距離が最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードの中から前記データベース・シャードをランダムに選択することを含む、請求項４に記載のコンピュータ実装方法。
【請求項６】
前記シャード・データベースが、それぞれのデータベース・シャードが新たなレコードを記憶するために利用可能であるかまたは利用不可能であるかに関する指示をさらに含み、前記シャーディング・キーのそれぞれの表現が生成される前記複数のブルーム・フィルタが、使用不可能であると示されているデータベース・シャードと関連するどのブルーム・フィルタも含まない、請求項１に記載のコンピュータ実装方法。
【請求項７】
前記シャーディング・キーの表現がそのために生成される前記複数のブルーム・フィルタが、使用可能であると指示されている全部のデータベース・シャードと関連する前記それぞれのブルーム・フィルタを含む、請求項６に記載のコンピュータ実装方法。
【請求項８】
前記シャード・データベースが、前記データベース・シャードのそれぞれの中に挿入されたレコードのそれぞれの個数をカウントするためのそれぞれの挿入カウンタをさらに含み、前記コンピュータ実装方法が、
前記選択されたデータベース・シャードのための前記挿入カウンタをインクリメントすることをさらに含む、請求項１に記載のコンピュータ実装方法。
【請求項９】
前記選択されたデータベース・シャードの中に挿入されたレコードの前記個数が所定の閾値を超えるかどうかを判断することと、
前記選択されたデータベース・シャードの中に挿入されたレコードの前記個数が所定の閾値を超えるかどうかを判断することに応答して、前記選択されたデータベース・シャードに、新たなレコードを記憶するためには利用不可能であるとのマークを付することと
をさらに含む、請求項８に記載のコンピュータ実装方法。
【請求項１０】
新たなデータベース・シャードと、関連するブルーム・フィルタとを前記シャード・データベースに追加することをさらに含む、請求項１に記載のコンピュータ実装方法。
【請求項１１】
シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ実装方法であって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記コンピュータ実装方法が、
検索される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得することと、
前記データベース・シャードのそれぞれと関連する前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成することと、
前記それぞれのブルーム・フィルタのうちのどれが、前記シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別することと、
前記レコードを見つけるために、前記識別されたブルーム・フィルタと関連する前記データベース・シャードをサーチすることと、
前記レコードを提供することと
を含む、コンピュータ実装方法。
【請求項１２】
前記それぞれのブルーム・フィルタのそれぞれが、同じビット数と同じハッシュ関数とを用いる、請求項１１に記載のコンピュータ実装方法。
【請求項１３】
シャード・データベースを記憶するためのシステムであって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記システムが、
それぞれが、前記複数のデータベース・シャードのうちの１つまたは複数を記憶するように構成されている、複数の計算システムと、
コントローラであって、
検索されるレコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得し、
前記データベース・シャードのそれぞれと関連する前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することにより、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成し、
前記それぞれのブルーム・フィルタのうちのどれが、前記シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別し、
前記レコードを見つけるため、前記識別されたブルーム・フィルタと関連する前記データベース・シャードをサーチし、
前記レコードを提供することにより、
前記シャード・データベースの前記シャード・テーブルから前記レコードを検索するように構成されている、前記コントローラと
を備える、システム。
【請求項１４】
前記それぞれのブルーム・フィルタのそれぞれが、同じビット数と同じハッシュ関数とを用いる、請求項１３に記載のシステム。
【請求項１５】
前記それぞれのブルーム・フィルタのそれぞれが、カウンティング・フィルタである、請求項１３に記載のシステム。
【請求項１６】
前記コントローラが、さらに、
記憶されるレコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得し、
複数の前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することにより、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成し、
前記複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるための前記シャーディング・キーの前記それぞれの表現との間のハミング距離を計算し、
前記計算されたハミング距離に基づき、データベース・シャードを選択し、
前記レコードを前記選択されたデータベース・シャードに記憶することによって、
前記シャード・データベースの前記シャード・テーブルに前記レコードを記憶するように構成されている、請求項１３に記載のシステム。
【請求項１７】
データベース・シャードを選択することが、前記計算されたハミング距離が前記計算されたハミング距離の中の最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードを選択することを含む、請求項１６に記載のシステム。
【請求項１８】
前記シャード・データベースが、それぞれのデータベース・シャードが新たなレコードを記憶するために利用可能であるかまたは利用不可能であるかに関する指示をさらに含み、前記シャーディング・キーのそれぞれの表現が生成される前記複数のブルーム・フィルタが、前記レコードを記憶するとき、使用不可能であると示されているデータベース・シャードと関連するどのブルーム・フィルタも含まない、請求項１６に記載のシステム。
【請求項１９】
前記シャード・データベースが、前記データベース・シャードのそれぞれに挿入されたレコードのそれぞれの個数をカウントするためのそれぞれの挿入カウンタをさらに含み、前記コントローラが、さらに、前記レコードが記憶されると前記選択されたデータベース・シャードのための前記挿入カウンタをインクリメントするように構成されている、請求項１６に記載のシステム。
【請求項２０】
前記コントローラが、さらに、
前記選択されたデータベース・シャードに挿入されたレコードの前記個数が所定の閾値を超えるかどうかを判断し、
前記選択されたデータベース・シャードに挿入されたレコードの前記個数が前記所定の閾値を実際に超えるとの判断に応答して、前記選択されたデータベース・シャードに、新たなレコードを記憶するために利用不可能であるとのマークを付す
ように構成されている、請求項１９に記載のシステム。
【請求項２１】
前記コントローラが、さらに、
前記シャード・データベースに、新たなデータベース・シャードと、関連するブルーム・フィルタとを追加するように構成されている、請求項１６に記載のシステム。
【請求項２２】
前記シャード・データベースが、前記データベース・シャードのそれぞれから削除されたレコードのそれぞれの個数をカウントするそれぞれの削除カウンタをさらに含む、請求項１６に記載のシステム。
【請求項２３】
前記コントローラが、さらに、
特定のデータベース・シャードから削除されたレコードの前記個数が当該データベース・シャードのためのそれぞれの所定の閾値を超えるかどうかを判断し、前記特定のデータベース・シャードから削除されたレコードの前記個数が当該データベース・シャードのための前記それぞれの所定の閾値を超えるとの判断に応答して、当該データベース・シャードに現に記憶されているレコードに基づき、当該データベース・シャードのための前記ブルーム・フィルタを再構築するように構成されている、請求項２２に記載のシステム。
【請求項２４】
シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ・プログラム製品であって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記コンピュータ・プログラム製品が、
プロセッサによって実行可能な第１のプログラム命令であって、前記プロセッサに、記憶される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを取得させる、前記第１のプログラム命令と、
前記プロセッサによって実行可能な第２のプログラム命令であって、前記プロセッサに、複数の前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成させる、前記第２のプログラム命令と、
前記プロセッサによって実行可能な第３のプログラム命令であって、前記プロセッサに、前記複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるための前記シャーディング・キーの前記それぞれの表現との間のハミング距離を計算させる、前記第３のプログラム命令と、
前記プロセッサによって実行可能な第４のプログラム命令であって、前記プロセッサに、前記計算されたハミング距離に基づき、データベース・シャードを選択させる、前記第４のプログラム命令と、
前記プロセッサによって実行可能な第５のプログラム命令であって、前記プロセッサに、前記レコードを前記選択されたデータベース・シャードに記憶させる、第５のプログラム命令と
がその上にエンコードされたコンピュータ可読記憶媒体を含む、コンピュータ・プログラム製品。
【請求項２５】
シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ・プログラム製品であって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記コンピュータ・プログラム製品が、
プロセッサによって実行可能な第１のプログラム命令であって、前記プロセッサに、検索される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを取得させる、前記第１のプログラム命令と、
前記プロセッサによって実行可能な第２のプログラム命令であって、前記プロセッサに、前記データベース・シャードのそれぞれと関連する前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成させる、前記第２のプログラム命令と、
前記プロセッサによって実行可能な第３のプログラム命令であって、前記プロセッサに、前記それぞれのブルーム・フィルタのうちのどれが、前記シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別させる、前記第３のプログラム命令と、
前記プロセッサによって実行可能な第４のプログラム命令であって、前記プロセッサに、前記レコードを見つけるために、前記識別されたブルーム・フィルタと関連する前記データベース・シャードをサーチさせる、前記第４のプログラム命令と、
前記プロセッサによって実行可能な第５のプログラム命令であって、前記プロセッサに、前記レコードを提供させる、前記第５のプログラム命令と、
がその上にエンコードされたコンピュータ可読記憶媒体を含む、コンピュータ・プログラム製品。
【請求項２６】
シャード・データベースのシャード・テーブルにレコードを記憶するためのシステムであって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記システムが、
記憶される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得し、
複数の前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成し、
前記複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるための前記シャーディング・キーの前記それぞれの表現との間のハミング距離を計算し、
前記計算されたハミング距離に基づき、データベース・シャードを選択し、および
前記レコードを前記選択されたデータベース・シャードに記憶するように、構成可能である、システム。
【請求項２７】
シャード・データベースのシャード・テーブルからレコードを検索するためのシステムであって、前記シャード・データベースは、複数のデータベース・シャードを含み、前記データベース・シャードのそれぞれは、前記シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、前記システムが、
検索される前記レコードのためのシャーディング・キーであって、前記レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得し、
前記データベース・シャードのそれぞれと関連する前記それぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数を前記シャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるための前記シャーディング・キーのそれぞれの表現を生成し、
前記それぞれのブルーム・フィルタのうちのどれが、前記シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別し、
前記レコードを見つけるために、前記識別されたブルーム・フィルタと関連する前記データベース・シャードをサーチし、
前記レコードを提供するように構成可能である、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シャード・データベースに関する。詳しくは、本発明は、シャード・データベースのシャード・テーブルにレコードを記憶する、およびそこからレコードを検索するための方法、システム、およびコンピュータ・プログラム製品に関する。
【背景技術】
【０００２】
データベースのシャーディングとは、データベースを、データベース・シャードとして知られている、いくつかのより小さな部分に分けるための知られている技術である。この技術は、また、水平パーティショニング（horizontal partitioning）と称されることもある。
【０００３】
一般に、シャーディングがデータベースに適用されるときには、データベース・シャードのそれぞれが、他のデータベース・シャードの全部と同じスキーマ（これは、データベース全体またはその何らかの部分集合のスキーマである可能性がある）を含むように構成される。換言すると、データベース・シャードのそれぞれが、他のデータベース・シャードのそれぞれと同じテーブル定義を含む。データベース・シャーディング技術が適用される間には、あるテーブルが、シャード・テーブルとなるように構成されることがあり得る。これは、そのようなテーブルのためのレコードは、それぞれのデータベース・シャードにおけるそのようなテーブルに記憶されているレコード（またはデータ）がそれぞれのデータベース・シャードに対して異なるように、データベース・シャードの間で分散される、ということを意味する。データベース・シャードの間でのシャード・テーブルのレコードの分散は、典型的には、シャード・テーブルの１つまたは複数のフィールドから導かれるシャーディング・キーの値に基づいて、決定される。たとえば、シャーディング・キーは、シャード・テーブルの「ｉｄ」フィールドとして定義され得るのであるが、第１の範囲に属する「ｉｄ」を有するレコードが、第１のデータベース・シャードにおけるテーブルに記憶され得るのに対し、他方で、異なる第２の範囲に属する「ｉｄ」を有するレコードは、第２のデータベース・シャードにおけるテーブルに記憶され得る。したがって、たとえデータベース・シャードが相互に同じスキーマを有する場合であっても、それらは、そのスキーマの内部のいずれかのシャード・テーブルに対するレコードの部分集合を含むだけである。シャード・テーブルからレコードを検索するためには、どのデータベース・シャードが関心対象であるレコードを記憶しているのかを決定することが、最初に必要である。これは、たとえば、そのレコードが第１のデータベース・シャードに記憶されるべきであったのか、または第２のデータベース・シャードに記憶されるべきだったのかを判断するために、シャーディング・キーが第１の範囲に属するのか、または第２の範囲に属するのかを判断することによって、達成され得る。
【０００４】
シャード・テーブルに加え、シャード・データベースは、また、データベース・シャードのそれぞれの間で複製される複製テーブルも含み得る。これは、データベース・シャードのそれぞれが、それらの複製テーブルのための全部のレコードを含む、ということを意味する。シャード・データベースのテーブルのうちのいくつかを複製テーブルとして含むことによって、異なるデータベース・シャードの間で実行される必要のあるルックアップの回数を減少させることが可能であり、それによって、シャード・データベースのパフォーマンスを向上させることになる。
【０００５】
データベースのシャーディングは、データベースのパフォーマンスを向上させるために、用いられ得る。たとえば、データベースが非常に多数のレコードを記憶する、または非常に多数のクエリを受け取る場合に、別個の計算機での動作が可能ないくつかのデータベース・シャードを作成するように、データベースのシャーディングが用いられ得るのであって、それにより、多数のレコードを記憶するまたは多数のクエリに応答するためのデータベース・システムの容量を向上させることになる。これは、それぞれのデータベース・シャードが記憶される計算機が、そのデータベース・シャードに記憶されているデータの部分集合に関するクエリを独立に処理できるからである。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データベースのシャーディングから実現される利点を最大化するためには、データベース・シャードのそれぞれのために要求されるストレージ要件と計算能力とがおおよそ均衡するように、シャード・テーブルのレコードが、データベース・シャードのそれぞれの間で均等に分散されることが望ましい。さらに、計算能力またはストレージ要件におけるいずれかの増加が充足されることを許容されるように、追加的なデータベース・シャードがシャード・データベースに動的に追加されることを可能にすることが望ましい。
【０００７】
典型的には、シャード・データベースにおけるシャード・テーブルにレコードを配分するための方法は、結果的に、データベース・シャードのそれぞれのために要求されるストレージ要件と計算能力とが均衡するように、ランダムに分散されたレコードを生じさせることはない。たとえば、「ｉｄ」フィールドが、第１の範囲に属するのか、それとも第２の範囲に属するのか、に基づいてレコードをシャードの間で分散させるという方法は、より低い「ｉｄ」を有するレコードが、同じデータベース・シャードに集められ得るということを意味する。より古いレコードがより低い「ｉｄ」を有する、というように、「ｉｄ」がインクリメンタルに割り当てられる場合には、より新しいレコードの方がより規則的にクエリを受ける場合に、データベース・シャードの間で計算負荷に関する不均衡が生じることになり得る。
【０００８】
加えて、シャード・データベースにおけるシャード・テーブルにレコードを配分するための典型的な方法は、データベース・シャードが追加されるときに、追加的なデータベース・シャードが動的に追加されることを許容しないか、または、結果的に複雑性を増大させるかのいずれかであり、シャード・データベースからレコードを検索するときのパフォーマンスを低下させる。
【課題を解決するための手段】
【０００９】
本発明のある態様によると、シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ実装方法が提供される。シャード・データベースは、複数のデータベース・シャードを含む。データベース・シャードは、それぞれが、シャード・テーブルのレコードの部分集合を記憶するように構成される。データベース・シャードは、また、それぞれのブルーム・フィルタと関連している。ブルーム・フィルタは、特定のシャーディング・キーと関連するレコードが、それが関連するデータベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成される。この方法は、記憶されるレコードのためのシャーディング・キーを取得することを含む。このシャーディング・キーは、レコードの１つまたは複数のフィールドに基づく。この方法は、さらに、複数のそれぞれのブルーム・フィルタのそれぞれと共に用いるためのシャーディング・キーのそれぞれの表現を生成することを含む。与えられたブルーム・フィルタのための表現が、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数をシャーディング・キーに適用することによって、生成される。この方法は、さらに、複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現との間のハミング距離を計算することを含む。この方法は、さらに、計算されたハミング距離に基づき、データベース・シャードを選択することと、レコードを選択されたデータベース・シャードに記憶することとを含む。
【００１０】
ブルーム・フィルタは、ある要素が、ある集合の元であるかまたは元でないかをテストするのに用いられ得る、既知のデータ構造である。ブルーム・フィルタは、固定長のビット・ベクトル（または、アレイ）におけるその集合に含まれるかどうかを表す確率的なデータ構造である。最初は、ブルーム・フィルタによって表される集合が空集合であるときには、ベクトルにおける各ビットは「０」である。固定長のビット・ベクトルに加え、各ブルーム・フィルタは、それ自体と関連する所定の個数の異なるハッシュ・アルゴリズムを有する。これらのハッシュ・アルゴリズムは、それぞれが、任意の与えられた要素を、ベクトルにおける特定のビットにマッピングする。ブルーム・フィルタによって表される集合に、要素が追加されると、ブルーム・フィルタは、各ハッシュ・アルゴリズムを、それぞれの追加された要素に適用し、追加された要素がそのハッシュ・アルゴリズムによってマッピングされるビット・ベクトルの対応するビットを、「１」に設定する。
【００１１】
ある特定の要素がブルーム・フィルタによって表される集合に属するかどうかをテストするために、ハッシュ・アルゴリズムが、その要素に適用され、その要素がハッシュ・アルゴリズムによってマッピングされたビット・ベクトルのビットが、点検される。その要素がマッピングされたビットのいずれかが「０」である場合には、その要素は、ブルーム・フィルタによって表される集合に属さない。しかし、その要素がマッピングされたビットがすべて「１」である場合には、その要素は、ブルーム・フィルタによって表される集合に属する。
【００１２】
ブルーム・フィルタは、ある特定の要素が集合に属さないことを確定的に判断するのに用いることが可能であるが、実際には属していないときに、ある特定の要素が集合に属すると誤って示す偽陽性を返す場合があり得る。これは、やはりそれらのビットにマッピングされる他の要素がその集合に挿入されていることを通じて、その要素がマッピングされるビットが「１」に設定される場合があり得るからである。換言すると、ブルーム・フィルタは、ある与えられた要素に対して、２つの結論、すなわち、（１）その要素は、ブルーム・フィルタによって表される集合に属さない、または、（２）その要素は、ブルーム・フィルタによって表される集合に属する可能性がある、のうちの一方を提供し得るのである。ブルーム・フィルタが偽陽性を提供する蓋然性は、ブルーム・フィルタによって用いられるビット・ベクトルにおけるビット数と、それによって用いられる異なるハッシュ・アルゴリズムの個数とによって、決定される。これらのパラメータは、したがって、ブルーム・フィルタから偽陽性を受け取る所望の蓋然性を提供するためにブルーム・フィルタを実装するときに、選択することが可能である。
【００１３】
ブルーム・フィルタが集合への所属の有無を表す態様のため、ブルーム・フィルタによって表される集合から項目を削除することは、可能でない。しかし、表されている集合から項目が削除されることを可能にするブルーム・フィルタにおける変動は、知られている。特に、カウンティング・フィルタは、ベクトルにおける各ビットを、代わりにｎビットのカウンタに拡張するタイプのブルーム・フィルタであり、挿入された要素によって各ビットがマッピングされた回数が記録されることを可能にする。これにより、削除される要素がハッシュ・アルゴリズムによってマッピングされるベクトルにおける位置を決定し、それらの位置におけるｎビットのカウンタをデクリメントすることによって、カウンティング・フィルタによって表される集合から要素が削除されることが可能になる。
【００１４】
ハミング距離とは、長さの等しい２つのストリングの間の差に関する尺度である。ハミング距離は、一方のストリングを他方のストリングに変化させるのに要求される置換の最小回数（すなわち、２つのストリングが相互に異なっている位置の個数）を測定する。たとえば、４ビットのバイナリ・ストリングである１００１と１０１０との間のハミング距離は２であるが、その理由は、最後の２ビットが相互に異なり、他方で、最初の２ビットは同じであるから、である。
【００１５】
本出願の発明者たちは、シャード・データベースにおけるレコードの分散を向上させるために、ブルーム・フィルタを、ハミング距離と共に、シャード・データベースにおいて用いることが可能である、ということを認識したのである。特に、各データベース・シャードと関連するブルーム・フィルタとそのフィルタと共に用いるためのシャーディング・キーの表現との間のハミング距離に基づいて、レコードを記憶するデータベース・シャードを選択することにより、提案されている実施形態は、シャード・データベースのデータベース・シャードの間で、レコードを、より均一に分散させることができる。これで、シャード・データベースの性能を向上させることができる。
【００１６】
さらに、そのようなハミング距離に基づいてデータベース・シャードの間でレコードを分散させる（または、割り当てる）ことで、データベース・シャードからのレコードの検索も、向上させることが可能になる。たとえば、レコードをデータベース・シャードに割り当てるためにハミング距離を用いることにより、類似のデータは同じ場所に配置される可能性が、より高くなる。次に、ブルーム・フィルタは、特定のレコードを記憶しないデータベース・シャードを削除する非常に迅速な方法を提供する。
【００１７】
データベース・シャードとそれぞれ関連する各ブルーム・フィルタは、オプションであるが、同じビット数と同じハッシュ関数を用いることができる。用いられるビット数とハッシュ関数とに関してブルーム・フィルタを同じにすることによって、シャーディング・キーの１つの表現だけを生成することが必要になる。この表現は、各ブルーム・フィルタと共に用いるのに適切であり得る。
【００１８】
それぞれのブルーム・フィルタは、それぞれが、オプションであるが、カウンティング・フィルタであり得る。カウンティング・フィルタを用いることで、レコードを削除することが可能になり、それらの削除をカウンティング・フィルタによって表すことが可能になるために、削除されるレコードのためのシャーディング・キーの表現に対するフィルタ・マッチングの結果として、偽陽性が提供されることを回避できる。
【００１９】
選択されるデータベース・シャードは、計算されたハミング距離が計算されたハミング距離の中で最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードであり得る。ブルーム・フィルタが、そのブルーム・フィルタと共に用いられるレコードの表現からのハミング距離が最小であるようなデータベース・シャードにレコードを記憶することにより、各ブルーム・フィルタを相互から、より明確に分けて保持することができる、と考えられる。この結果として、平均すると、特定のレコードに対するマッチを示すブルーム・フィルタがより少数となり、レコードを検索するためにサーチされる必要があるデータベース・シャードの個数を削減させる。この技術は、また、データベース・シャードのそれぞれへのレコードの割り当てを均衡させるように機能し得るのであって、それにより、レコードが発散し過ぎることが回避される。
【００２０】
レコードをデータベース・シャードの間で分散させるために提案されているアプローチは、また、各データベース・シャードと関連するブルーム・フィルタに対する偽陽性を減少させることができる。この理由は、ブルーム・フィルタと共に用いるためのそれらの表現という点で最も類似しているレコードは、同じデータベース・シャード上に記憶される可能性がより高く、したがって、シャード・データベースにおいて同じブルーム・フィルタによって表される可能性が、より高いからである。偽陽性の比率が低下することで、平均では、特定のレコードを検索するためにサーチする必要があるデータベース・シャードの個数が少なくなり得る。
【００２１】
計算されたハミング距離が計算されたハミング距離の中の最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードを選択することは、計算されたハミング距離が最小値であるそれぞれのブルーム・フィルタと関連するデータベース・シャードの中からデータベース・シャードをランダムに選択することを含み得る。これは、複数のブルーム・フィルタがシャーディング・キーのそれらのそれぞれの表現への最小のハミング距離を有するときに、データベース・シャードを選択する有効な方法を提供することができる。
【００２２】
シャード・データベースは、オプションであるが、それぞれのデータベース・シャードが新たなレコードを記憶するために利用可能であるかまたは利用不可能であるかに関する指示をさらに含み得る。この場合に、シャーディング・キーのそれぞれの表現が生成される複数のブルーム・フィルタは、使用不可能であると示されているデータベース・シャードと関連するどのブルーム・フィルタも含まないことがあり得る。これは、記憶し過ぎているすなわち過負荷状態のデータベース・シャードは、どのような追加的なレコードを記憶することに関しても考慮から排除することができ、各データベース・シャードの性能を最小レベルよりは上に維持するのに役立ち得る。
【００２３】
いくつかの実施形態では、オプションであるが、使用可能であると示されている全部のデータベース・シャードと関連するそれぞれのブルーム・フィルタと共に用いられるシャーディング・キーの表現が、生成され得る。このようにして、提案されている実施形態によると、利用可能なデータベース・シャードの全体でのレコードのよりよい分散が保証され得る。
【００２４】
シャード・データベースは、オプションであるが、データベース・シャードのそれぞれの中に挿入されたレコードのそれぞれの個数をカウントするための、それぞれの挿入カウンタをさらに含むことがある。提案されている実施形態では、レコードを記憶するように選択されたデータベース・シャードのための挿入カウンタを、インクリメントすることができる。この挿入カウンタは、したがって、各データベース・シャードの中に挿入されたレコードの個数の計数を、提供し得る。
【００２５】
提案されている実施形態は、オプションであるが、選択されたデータベース・シャードの中に挿入されたレコードの個数が所定の閾値を超えるかどうかを判断して、超える場合には、選択されたデータベース・シャードに、新たなレコードを記憶するためには利用不可能であるとのマークを付することを、さらに含むことがあり得る。このようにして、実施形態によると、データベース・シャードが、シャード・データベースの性能を低下させ得るような態様で過剰に用いられる状態になるのを回避することができる。
【００２６】
実施形態によると、オプションであるが、新たなデータベース・シャードと、関連するブルーム・フィルタとをシャード・データベースに追加することが、さらに含まれ得る。レコードをシャード・データベースに記憶するための提案されている概念は、新たなデータベース・シャードがシャード・データベースに挿入されることに関して柔軟性を提供し得る。新たなデータベース・シャードをシャード・データベースの中に動的に挿入することによって、シャード・データベースの容量と性能とを、需要を満たすために、増大させることができる。また、挿入されたレコードを記憶するデータベース・シャードを選択するためにハミング距離を用いることにより、新たに挿入されたデータベース・シャードを組み入れるために自動的な再均衡化がなされるように、データベース・シャードの全体でのレコードの配分が可能になり得る。
【００２７】
本発明の別の態様によると、シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ実装方法が提供される。シャード・データベースは、複数のデータベース・シャードを含む。データベース・シャードは、それぞれが、シャード・テーブルのレコードの部分集合を記憶するように構成されている。データベース・シャードは、また、それぞれがそれぞれのブルーム・フィルタと関連する。ブルーム・フィルタは、特定のシャーディング・キーと関連するレコードが、それと関連するデータベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されている。この方法は、検索されるレコードのためのシャーディング・キーを取得することを含む。このシャーディング・キーは、レコードの１つまたは複数のフィールドに基づく。この方法は、さらに、複数のデータベース・シャードと関連する各ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現を生成することを含む。得られたブルーム・フィルタの表現は、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数をシャーディング・キーに適用することによって、生成される。この方法は、さらに、それぞれのブルーム・フィルタのうちのどれが、シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別することを含み得る。この方法は、さらに、レコードを見つけて提供するために、識別されたブルーム・フィルタと関連するデータベース・シャードをサーチすることを含み得る。
【００２８】
各データベース・シャードと関連するブルーム・フィルタを使用することにより、残存しているデータベース・シャードに関する徹底的なサーチが行われる必要がある前に、多数のデータベース・シャードを非常に迅速かつ効率的に考慮から除くことができる可能性が高くなる。これにより、シャード・データベースのシャード・テーブルからレコードを検索する効率を向上させることができる。
【００２９】
データベース・シャードとそれぞれ関連するブルーム・フィルタは、それぞれが、オプションではあるが、同じビット数と同じハッシュ関数とを用いることが表される。それらが用いるビット数とハッシュ関数という点でブルーム・フィルタを同一にすることにより、シャーディング・キーの表現は、ただ１つだけ、生成する必要があり得る。そして、そのような表現は、各ブルーム・フィルタと共に用いるのに適切であり得る。
【００３０】
本発明の別の態様によると、シャード・データベースを記憶するためのシステムが提供される。シャード・データベースは、複数のデータベース・シャードを含む。データベース・シャードは、それぞれが、シャード・テーブルのレコードの部分集合を記憶するように構成されている。データベース・シャードは、また、それぞれが、それぞれのブルーム・フィルタと関連する。ブルーム・フィルタは、特定のシャーディング・キーと関連するレコードがそれと関連するデータベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されている。このシステムは、複数の計算システムを含む。それぞれの計算システムは、複数のデータベース・シャードのうちの１つまたは複数を記憶するように構成されている。このシステムは、さらに、シャード・データベースのシャード・テーブルからレコードを検索するための上述された方法に従って、シャード・データベースのシャード・テーブルからレコードを検索するように構成されたコントローラを含む。
【００３１】
このコントローラは、オプションであるが、シャード・データベースのシャード・テーブルにレコードを記憶するための上述された方法に従って、シャード・データベースのシャード・テーブルにレコードを記憶するように構成され得る。
【００３２】
シャード・データベースは、さらに、オプションであるが、それぞれの削除カウンタを含み得る。この削除カウンタは、それらのそれぞれのデータベース・シャードから削除されたレコードの個数の計数を維持し得る。コントローラは、さらに、オプションであるが、特定のデータベース・シャードから削除されたレコードの個数が当該データベース・シャードのためのそれぞれの所定の閾値を超えるかどうかを判断するように構成することができる。削除されたレコードの個数がそれぞれの所定の閾値を超える場合には、コントローラは、当該データベース・シャードに現に記憶されているレコードに基づいて、当該データベース・シャードに対するブルーム・フィルタを再構成することができる。削除の回数が所定の閾値をいったん超えるときに、データベース・シャードのためにブルーム・フィルタを再構築することによって、コントローラは、ブルーム・フィルタから結果的に生じる可能性が高い、削除されたレコードに基づいてマッチを示す偽陽性の個数を減らすことができる。
【００３３】
本発明の別の態様によると、シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ・プログラム製品が、提供される。このコンピュータ・プログラム製品は、コンピュータ可読記憶媒体を構成している。コンピュータ可読記憶媒体は、その上にプログラム命令が記憶されていて、これは、プロセッサによって実行可能である。プログラム命令は、シャード・データベースのシャード・テーブルにレコードを記憶するための上述された方法のステップを遂行するように、プロセッサによって実行可能である。
【００３４】
本発明の別の態様によると、シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ・プログラム製品が、提供される。このコンピュータ・プログラム製品は、コンピュータ可読記憶媒体を構成している。コンピュータ可読記憶媒体は、その上にプログラム命令が記憶されていて、これは、プロセッサによって実行可能である。プログラム命令は、シャード・データベースのシャード・テーブルからレコードを検索するための上述された方法のステップを遂行するように、プロセッサによって実行可能である。
【００３５】
別の態様により、シャード・データベースのシャード・テーブルにレコードを記憶するためのシステムが提供されるが、シャード・データベースは、複数のデータベース・シャードを含み、データベース・シャードのそれぞれは、シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、このシステムは、記憶されるレコードのためのシャーディング・キーであって、レコードの１つまたは複数のフィールドに基づくシャーディング・キーを取得し、複数のそれぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数をシャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現を生成し、複数のブルーム・フィルタのそれぞれの現在値と当該ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現との間のハミング距離を計算し、計算されたハミング距離に基づき、データベース・シャードを選択し、および、レコードを選択されたデータベース・シャードに記憶するように、構成可能である。
【００３６】
別の態様により、シャード・データベースのシャード・テーブルからレコードを検索するためのシステムが提供されるが、シャード・データベースは、複数のデータベース・シャードを含み、データベース・シャードのそれぞれは、シャード・テーブルのレコードの部分集合を記憶するように構成され、特定のシャーディング・キーと関連するレコードが当該データベース・シャードに記憶されていることがあり得るかどうかに関する指示を提供するように構成されたそれぞれのブルーム・フィルタと関連し、このシステムは、検索されるレコードのためのシャーディング・キーであって、レコードの１つまたは複数のフィールドに基づくシャーディング・キーを、取得し、データベース・シャードのそれぞれと関連するそれぞれのブルーム・フィルタのそれぞれのために、当該ブルーム・フィルタによって用いられる１つまたは複数のハッシュ関数をシャーディング・キーに適用することによって、当該ブルーム・フィルタと共に用いるためのシャーディング・キーのそれぞれの表現を生成し、それぞれのブルーム・フィルタのうちのどれが、シャーディング・キーのそれらのそれぞれの表現とマッチするかを識別し、レコードを見つけるために、識別されたブルーム・フィルタと関連するデータベース・シャードをサーチし、レコードを提供するように構成可能である。
【００３７】
次に、本発明の実施形態が、単に例によって、以下の添付された図面を参照して、説明される。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施形態がその上で動作し得る例示的なコンピュータ・システムの概略的図解である。
【図２】本発明の実施形態による例示的なシャード・データベースの概略的図解である。
【図３】本発明の実施形態による、シャード・データベースのシャード・テーブルにレコードを記憶するためのコンピュータ実装方法の概略的図解である。
【図４】本発明の実施形態による、シャード・データベースのシャード・テーブルからレコードを検索するためのコンピュータ実装方法の概略的図解である。
【発明を実施するための形態】
【００３９】
以下の説明と図面において、本発明のある特定の実施形態が説明される。しかし、本発明は説明される実施形態に限定されないこと、いくつかの実施形態は以下で説明される特徴の全部を含むことはないことが、理解されるであろう。しかし、添付の特許請求の範囲に記載されている本発明のより広い思想および範囲から逸脱することなく、本明細書において様々な修正および変更を行い得ることは明らかであろう。また、本発明の実施形態がある方法を構築している本出願のコンテキストでは、そのような方法は、コンピュータによる実行のためのプロセス（すなわち、コンピュータ実装方法）であることを理解されたい。この方法の様々なステップは、したがって、コンピュータ・プログラムの様々な部分（たとえば、１つまたは複数のアルゴリズムの様々な部分）を反映する。
【００４０】
添付の図面の図１は、本発明の実施形態がその上で動作し得る例示的なコンピュータ・システム１００を概略的に図解している。例示的なコンピュータ・システム１００は、コンピュータ可読記憶媒体１０２と、メモリ１０４と、プロセッサ１０６と、１つまたは複数のインターフェース１０８とを備えており、これらは、すべて、１つまたは複数の通信バス１１０を経由して相互にリンクされている。例示的なコンピュータ・システム１００は、たとえば、デスクトップ・コンピュータ、パーソナル・コンピュータ、ラップトップ、タブレット、スマートフォン、スマートウォッチ、仮想現実ヘッドセット、サーバ、メインフレーム・コンピュータなどのような、従来型のコンピュータ・システムの形態を取り得る。
【００４１】
コンピュータ可読記憶媒体１０２またはメモリ１０４あるいはその両方は、１つもしくは複数のコンピュータ・プログラム（もしくはソフトウェアもしくはコード）またはデータあるいはその両方を記憶し得る。コンピュータ可読記憶媒体１０２に記憶されているコンピュータ・プログラムは、コンピュータ・システム１００が機能するためにプロセッサ１０６が実行するオペレーティング・システムを含み得る。コンピュータ可読記憶媒体１０２またはメモリ１０４あるいはその両方に記憶されているコンピュータ・プログラムは、本発明の実施形態によるコンピュータ・プログラム、または、プロセッサ１０６によって実行されると、本発明の実施形態による方法をプロセッサ１０６に行わせるコンピュータ・プログラムを、含み得る。
【００４２】
プロセッサ１０６は、コンピュータ可読記憶媒体１０２またはメモリ１０４あるいはその両方に記憶されているコンピュータ・プログラムに属するような、１つまたは複数のコンピュータ可読プログラム命令を実行するために適切ないずれかのデータ処理装置であり得る。１つまたは複数のコンピュータ可読プログラム命令の実行の一部として、プロセッサ１０６は、コンピュータ可読記憶媒体１０２もしくはメモリ１０４またはその両方にデータを記憶する、もしくは、コンピュータ可読記憶媒体１０２もしくはメモリ１０４またはその両方からデータを読み出す、または、その両方を行い得る。プロセッサ１０６は、単一のデータ処理装置を、または、並列的にもしくは相互に協働して動作する複数のデータ処理装置を、含み得る。プロセッサ１０６は、１つまたは複数のコンピュータ可読プログラム命令の実行の一部として、コンピュータ可読記憶媒体１０２もしくはメモリ１０４またはその両方にデータを記憶する、もしくは、コンピュータ可読記憶媒体１０２もしくはメモリ１０４またはその両方からデータを読み出す、または、その両方を行い得る。
【００４３】
１つまたは複数のインターフェース１０８は、コンピュータ・システム１００がネットワークを経由して他のコンピュータ・システムと通信することを可能にするネットワーク・インターフェースを含み得る。このネットワークは、あるコンピュータ・システムから別のコンピュータ・システムへデータを送信するまたは通信するのに適切な、いずれかの種類のネットワークであり得る。たとえば、ネットワークは、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット、ワイヤレス通信ネットワークなどのうちの１つまたは複数であり得る。コンピュータ・システム１００は、いずれかの適切な通信機構／プロトコルを介して、ネットワーク経由で、他のコンピュータ・システムと通信し得る。プロセッサ１０６は、ネットワーク・インターフェースにデータまたはコマンドあるいはその両方をネットワーク経由で別のコンピュータ・システムに送らせるため、１つまたは複数の通信バス１１０を介して、ネットワーク・インターフェースと通信し得る。同様に、１つまたは複数の通信バス１１０により、コンピュータ・システム１００によってネットワークを経由し他のコンピュータ・システムからネットワーク・インターフェースを介して受け取られたデータまたはコマンドあるいはその両方に対して、プロセッサ１０６が動作することが可能になる。
【００４４】
インターフェース１０８は、あるいはまたは追加的に、ユーザ入力インターフェースまたはユーザ出力インターフェースあるいはその両方を含み得る。ユーザ入力インターフェースは、入力をシステム１００のユーザまたはオペレータから受け取るように構成され得る。ユーザは、この入力を、マウスもしくはそれ以外のポインティング・デバイス、トラックボール、またはキーボードなど、１つまたは複数のユーザ入力デバイス（図示せず）を介して、提供し得る。ユーザ出力インターフェースは、ディスプレイ、モニタ、またはスクリーン（図示せず）上で、グラフィカルな／視覚的な出力を、システム１００のユーザまたはオペレータに提供するように、構成され得る。プロセッサ１０６は、ユーザ出力インターフェースに対し、ディスプレイに所望のグラフィカルな出力を示させる画像／ビデオ信号を形成するように、命令し得る。ディスプレイは、ディスプレイに触れるまたはディスプレイを押下することによってユーザが入力を提供することを可能にする、接触感知型であり得る。
【００４５】
図１に図解されており上述されたコンピュータ・システム１００のアーキテクチャは単に例示的なものであって、代替的なコンポーネントを用いるまたはより多くまたはより少ないコンポーネントを用いる異なるアーキテクチャが代わりに用いられることもあり得る、ということが理解されるであろう。
【００４６】
添付の図面の図２は、本発明の実施形態による例示的なシャード・データベース２００を概略的に図解している。シャード・データベース２００は、複数のデータベース・シャード２１０を含む。たとえば、図２に図解されているシャード・データベース２００は、第１のデータベース・シャード２１０（１）と第２のデータベース・シャード２１０（２）とを含む。しかし、追加的なデータベース・シャード２１０も同様に用いられ得る、ということが理解されるであろう。データベース・シャード２１０のそれぞれは、シャード・データベース２００のスキーマに属する共通な１組の１つまたは複数のテーブル２２０を含む。個別のデータベース・シャードは、（たとえば、データベースの別個の垂直的なパーティション化の一部として）要求される場合には、同様に追加的なテーブルを含むことがあり得る、ということが理解されるであろう。
【００４７】
１つまたは複数のテーブル２２０の共通の組は、シャード・テーブル２２０（１）を含む。シャード・テーブル２２０（１）のためのスキーマは複数のデータベース・シャード２１０の間で同じであるが、データベース・シャード２１０のそれぞれにおけるシャード・テーブル２２０（１）のコピーに記憶されているレコード２３０の組は、異なる。特に、データベース・シャード２１０のそれぞれは、シャード・テーブル２２０（１）に属するレコードの部分集合を記憶する。たとえば、図２に図解されているシャード・データベース２００は、第１のデータベース・シャード２１０（１）に記憶されているシャード・テーブル２２０（１）に属するレコード２３０（１）の第１の部分集合と、第２のデータベース・シャード２１０（２）に記憶されているレコード２３０（２）の第２の部分集合とを有する。しかし、より多くのデータベース・シャード２１０が、シャード・データベース２００と共に用いられる場合には、シャード・テーブル２２０のためのレコード２３０の組は、より多くの部分集合に分割され、したがってデータベース・シャード２１０の全体に分散されることがあり得る。
【００４８】
テーブル２２０の共通の組に属するテーブル２２０（２）および２２０（３）のうちのいくつかは、複製されたテーブルであり得る。これは、データベース・シャード２１０のそれぞれにおける複製されたテーブル２２０（２）および２２０（３）のコピーは同一であって、相互に同一であるレコードの組を含む、ということを意味する。しかし、共通の組のテーブル２２０は、いずれかの複製されたテーブルを含むことを必ずしも必要としない、ということが理解されるであろう。
【００４９】
シャード・データベース２００は、複数のデータベース・シャード２１０のそれぞれのために１つ存在する、１つまたは複数のブルーム・フィルタ２４０を、さらに含む。ブルーム・フィルタ２４０のそれぞれは、シャード・テーブル２２０（１）のある特定のレコードが、それと関連するデータベース・シャード２１０に記憶されているかどうかに関する指示を提供するように、構成されている。これを行うため、ブルーム・フィルタ２４０は、それらのそれぞれのデータベース・シャード２１０に挿入されたレコードの部分集合２３０（１）または２３０（２）を表す固定サイズのビット・ベクトルを維持する。たとえば、図２に図解されているシャード・データベース２００は、第１のデータベース・シャード２１０（１）と関連する第１のブルーム・フィルタ２４０（１）と、第２のデータベース・シャード２１０（２）と関連する第２のブルーム・フィルタ２４０（２）とを有しており、ブルーム・フィルタ２４０のそれぞれのビット・ベクトルは、「１」に設定された数ビット（図２に図解されているビット・ベクトルのテーブル表現では、黒い影によって表されている）を、それらのそれぞれのデータベース・シャード２１０に既に記憶されているレコードの結果として、含む。シャード・データベース２００が追加的なデータベース・シャード２１０を含む場合には、それぞれの追加的なデータベース・シャード２１０が、当該データベース・シャード２１０に記憶されているレコードの部分集合を表すそれ自体のブルーム・フィルタ２４０と関連付けられる、ということが理解されるであろう。ブルーム・フィルタのそれぞれによって維持されるレコードの部分集合２３０（１）および２３０（２）の表現は、後で論じられるように、それぞれのレコードのシャーディング・キー２６０に基づく。
【００５０】
次に、図２に図解されているシャード・データベース２００について、本発明の実施形態による、シャード・データベース２００のシャード・テーブル２２０（１）にレコード２５０を記憶するためのコンピュータ実装方法３００の概略的な図解である図３をさらに参照して、論じられる。
【００５１】
ステップ３１０では、方法３００が、記憶されるレコード２５０のためのシャーディング・キー２６０を取得する。シャーディング・キー２６０は、シャード・テーブル２２０（１）の中に挿入されるレコードの１つまたは複数のフィールドに基づく。その最も簡潔な形式では、シャーディング・キー２６０は、「ｉｄ」フィールドなどの単一のフィールドから、導かれ得る。しかし、その代わりに、たとえば、各レコードのフィールドのいくつかまたは全部から導かれる複合キーを含み、他のより複雑で複合的なシャーディング・キー２６０が用いられる場合もある。シャーディング・キー２６０は、記憶されるレコードと共に提供される場合があるし、または、記憶されるレコードの１つもしくは複数のフィールドから生成される場合もある。シャーディング・キー２６０は、シャード・テーブル２２０（１）に属するレコード２３０の組の間から、シャード・テーブル２２０（１）の各レコードを、一意的に識別するように機能し得る。しかし、このようであることは、必ずしも必要ない。その代わりに、シャーディング・キーは、複数の異なるレコードが同一のシャーディング・キーと関連するように、形成される場合もあり得る。
【００５２】
ステップ３２０では、方法３００が、データベース・シャード２１０と関連するブルーム・フィルタ２４０と共に用いられるためのシャーディング・キー２６０の１つまたは複数の表現２７０を生成する。シャーディング・キー２６０のこの表現２７０は、各ブルーム・フィルタ２４０によって用いられるハッシュ関数をシャーディング・キー２６０に適用することによって生成され、その結果として、シャーディング・キー２６０のビット・ベクトル表現２７０が生成されるが、これは、各ブルーム・フィルタ２４０によって維持されるレコード２３０（１）および２３０（２）の部分集合のビット・ベクトル表現と同じ長さである。各データベース・シャード２１０のために用いられるブルーム・フィルタ２４０は、それらが用いるビット・ベクトルの長さとハッシュ関数とに関して、相互に同一であり得る（ただし、各ブルーム・フィルタ２４０の値は、もちろん、それぞれの関連するデータベース・シャード２１０に挿入されたレコードに応じて、異なる）。この場合に、シャーディング・キー２６０の表現２７０は、ただ１つだけ、生成される必要があるが、その理由は、表現２７０が、すべてのブルーム・フィルタ２４０に対して同一であるからである。しかし、ブルーム・フィルタ２４０のうちのいくつか（または、全部）が、長さが異なるビット・ベクトルを有する、または、異なる（もしくは、異なる個数の）ハッシュ・アルゴリズムを用いるなど、構成が異なることがあり得る、ということが理解されるであろう。この場合に、シャーディング・キー２６０の表現２７０は、ブルーム・フィルタ２４０のそれぞれの異なる構成に対して、生成されることが必要となる。たとえば、図２に図解されている例示的なシャード・データベース２００では、記憶されるレコード２５０のために、シャーディング・キー２６０の単一の表現２７０が、両方のブルーム・フィルタ２４０と共に用いられるために生成され得るが、これは、両方のブルーム・フィルタ２４０が同一であるからである。この例では、ブルーム・フィルタ２４０のためのハッシュ・アルゴリズムを挿入されるレコード２５０のシャーディング・キー２６０に適用することによって、「１００１０００００」というビット・ベクトル表現が生成される。しかし、異なるレコードの場合には、その結果として、異なるビット・ベクトル表現が生成される、ということが理解されるであろう。
【００５３】
ステップ３３０で、方法３００は、各ブルーム・フィルタ２４０に対して生成されたシャーディング・キー２６０のビット・ベクトル表現２７０とブルーム・フィルタ２４０の値との間のハミング距離を計算する（各データベース・シャード２１０上に既に記憶されているレコードの部分集合２３０（１）および２３０（２）を表す）。図２に図解されている例示的なシャード・データベース２００に戻ると、そこでは、第１のブルーム・フィルタ２４０（１）によって維持される第１のデータベース・シャード２１０（１）に記憶されている項目の第１の部分集合２３０（１）のビット・ベクトル表現は「１０１０００１００」であり、他方で、第２のブルーム・フィルタ２４０（２）によって維持される第２のデータベース・シャード２１０（２）に記憶されている項目の第２の部分集合２３０（２）のビット・ベクトル表現は「０００００１０１０」である。したがって、この例では、記憶されるレコード２５０のためのシャーディング・キー２６０の表現２７０と第１のブルーム・フィルタ２４０（１）との間のハミング距離は「３」であり（それらが、別々の３つの位置で異なるため）、他方で、第２のブルーム・フィルタ２４０（２）へのハミング距離は「４」である（それらが、４つの位置で異なるため）。
【００５４】
ステップ３４０で、方法３００は、計算されたハミング距離に基づいて、データベース・シャード２１０を選択する。すなわち、データベース・シャード２１０の選択は、ハミング距離の関数に基づく。一例として、選択されるデータベース・シャード２１０は、記憶されるレコード２５０のためのシャーディング・キー２６０の表現２７０から最小のハミング距離を有するブルーム・フィルタ２４０と関連するデータベース・シャード２１０であり得る。いくつかの場合には、ただ１つのデータベース・シャード２１０が、最小のハミング距離を有するブルーム・フィルタ２４０と関連する、ということが理解されるであろう。そのような場合には、データベース・シャード２１０の選択は、自動的であり得る（すなわち、最小のハミング距離を有するブルーム・フィルタと関連する、そのただ１つのデータベース・シャード２１０となる）。しかし、他の場合には、最小のハミング距離は、複数のブルーム・フィルタ２４０によって提供され得る。たとえば、いくつかのブルーム・フィルタが、計算されたハミング距離の間で最小の距離である同じハミング距離を有し得る。そのような場合には、データベース・シャード２１０が、そのブルーム・フィルタが最小のハミング距離という基準を有するデータベース・シャードの間から、選択され得る。たとえば、計算されたハミング距離の間で最小の距離である同じハミング距離を有するようなデータベース・シャードの間から、データベース・シャード２１０が、ランダムに選択されることがある。しかし、データベース・シャード２１０を選択するための他の手段が、代わりに用いられてもかまわない。たとえば、その上に記憶されているレコードが最も少ないデータベース・シャード２１０が、最少ハミング距離という基準を満たすデータベース・シャード２１０の間から選択されることもある。ハミング距離に基づいて選択を行うための様々な他のファクタまたは方法が、当業者には、容易に明らかになるであろう。図２に図解されている例に戻ると、第１のデータベース・シャード２１０（１）が、レコード２５０を記憶するための場所として選択されるのであるが、その理由は、シャーディング・キー２６０の表現２７０と第１のブルーム・フィルタ２４０（１）との間のハミング距離が、第１のブルーム・フィルタ２４０（１）に対して計算されたハミング距離である「３」と第２のブルーム・フィルタ２４０（２）に対して計算されたハミング距離である「４」とのそれぞれのうちの最小値である「３」を有するからである。
【００５５】
ステップ３５０では、方法３００が、レコード２５０を、選択されたデータベース・シャード２１０に記憶する。レコード２５０がデータベース・シャード２１０に記憶されると、データベース・シャード２１０と関連するブルーム・フィルタ２４０は、当該レコード２５０が今ではブルーム・フィルタ２４０によって表される項目の部分集合の一部であることを表すように、更新される。したがって、図２に図解されている例では、第１のブルーム・フィルタ２４０（１）が、ブルーム・フィルタ２４０（１）によって維持されるビット・ベクトル表現が「１０１１００１００」になるように、そのレコード２５０のためのシャーディング・キー２６０のビット・ベクトル表現２７０を追加するように、更新され得る。ブルーム・フィルタ２４０と関連するデータベース・シャード２１０にレコードが記憶されるときには常にそのブルーム・フィルタ２４０を更新することによって、それらのブルーム・フィルタ２４０が維持するレコードの部分集合の表現は、それぞれのデータベース・シャード２１０上に記憶されるレコードを、正確に反映することになる。
【００５６】
シャード・データベース２００のデータベース・シャード２１０上により多くのレコードが記憶されるにつれて、データベース・シャード２１０のうちのいくつかが、データベース・シャード２１０の（したがって、シャード・データベース２００全体の）性能が一定のレベルよりも下降することを回避するために、それ以上のレコードがそれらのデータベース・シャード２１０上に記憶されるのを回避するのが望ましいレベルに到達することがあり得る。これを助けるため、シャード・データベース２００が、それぞれのデータベース・シャードが新たなレコードを記憶するために利用可能なのかそれとも利用不可能なのかに関する指示（またはマーキング）をさらに含む場合がある。たとえば、シャード・データベース２００が、データベース・シャード２１０が利用可能なのか利用不可能なのかを表すために、それぞれのデータベース・シャード２１０と関連するバイナリ・フラグを含む場合がある（ただし、代わりに、新たなレコードを記憶するためのデータベース・シャード２１０の利用可能性を示す他の技術を用いることもできる）。新たなレコードを記憶するためのそれぞれのデータベース・シャード２１０の利用可能性の指示が存在するときには、方法３００は、新たなレコードを記憶するためには利用不可能だと示されているデータベース・シャード２１０を、考慮から除外できる。すなわち、方法３００が、ステップ３２０で、シャーディング・キー２６０の１つまたは複数の表現２７０を生成するときには、方法３００は、利用不可能であると示されているデータベース・シャード２１０と関連するどのブルーム・フィルタ２４０と共に用いるための表現も、生成しない場合があり得る。その代わりに、方法３００が、新たなレコードを記憶するために利用可能であると示されているブルーム・フィルタ２４０のそれぞれ（または、その何らかの部分集合）と共に用いられるための表現２７０を生成するだけの場合も、あり得る。次に、方法３００は、ハミング距離に基づいてデータベース・シャードを選択するときに、新たなレコードを記憶するために利用可能なデータベース・シャード２１０だけが考慮されるように、そのために表現２７０が生成されているブルーム・フィルタのそれぞれを用いて、ハミング距離を計算するように進むことができる。
【００５７】
データベース・シャード２１０に記憶されているいくつかのレコードが、新たなレコードを記憶するためには利用不可能であるとのマークが付されるべきレベルに、いつ到達したのかを判断するためには、シャード・データベース２００は、データベース・シャード２１０のそれぞれと関連する挿入カウンタを有する場合がある。関連するデータベース・シャード２１０上にレコードが記憶されるたびに挿入カウンタをインクリメントすることによって、挿入カウンタを、任意の与えられた時間において、データベース・シャード２１０のそれぞれにそれまでに挿入されたレコードの個数の現在値を判断するのに、用いることができる。各データベース・シャード２１０が記憶できるレコードの個数に関して、所定の閾値を設定することができる。この所定の閾値は、シャード・データベース２００における全部のデータベース・シャード２１０に対して同一とすることがあり得るし、または、当該データベース・シャード２１０に利用可能なリソースのいずれかの差異を反映させるために、各データベース・シャード２１０に対して異なる設定をすることもあり得る。このようにして、方法３００は、データベース・シャード２１０のいずれかにそれまでに挿入されたレコードの個数が当該データベース・シャード２１０に対する所定の閾値を超えるかどうかを判断して、超える場合には、そのデータベース・シャード２１０に、どのような新たなレコードを記憶するためにも利用不可能である、というマークを付すことができる。この判断は、ステップ３４０で選択されたデータベース・シャード２１０に記憶されているレコードの個数が、そのデータベース・シャード２１０に対する所定の閾値を超えるかどうかを考慮することによって、レコードが方法３００によって記憶されるたびに、実行され得る。しかし、この判断は、たとえば、シャード・データベース２００を周期的に管理する責任を有するデータベース管理システムによって行われる場合など、新たなレコードを記憶するための方法３００とは独立して、行われる場合もある。
【００５８】
シャード・データベース２００の容量または性能を向上させるためには、シャード・データベース２００に、追加的なデータベース・シャード２１０を、動的に追加することができる。これは、たとえば、新たなレコードを記憶するために利用可能な所定の個数のデータベース・シャード２１０を維持するため、あるデータベース・シャード２１０に、新たなレコードを記憶するために利用不可能である、というマークが付されるときには常に、方法３００の一部として実行され得る。しかし、新たなデータベース・シャード２１０の挿入は、また、シャード・データベース２００を管理する責任のあるデータベース管理システムによるなど、方法３００とは独立に、行われることもある。そのようなデータベース管理システムは、たとえば、シャード・データベース２００を連続的にモニタしており、所定のレベルのパフォーマンスを維持するために必要であるとして、新たなデータベース・シャード２１０をシャード・データベース２００に追加することができる。
【００５９】
新たなデータベース・シャード２１０がシャード・データベース２００に追加されると、新たなデータベース・シャード２１０と関連する新たな空のブルーム・フィルタ２４０も、追加される。シャード・データベース２００におけるブルーム・フィルタ２４０の動作により、新たなレコードを記憶するために利用可能であるようなデータベース・シャード２１０の全体において、記憶されたレコードを均衡させるように機能する態様で、新たなレコードが新たなデータベース・シャード２１０に記憶され始める。この理由は、より多くのレコードが記憶されているデータベース・シャード２１０のためのブルーム・フィルタは、「１」に設定される多数のビットを含む可能性が高いからである。したがって、前から存在しているデータベース・シャード２１０に記憶されているレコードが多ければ多いほど、どの新たなレコードのためのシャーディング・キー２６０の表現２７０も、ハミング距離という観点では、前から存在していたブルーム・フィルタ２４０よりも、新たに加えられたデータベース・シャード２１０（当初において、そのビット・ベクトルの全ビットが「０」に設定されている）のための空のブルーム・フィルタ２４０の方に、より近いことになる。これは、新たなレコードは、当初において、前から存在していたデータベース・シャード２１０よりも、新たなデータベース・シャードに記憶される可能性の方が高いことを意味する。
【００６０】
図４は、シャード・データベース２００のシャード・テーブル２２０（１）からレコードを検索するためのコンピュータ実装方法４００を、概略的に図解している図面である。
【００６１】
ステップ４１０で、方法４００は、検索されるレコードのためのシャーディング・キー２６０を取得する。レコードをシャード・データベース２００に記憶するための方法３００のステップ３１０との関係で上述されたように、シャーディング・キー２６０は、レコードの１つまたは複数のフィールドに基づく。検索されるレコードのためのシャーディング・キー２６０は、たとえば、当該シャーディング・キー２６０と関連するレコードを検索するリクエスト２８０の一部として、方法４００への入力として提供され得る。あるいは、シャーディング・キー２６０は、検索されるレコードに関するリクエスト２８０の一部として提供されるデータから、導かれ得る。
【００６２】
ステップ４２０で、方法４００は、ブルーム・フィルタ２４０と共に用いられるためのシャーディング・キー２６０の表現２７０を生成する。レコードをシャード・データベース２００に記憶するための方法３００のステップ３２０との関係で上述されたように、特定のブルーム・フィルタ２４０と共に用いられるためのシャーディング・キー２６０の表現は、当該ブルーム・フィルタ２４０のためのハッシュ関数をシャーディング・キー２６０に適用することによって、生成される。レコードを検索するときにはデータベース・シャード２１０のそれぞれが考慮される必要があるから（新たなレコードの記憶に関してアクティブではないとのマークが付された、どのデータベース・シャードも含めて）、シャーディング・キー２６０の表現２７０が、ブルーム・フィルタのそれぞれと共に用いられるために、生成される。しかし、再び、それぞれのデータベース・シャード２１０のために用いられるブルーム・フィルタ２４０が相互に同じ形状である（すなわち、それぞれのブルーム・フィルタのために用いられるビット・ベクトルの長さとハッシュ関数とが同じである）場合に、そのようなブルーム・フィルタ２４０の全部に対して表現２７０は同じであるから、シャーディング・キー２６０の表現２７０は、１つだけ、生成されることが必要である。
【００６３】
ステップ４３０では、方法４００は、それぞれのブルーム・フィルタ２４０のうちのどれが、シャーディング・キー２６０のそれらのそれぞれの表現２７０とマッチするのかを識別する。シャーディング・キー２６０の表現２７０がそのそれぞれのブルーム・フィルタ２４０とマッチするかどうかを判断するには、シャーディング・キー２６０がハッシュ・アルゴリズムによってマッピングされる位置におけるビットのうちのいずれかが「０」であるかどうかを判断するために、ブルーム・フィルタ２４０のビット・ベクトルが、解析される。シャーディング・キー２６０がマッピングされるビットのいずれかが「０」である場合には、シャーディング・キー２６０の表現２７０は、ブルーム・フィルタ２４０とマッチせず、これは、シャーディング・キー２６０が関係するレコードが、当該ブルーム・フィルタ２４０と関連するデータベース・シャード２１０に記憶されていない、ということを示す。しかし、ビットの全部が「１」である場合には、シャーディング・キー２６０の表現２７０がブルーム・フィルタ２４０とマッチし、これは、シャーディング・キー２６０が関係するレコードが、ブルーム・フィルタ２４０と関連するデータベース・シャード２１０に記憶されている場合があり得る、ということを示す。
【００６４】
方法４００のステップ４２０における表現２７０の生成は、方法４００のステップ４３０においてシャーディング・キー２６０とマッチするブルーム・フィルタを決めることの一部として、非明示的に行われることがある、ということが理解されるであろう。すなわち、シャーディング・キー２６０のビット・ベクトル表現２７０を明示的に計算するのではなく、方法４００は、それぞれのブルーム・フィルタのハッシュ・アルゴリズムをシャーディング・キー２６０に適用することによって、ブルーム・フィルタのそれぞれのビット・ベクトルのどの位置にシャーディング・キー２６０がマッピングされるのかを決定することにより、表現２７０を非明示的に計算し得る。
【００６５】
ステップ４４０において、方法４００は、レコードを見つけるために、識別されたブルーム・フィルタ２４０と関連するデータベース・シャード２１０をサーチする。ブルーム・フィルタ２４０の確率的性質のため、複数のブルーム・フィルタ２４０が、シャーディング・キー２６０の表現２７０とのマッチを示すこともあり得る。これは、ブルーム・フィルタ２４０のうちの１つまたは複数によって偽陽性（false positive）が提供されるときに、生じる。したがって、方法４００は、レコードを見つけるために、シャーディング・キー２６０の表現２７０とのマッチを示したブルーム・フィルタ２４０と関連するデータベース・シャード２１０のそれぞれを、サーチする。
【００６６】
ステップ４５０において、方法４００は、レコードを提供する。レコードは、外部システムからのリクエストへの直接的応答として提供される場合があり得るし、または、より大きなクエリ動作の一部として、内部リクエストへの応答として提供される場合もあり得る。
【００６７】
本発明をより明確に説明するために、１つのシャード・テーブル２２０（１）を有するシャード・データベース２００を用いて、上述されたシャード・データベース２００と関連する方法３００および４００とが論じられ、図２において図解された。しかし、シャード・データベース２００が、データベース・シャード２１０の間でそのレコードが分散されている複数のシャード・テーブル２２０を含む場合もあり得る、ということが理解されるであろう。この場合には、複数のブルーム・フィルタ２４０が、シャード・テーブル２００のそれぞれに対して１つというように、それぞれのデータベース・シャード２１０と関連し得る。シャード・テーブルにレコードを記憶する、およびそこからレコードを検索するための方法３００および４００は、これらの方法がその上で動作しているシャード・テーブル２２０のための、関係のあるブルーム・フィルタ２４０を参照し得る。
【００６８】
上述されたシャード・データベース２００は、複数のコンピュータ・システム（またはデバイス）１００を含むシステム上に記憶され得る。シャード・データベース２００のデータベース・シャード２１０のそれぞれは、コンピュータ・システム１００のそれぞれが複数のデータベース・シャード２１０のうちの１つまたは複数を記憶するように、システムのそれぞれのコンピュータ・システム１００上に記憶され得る。システムは、シャード・データベース２００のシャード・テーブル２２０（１）からレコードを検索するための上述された方法４００を行うように構成されているコントローラ２９０を、さらに含む。図２に図解されているように、コントローラ２９０は、データベース・シャード２１０からは論理的に分離されていて、別個のコンピュータ・システム１００上で実装されることが可能である。あるいは、コントローラ２９０が、データベース・シャード２１０のうちの１つまたは複数を記憶するのにも用いられる単一のコンピュータ・システム上で実装されることも可能である。シャード・データベース２００のシャード・テーブル２２０（１）からレコードを検索するどのリクエスト２８０でも、単一のコントローラ２９０に方向付けることができる。あるいは、コントローラ２９０は、データベース・シャード２１０のうちの１つまたは複数を記憶するのに用いられる複数のコンピュータ・システム１００（または、そのようなコンピュータ・システム１００の全部）の間で、分散され得る。この場合には、シャード・データベース２００のシャード・テーブル２２０（１）からレコードを検索するというリクエスト２８０を、コントローラが配置されているコンピュータ・システム１００のいずれかにおけるコントローラに方向付けることができる。
【００６９】
コントローラ２９０は、また、上述された方法３００を用いて、シャード・データベース２００のシャード・テーブル２２０（１）にレコード２５０を記憶するようにも、構成され得る。したがって、レコード２５０を記憶するというリクエストは、コントローラ２９０がその上に存在するコンピュータ・システム１００のどれにでも方向付けることができる。
【００７０】
コントローラ２９０は、また、シャード・データベース２００のシャード・テーブル２２０（１）からレコードが削除されることを可能にするように構成されることもある。これは、レコードがその上に配置されているデータベース・シャード２１０の場所を確認し、データベース・シャード２１０上に記憶されているシャード・テーブル２２０（１）のレコードの部分集合２３０から、そのレコードを除去することによって、行われ得る。しかし、ブルーム・フィルタの制約のため、データベース・シャード２１０と関連するブルーム・フィルタ２４０を、それが表すレコードの組からの当該レコードの除去を反映するように更新することは、可能でない。したがって、データベース・シャード２１０から削除されるレコードが多ければ多いほど、シャード・テーブル２２０（１）からレコードを検索することを試みるときに、そのデータベース・シャード２１０のためのブルーム・フィルタ２４０が偽陽性を返す確率は高くなる。この問題に対処するために、シャード・データベース２００は、データベース・シャード２１０のそれぞれと関連する削除カウンタを含むことがあり得る。レコードが、そのレコードと関連するデータベース・シャード２１０から削除されるたびに、削除カウンタをインクリメントすることによって、削除カウンタを、いくつのレコードが、それらの関連するデータベース・シャード２１０にもはや記憶されていないレコードの組のそれぞれのブルーム・フィルタの表現に含まれているかを判断するのに用いられ得る。コントローラ２９０は、次に、特定のデータベース・シャード２１０から削除されたレコードの個数が、そのシャードのための所定の閾値を超えるかどうかを判断することができるが、超えている場合には、そのデータベース・シャード２１０に現に記憶されているレコードから、ブルーム・フィルタ２４０を再構成することができる。次に、再構成されたブルーム・フィルタが関連するデータベース・シャード２１０のための削除カウンタは、リセットされ得る。
【００７１】
ブルーム・フィルタ２４０の再構成は、本質的に、それぞれのビットが「０」に設定されるようにそのビット・ベクトルをリセットし、ブルーム・フィルタ２４０のためのハッシュ・アルゴリズムを記憶されているレコードのシャーディング・キー２６０に再適用し、ブルーム・フィルタの適切なビットを「１」に設定することによって、そのデータベース・シャード２１０に記憶されているシャード・テーブル２２０（１）のためのレコードのそれぞれをビット・ベクトルに再度加えることを含む。ブルーム・フィルタ２４０が再構築される間、データベース・シャード２１０は、一時的に、新たなレコードを記憶するためには利用不可能であるとのマークが付され得るが、それにより、データベース・シャード２１０のうちの１つまたは複数と関連するブルーム・フィルタ２４０が再構築されている間であっても、シャード・データベース２００が、記憶のための新たなレコードを引き続き受け取ることが可能になる。同様に、ブルーム・フィルタ２４０が再構築される前に、そのビット・ベクトル（またはアレイ）の現在値がキャッシュされ得ることにより、データベース・シャード２１０のうちの１つまたは複数と関連するブルーム・フィルタ２４０が再構築されている間であっても、レコードをシャード・テーブル２２０（１）から引き続き検索することが可能になる。
【００７２】
代替的な実施形態では、上述されたシャード・データベース２００は、ブルーム・フィルタの代わりに、カウンティング・フィルタを含む場合がある。上述されたように、カウンティング・フィルタにより、このカウンティング・フィルタによって維持されるレコードの組の表現からレコードを削除することが可能になる。したがって、この代替的な実施形態では、あるレコードがシャード・テーブル２２０（１）から削除されると、コントローラ２９０は、フィルタを再構築することを必要とせずに、そのレコードが削除されたデータベース・シャード２１０と関連するカウンティング・フィルタを更新し得る。カウンティング・フィルタへのハミング距離を計算するためには、カウンティング・フィルタの値が、ビット・ベクトル表現まで平坦化され得る。換言すると、カウンティング・フィルタによって維持されるベクトルのそれぞれの位置におけるｎビット・カウンタは、ｎビット・カウンタの値が「０」である場合に「０」であり、ｎビット・カウンタの値が「０」よりも大きい場合に「１」である、１ビット表現に変換され得る。たとえば、カウンティング・フィルタの現在値が「０１０２３００２」である場合には、これは、ハミング距離を計算するという目的のために、「０１０１１００１」という１ビット・ベクトル表現に平坦化され得る。
【００７３】
本発明は、いずれかの可能な技術的詳細レベルの統合におけるシステム、方法またはコンピュータ・プログラム製品あるいはそれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（単数または複数）を含み得る。
【００７４】
コンピュータ可読記憶媒体は、命令実行デバイスによって用いられるための命令を保持し記憶することが可能な有形的なデバイスであり得る。コンピュータ可読記憶媒体は、たとえば、これらに限定されることはないが、電子記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または上記のいずれかの適切な組合せであり得る。コンピュータ可読記憶媒体のより具体的な例の非排他的なリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、デジタル・バーサタイル・ディスク（ＤＶＤ）、メモリ・スティック、フロッピ・ディスク（Ｒ）、パンチカードまたは命令がそこに記録された溝における隆起構造など機械的にエンコードされたデバイス、および上記のいずれかの適切な組合せを含み得る。本明細書で用いられるコンピュータ可読記憶媒体とは、無線波もしくは他の自由に伝搬する電磁波、導波管もしくは他の伝送媒体（たとえば、光ファイバケーブルを通過する光パルス）を通過して伝搬する電磁波、またはワイヤを通過して伝送される電気信号などの一過性の信号それ自体としては、解釈されないものとする。
【００７５】
本明細書で説明されているコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から、それぞれのコンピューティング／処理デバイスに、ダウンロードされることが可能であり、または、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークまたは無線ネットワークあるいはそれらの組合せなどのネットワークを経由して、外部コンピュータもしくは外部ストレージ・デバイスに、ダウンロードされることが可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータまたはエッジ・サーバあるいはそれらの組合せを含み得る。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイスの内部のコンピュータ可読記憶媒体に記憶するために、転送する。
【００７６】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のためのコンフィギュレーション・データ、または、ソース・コードもしくはオブジェクト・コードであり得るが、ここで、ソース・コードとオブジェクト・コードとは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語と、を含む、１つまたは複数のプログラミング言語のいずれかの組合せとして、記述される。コンピュータ可読プログラム命令は、全体がユーザのコンピュータ上で実行される場合、一部がユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして実行される場合、一部がユーザのコンピュータ上で一部が遠隔コンピュータ上で実行される場合、または、全体が遠隔コンピュータもしくはサーバ上で実行される場合があり得る。後者のシナリオでは、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合があり得るし、または、（たとえば、インターネット・サービス・プロバイダを用いて、インターネットを通じて）外部コンピュータへの接続がなされる場合もあり得る。いくつかの実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ）を含む電子回路が、本発明の諸態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて、その電子回路をカスタマイズ（personalize）することにより、コンピュータ可読プログラム命令を実行する場合がある。
【００７７】
本発明の諸態様は、本明細書においては、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャートによる図解またはブロック図あるいはその両方を参照して、説明されている。フローチャートによる図解またはブロック図あるいはその両方の各ブロックと、フローチャートによる図解またはブロック図あるいはその両方における複数のブロックの組合せとは、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。
【００７８】
これらのコンピュータ可読プログラム命令は、コンピュータまたはそれ以外のプログラム可能なデータ処理装置のプロセッサを経由して実行されるこれらの命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定されている機能／作用を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータ、またはそれ以外のプログラム可能なデータ処理装置のプロセッサに提供されることで、マシンを構成することができる。これらのコンピュータ可読プログラム命令は、また、命令が記憶されているこのコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに特定されている機能／作用の諸態様を実装する命令を含む製品を構成するように、コンピュータ、プログラム可能なデータ処理装置またはそれ以外のデバイスあるいはそれらの組合せに対し特定の態様で機能するように命令することができるコンピュータ可読記憶媒体に、記憶され得る。
【００７９】
コンピュータ可読プログラム命令は、また、コンピュータ、それ以外のプログラム可能な装置、またはそれ以外のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定されている機能／作用を実装させるように、コンピュータ、それ以外のプログラム可能なデータ処理装置、または他のデバイスの上にロードされ、そのコンピュータ、それ以外のプログラム可能な装置、または他のデバイス上で、一連の動作ステップが実行されるようにすることで、コンピュータ実装プロセスを生じさせることができる。
【００８０】
図面におけるフローチャートとブロック図とは、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態の、アーキテクチャ、機能および動作を図解している。この点で、フローチャートまたはブロック図における各ブロックは、特定された論理機能を実装するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替的な実装形態では、ブロックに記載されている機能は、図面に記載されている順序とは異なる順序で、生じることがあり得る。たとえば、連続するように示されている２つのブロックが、実際には、関係する機能に応じて、実質的に同時に実行される場合があるし、または、これらのブロックが、ときには、逆の順序で実行される場合もある。ブロック図またはフローチャート図あるいはそれらの両方の各ブロックと、ブロック図またはフローチャート図あるいはそれらの両方における複数のブロックの組合せとは、特定の機能もしくは作用を実行するまたは専用のハードウェアとコンピュータ命令との組合せを実行する専用のハードウェア・ベースのシステムによって実装され得る、ということも、注意されるべきである。
【図１】
2021500649.tif 000003
【図２】
2021500649.tif 000004
【図３】
2021500649.tif 000005
【図４】
2021500649.tif 000006
【国際調査報告】
2021500649.tif 000007
2021500649.tif 000008