ventajas que español desventajas caracteristicas mongodb indexing avl-tree database

que - Comparador de índice personalizado en MongoDB



mongodb español (2)

Estoy trabajando con un conjunto de datos compuestos por elementos cifrados probabilísticos indistinguibles de muestras aleatorias. De esta forma, las encriptaciones secuenciales del mismo número dan como resultado diferentes textos cifrados. Sin embargo, estos aún son comparables a través de una función especial que aplica algoritmos como SHA256 para comparar dos textos cifrados.

Deseo agregar una lista de los textos cifrados descritos a una base de datos MongoDB e indexarla usando una estructura basada en árbol (es decir, AVL). No puedo simplemente aplicar la indexación predeterminada de la base de datos porque, como se describe, los registros deben ser comparables usando la función especial.

Un ejemplo: supongamos que tengo una base de datos db y una colección c compuesta por el siguiente tipo de documento:

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

Además, deje que F (int, string, string) sea la siguiente función:

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

donde el operador | es una función de concatenación estándar.

Deseo ejecutar la siguiente consulta de una manera eficiente , como en una colección con una indexación adecuada:

db.c.find( { F(h,l,r) :{ $eq: 0 } } )

para h yl elegidos arbitrariamente pero no constantes. Es decir: supongamos que quiero encontrar todos los registros que satisfagan F (h1, l1, r), para algún par (h1, l1). Más tarde, en otro momento, quiero hacer lo mismo pero usando (h2, l2) tal que h1! = H2 y l1! = L2. h y l pueden asumir cualquier valor en el conjunto de enteros.

¿Cómo puedo hacer eso?


He intentado una solución que almacena el resultado de la función en su colección, así que cambié el esquema, como se muestra a continuación:

{ "_id": ObjectId, "r": { "_key": F(H, L, value), "value": String } }

El campo r._key es el valor de F(h,l,r) con la constante h y l , y el campo r.value es el campo r original. Entonces puede crear un índice en el campo r._key y su condición de consulta será:

db.c.find( { "r._key" : 0 } )


Puede ejecutar esta consulta utilizando el operador $ where , pero de esta manera no puede usar el índice. Por lo tanto, para el rendimiento de la consulta depende del tamaño de su conjunto de datos.

db.c.find({$where: function() { return F(1, "bb", this.r) == 0; }})

Antes de ejecutar el código anterior, necesita almacenar su función F en el servidor mongodb:

db.system.js.save({ _id: "F", value: function(h, l, r) { // the body of function } })

Campo de golf: