2016-07-04 3 views
10

私はランダムサンプルと区別できない確率的暗号化要素で構成されたデータセットを扱っています。このようにして、同じ番号の順次暗号化は異なる暗号文をもたらす。しかし、これらはSHA256のようなアルゴリズムを適用して2つの暗号文を比較する特別な機能によって比較可能です。MongoDBのカスタムインデックスコンパレータ

説明した暗号テキストのリストをMongoDBデータベースに追加し、ツリーベースの構造(AVL)を使用してインデックスを作成します。前述のように、レコードは特殊関数を使用して比較可能でなければならないため、データベースのデフォルトの索引付けを単純に適用することはできません。

例:

{ 
    "_id":ObjectId, 
    "r":string 
} 

また、F(整数、文字列、文字列)は、以下の関数とする:私はデータベースDBと次のドキュメントタイプで構成されるコレクションCがあると:

F(h,l,r) = (SHA256(l | r) + h) % 3 

ここで、演算子|標準の連結機能です。

私は、このようないくつかの適切なインデックスを持つコレクションのように、効率的な方法に次のクエリを実行したい:

db.c.find({ F(h,l,r) :{ $eq: 0 } }) 
任意に選択された時間とlのための

ではなく、定数。 I:いくつかのペア(h1、l1)について、F(h1、l1、r)を満たすすべてのレコードを検索したいとします。後で、別の瞬間に、同じことをしたいが、h1!= h2とl1!= l2というように(h2、l2)を使う。 hとlは整数の集合の中の任意の値をとることができる。

どうすればいいですか?

私はあなたのコレクション内の関数の結果を格納するソリューションを試してみたので、私は以下のように、スキーマを変更
+0

グレート質問を!コード例を追加して、それをもっと明確にすることができますか? – Shawyeok

+0

Shawyeokしました。それを確認してください。 –

答えて