iidec / Integra.Space.Language-upstream

Lenguaje de consulta que permite el acceso a datos en tiempo real
0 stars 0 forks source link

Modos de ejecución de streams #45

Closed marianogenovese closed 7 years ago

marianogenovese commented 8 years ago

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:

OscarCanek commented 7 years ago

Podría detallar un poco mas los puntos:

marianogenovese commented 7 years ago

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

OscarCanek commented 7 years ago

Interpretación

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.

marianogenovese commented 7 years ago

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).