Closed marianogenovese closed 7 years ago
Podría detallar un poco mas los puntos:
Ok, vamos poniendo ejemplos:
Caso A. Quiero saber durante 5 minutos (apply) un conteo de registros en una fuente. Aquí el usuario no debe poner repeticiones (apply) porque semanticamente expresa que el query tiene una duración de 5 minutos. Si poner repetición el query se comportará como exprese en la repetición porque la repetición tiene prioridad (lo que se expresa en el propuesta, esto a lo mejor puede ser mejorado validando el orden en el que expresa el usuario el apply, si es apply repetition primero o apply duration primero).
Caso B. Quiero saber por 3 veces con ventanas de 5 segundos, un conteo de registros en una fuente. Aquí el usuario no debe poner duración (apply) sino debe poner repetición (apply) y aplicar una ventana de tiempo (apply), si el usuario pone duración el comportamiento cambia.
Caso C. Quiero saber durante 1 minuto y 1 veces el conteo de registros en una fuente. Aqui aplica repetición y duración.
Los parametros de duración y repetición son válidos en el contexto de stream temporales/sesion/no durables, puesto que se desea tener una finalización del query caso contrario el usuario debe crear un stream no temporal/permanente/durable
Caso A. La consulta durará solo 5 minutos. En caso de especificar repetición la consulta tendrá una duración igual a:
duración total = duración de la consulta * repeticiones
Caso B. En el caso de especificar una duración se aplicaría la misma formula del caso A para la duración total.
Caso C. Para poder contar los eventos deben colocar una ventana de tiempo. Esto último me lleva al siguiente planteamiento:
Notas: la duración siempre deberá ser mayor o igual a la ventana de tiempo.
Es posible manejar el apply repetition y duration como una condición de finalización donde el primero que se cumpla haga que termine la ejecución de la consulta. Usando el ejemplo del caso C el usuario pone una duración de 1m y una repetición de 1, si no llega ningún evento el query debe terminar al minuto, por el contrario si llega algo el query toma lo que tiene y finaliza puesto que la repetición es de 1 el query puede durar menos de 1 minuto.
La formula que aplicas para calcular la duración total, no la tengo contemplada puesto que las condiciones son o por repeticion (expresa en el query solo apply repetition) o por duración (expresa en el query solo apply duration) o por cualquier que se cumpla primero (expresa en el query apply repetition y apply duration).
Streams permantentes (no temporales / durables):
Stream de sesión (temporales / no durables):
En el contexto de los streams temporales, se puede jugar con la repetición y la duración para tener escenarios donde: