sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Debo usar un índice disperso para las banderas booleanas en mongodb?

La bandera escasa es un poco rara. Para comprender cuándo usarlo, debe comprender por qué existe "escaso" en primer lugar.

Cuando crea un índice simple en un campo, hay una entrada para cada documento, incluso los documentos que no tienen ese campo.

Por ejemplo, si tiene un índice en {rarely_set_field : 1} , tendrá un índice que se llena principalmente con null porque ese campo no existe en la mayoría de los casos. Esto es una pérdida de espacio y es ineficiente para buscar.

El {sparse:true} la opción eliminará el null valores, por lo que obtiene un índice que solo contiene entradas cuando {rarely_set_field} está definido.

Volvamos a su caso.

Está preguntando sobre el uso de un booleano + escaso. Pero disperso no afecta realmente "booleano", el efecto disperso "está establecido frente a no está establecido".

En su caso, está tratando de buscar unfinished . Para aprovechar sparse la clave no es el valor booleano, sino el hecho de que unfinished las entradas tienen esa clave y las entradas "terminadas" no tienen ninguna clave.

{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished

Parece que estás usando una cola

Definitivamente puede aprovechar la información anterior para implementar un índice disperso. Sin embargo, en realidad parece que estás usando una cola. MongoDB es útil como una cola, aquí hay dos ejemplos .

Sin embargo, si miras la Cola, no lo están haciendo de la forma en que lo estás haciendo. Personalmente, estoy usando MongoDB como una cola para algunos sistemas de producción y funciona bastante bien, pero pruebe su carga esperada ya que una cola dedicada funcionará mucho mejor.