Matriculacion BD Externa y recuperacion de registros costosa

Matriculacion BD Externa y recuperacion de registros costosa

de Raul Garcia Canet -
Número de respuestas: 8
Hola a todos,

Llevo varios dias intentando resolver la siguiente cuestion.

Utilizo Autenticacion y matriculacion desde BD externa (SQL Server), que está en un servidor distinto al de moodle.
La autenticación funciona de maravilla.
Ahora bien, la matriculacion....falla.

El caso es que tengo la vista creada dónde recupero todos los registros de un usuario.
Concretamente un usuario que estoy probando me devuelve 7845 registros (sí, está bien).
Es que ese usuario es un Responsable de una titulacion y debe estar matriculado en todas las aignaturas y grupos de su titulación (requisitos de la Universidad).

La vista está optimizada, de hecho al ejecutarla sobre el SQL Server tarda aprox 2 segundos en devolver resultados (7845), el problema es que al acceder desde moodle, se me queda pillado (página en blanco) y si recargo la página, me muestra el su usario con el que he entrado y algunos de los cursos en los que lo ha matriculado.

El problema entonces es: ¿Cómo optimizo la "recuperación" de datos desde moodle para que no se quede "colgado"?
¿Si uso los prepared Statements mejoraré en algo?
¿Cómo uso los prepared statements que trae moodle con el plugin de matriculacion desde BD externa?
¿Alguna otra solución?

Datos moodle:
Version Moodle 1.9.5+

Datos Servidor:
Servidor: Apache
BD: MySQL
Actualizados a la última version.

Gracias a todos por vuestro aporte
Salu2
J. Raul (juagarc4) guay
Promedio de valoraciones: -
En respuesta a Raul Garcia Canet

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Raul Garcia Canet -
Hola a todos,

Corrijo el mensaje anterior.
Según la monitorización que he hecho, la SQl está bien optimizada, apenas tarda 2 segundos en obtener los datos y la Plataforma los recoge perfectamnete en el recorset.
El problema, es a la hora de procesar esos datos en la funcion "setup_enrolments" del fichero /moodle/enrol/database/enrol.php
Ya que es en esta función dónde crean los cursos (y en mi caso, también los grupos de cada curso que se recuperan de la BD externa) si no existen, se asignan los roles, matriculación de usuarios, etc.

Las inserciones que hay que hacer son muy costosas y se tira más de 16 minutos, con lo que se me paraliza la carga de la página principal.

No tengo ni idea de cómo solucionarlo, así que acepto sugerencias...
Gracias por todo,
Salu2
J. Raul (juagarc4) guay
En respuesta a Raul Garcia Canet

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
6000 y pico cursos son muchos cursos. Y la matriculación es costosa en tiempo (incluso si no hay que crear los cursos y los grupos).

Y teniendo en cuenta que cada vez que inicie la sesión se tienen que comprobar las matriculaciones (y verificar que sigue teniendo que estar en los 6000 cursos, o ponerle o quitarle de alguno de ellos), tendrás ese problema de continuo.

Eso sin contar con que en el bloque de cursos en los que está matriculado será kilométrico, y al navegador le costará una buena cantidad de tiempo pintarlo.

Creo que en este caso sería más interesante asignarle el rol al nivel de la categoría y meter todos esos cursos en la categoría.

En nuestro caso en su momento creamos el rol de 'profesor invitado', que no era para profesore externos visitantes, sino para todos los profesores de la facultad. La idea era que todos los profesores pudiesen entrar en todos los cursos para verlos, pero que no fuesen ni profesores ni estudiantes (de forma que no apareciesen en la lista de participantes, ni en el libro de calificaciones, ni cosas del estilo). Era parte de la política de gestión del conocimiento implantanda en la facultad, que perseguía dar acceso a todos los trabajadores a todo el conocimiento generado en la facultad.

Para ello creamos el rol en cuestión, le asignamos la capacidad 'moodle/course:view' (sólo esa, creo recordar), y después modificamos el código que genera la lista de cursos en los que un usuario está matriculado para que no le apareciera un bloque de 'mis cursos' kilométrico. Y luego asignabamos ese rol a nivel del sitio a todos los profesores que querían.

Creo que aún tenemos las modificaciones en el repositorio git local. Podría buscarlas si crees que una solución de este tipo podría servirte.

Saludos,
Iñaki.
En respuesta a Iñaki Arenaza

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Raul Garcia Canet -
Hola Inaki,

Realmente no son 6000 cursos.
Son 104 cursos, pero dentro de cada curso hay 74 grupos.

Ya he depurado la función y me tarda 234 segundos (más o menos) en realizar su cometido. Ésto sólo ocurrirá con aquellos usuarios que sean Vicedecanos o Responsables de una Titulación (pocos casos realmente).
A estos usuarios, les mostraré una ventanita indicando que el proceso puede durar un poco y punto. Total, 5 minutos pasan rápido gran sonrisa

El problema estaba es que recuperaba en la misma consulta, los cursos y los grupos, entonces, claro, recuperaba 7800 y pico registros de una tacada.
posteriormente (y aquí estaba el error) relizaba otra consulta para volver a obtener los grupos de cada asignatura, o sea, 7800 y pico consultas que devolvían, al menos 74 registros cada una (si es que eso de escribir código deprisa, no es bueno).

Ahora lo que hago es: recuperar primero los cursos y una vez los tengo en el array "local", busco los grupos de cada cada curso. Ahora se hacen sólo 104 consultas.

Al final, obtengo el mismo resultado, pero por partes...

Muchas gracias por el ofrecimiento Inaki.
Lo que comentas lo había pensado ya, asignarles a las categorías. El problema es que los cursos se crean con la opción "Grupos Separados" y además, se crean en el momento que un usuario accede, ya que mientras no exista relación de usuario-curso (POD o matrícula) en la BD oficial de la Universidad, la asignatura/curso no se crea en Moodle.

Por otro lado, tengo profesores que no quieren que otros compañeros puedan acceder a su/s asignatura/s ni ver sus materiales, para ello usan los agrupamientos, si comparten asignatura con otro profesor. Depués me hicieron que modificara los permisos del Rol Profesor, para que sólo manejara sus grupos, de forma que al usar agrupamientos, si otro profesor no está en mi grupo, no verá los recursos que voy poniendo.

Además (creo que ya lo comenté en otro post hace tiempo), he tenido que modificar el administrador de archivos de moodle para que los profes puedan crear carpetas "Privadas" (sólo visibles por el usuario que la ha creado) ya que, aunque los profes no podían ver los recursos (por los agrupamientos), sí seguían viendo los materiales en la sección de Archivos.

Que ya se que no debería ser así...pues sí, lo sé, pero ya sabes el dicho..."Donde hay patrón...no mada marinero". Y como la Plataforma es algo secundario en la organización, pues hay que adaptarse a ellos, en lugar de que ellos se adapten (aunque sea mínimamente) a la herramienta.

La lista de cursos, les sale bastante larga, pero le he acortado en el bloque y la página central para que le aparezca reducida la lista de cursos.

Muchas gracias por tu sugerencia. Espero que alguna vez se den cuanta de que compartir es el mejor modo de gestionar le conocimiento

Hasta pronto,
Salu2

En respuesta a Raul Garcia Canet

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Fernando Navarro Páez -
Me ha parecido muy interesante lo de las "Carpetas Privadas", no tanto por privacidad sino para evitar que un profesor "petardo" pueda borrar/machacar los recursos de otros. ¿Puedes compartir como lo has realizado?

Salu2
PD: Quizá sería interesante un nuevo hilo para este tema
En respuesta a Fernando Navarro Páez

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Raul Garcia Canet -
Hola Fernando,
Ok, abro un nuevo hilo para ese tema.

Hasta pronto,
Salu2
J.Raul (juagarc4) guay
En respuesta a Raul Garcia Canet

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Mariano Gonzalez -
Hola Juan,

Estoy siuiendo tus comentarios y tengo una duda sobre cómo haces para crear grupos desde la matriculación con una BD externa??'

ya he podido configurar la matriculación, pero no se como asiganarles un grupo desde la BD externa.

Alguien me puede dar una mano con esto?

saludos,

Mariano
En respuesta a Mariano Gonzalez

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Jesus Marquez -

Hola Mariano! después de tanto tiempo...encontraste alguna solución ? he revisado la documentación oficial de matriculación BD externa y aun no se toma en cuenta lo de crear grupos, es asi? 

Gracias.

En respuesta a Jesus Marquez

Re: Matriculacion BD Externa y recuperacion de registros costosa

de Luis Urbina -

Hola Jesus

Una pregunta, tu conseguistes hacer que en la matriculación externa asignará grupos también?

Saludos.