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

¿La función javascript del lado del servidor tiene problemas de rendimiento en mongoDB?

Cuando pregunta sobre la viabilidad del javascript del lado del servidor, primero debe dejar en claro de qué tipo de javascript del lado del servidor está hablando. Según la documentación , hay cuatro tipos diferentes de ejecución de código del lado del servidor. Desafortunadamente, todas son soluciones alternativas para situaciones en las que la API nativa es insuficiente:

El eval comando

eval tiene el inconveniente de que solo se ejecuta en un nodo. Esto reduce en gran medida su utilidad en un entorno agrupado. ¡Con colecciones fragmentadas, no funciona en absoluto!

De forma predeterminada, también crea un bloqueo global que hace que la base de datos quede completamente inutilizable hasta que se haya ejecutado el script. Esto se puede prevenir con el nolock argumento (a menos que el propio script haga algo que cree un bloqueo global).

La respuesta de Sammaye también explica algunos problemas de seguridad graves.

Realmente es más una herramienta de prueba y administración que algo que debería usar para cualquier operación regular.

Ejecución de archivos .js a través de una instancia de mongo shell en el servidor

En este caso, el código no se ejecuta en la base de datos, sino en otro proceso independiente en uno de los servidores. Esto significa que todos los datos requeridos de otros fragmentos deben transferirse al servidor que ejecuta el código javascript, sin importar lo que realmente devuelva el script.

Aparece como otra aplicación para el servidor mongodb, por lo que no puede hacer nada que no pueda hacer desde su aplicación habitual. Es otra herramienta de prueba y administración que no debe usar en el funcionamiento normal.

Buscar con $where -operador

El operador $where en un comando de búsqueda permite pasar una función javascript que se usa para filtrar valores. Para la mayoría de los casos triviales, esto es mucho menos eficaz que lo que ofrecen las otras herramientas de consulta de búsqueda, especialmente porque no puede utilizar ningún índice.

Cuando no se pueda evitar el uso de $where, al menos intente utilizar algunas de las herramientas normales de la consulta de búsqueda para reducir el conjunto de documentos que deben pasarse a la función $where.

MapReduce

MapReduce utiliza dos funciones de javascript para crear datos agregados. Solía ​​ser la principal herramienta de minería de datos para MongoDB, pero la mayoría de sus casos de uso habituales ahora se cumplen con el mucho más fácil de usar marco de agregación .

También tiene el mismo inconveniente que $where:a menos que filtre, tendrá que ejecutar no una, sino al menos dos funciones de javascript para cada documento.

Pero MapReduce puede al menos ejecutarse distribuido y puede ser paralelizado.

tl;dr:

El uso de Javascript es una medida de último recurso para consultas muy inusuales que no se pueden realizar con el lenguaje de consulta normal y que requieren acceso a demasiados datos para implementarse en la aplicación. Cuando sea posible, haga lo que quiera con las herramientas especializadas que tiene disponibles o implemente su lógica en la capa de aplicación.