Skip to content

Commit aa3712e

Browse files
committed
Ultimas modificaciones Cap 5 - Estrategias de plan. de consultas
1 parent 80410b6 commit aa3712e

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

chapters/5-scheduling.tex

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
\chapter{Estrategias de planificación de consultas}
22
\label{cap:planificacion}
3-
Los motores de búsqueda verticales son diseñados con el propósito de lidiar con cargas dinámicas de trabajo. Un ejemplo de un motor de búsqueda vertical, es un motor de publicidad que ejecuta una consulta cada vez que un usuario abre un correo electrónico en por ejemplo, el servicio de \textit{Yahoo! mail}; de esta forma se muestra publicidad de acuerdo al contenido del correo electrónico. Eventualmente millones de usuarios concurrentes están conectados a sus correos electrónicos, por lo que la carga de trabajo esperada para el motor de búsqueda puede llegar a órdenes de las cien mil consultas por segundo \citep{Gil-Costa:2013}. Adicionalmente, el hecho que las actualizaciones en un motor de búsqueda vertical ocurran con mayor frecuencia que en uno de propósito general, hace que el diseño de los algoritmos para procesar las consultas sea diferente; también se debe permitir la actualización del índice invertido.
3+
Los motores de búsqueda verticales son diseñados con el propósito de lidiar con cargas dinámicas de trabajo. Un ejemplo de un motor de búsqueda vertical, es un motor de publicidad que ejecuta una consulta cada vez que un usuario abre un correo electrónico en por ejemplo, el servicio de \textit{Yahoo! mail}; de esta forma se muestra publicidad de acuerdo al contenido del correo electrónico. Eventualmente, millones de usuarios concurrentes están conectados a sus correos electrónicos, por lo que la carga de trabajo esperada para el motor de búsqueda puede llegar a órdenes de las cien mil consultas por segundo \citep{Gil-Costa:2013}. Adicionalmente, el hecho que las actualizaciones en un motor de búsqueda vertical ocurran con mayor frecuencia que en uno de propósito general, hace que el diseño de los algoritmos para procesar las consultas sea diferente; también se debe permitir la actualización del índice invertido.
44

55
Por lo anteriormente mencionado, se hace imperioso tener un sistema diseñado que soporte altas cargas de trabajo, y las respuestas a consultas esten en una cota de tiempo aceptable para el usuario sin mermar la calidad de los resultados obtenidos. También es necesario que las estructuras de datos y algoritmos implementados soporten la concurrencia entre las transacciones de lecturas y escrituras; ya que eventualmente el motor de búsqueda tendrá que dejar de procesar consultas para poder servir las transacciones de escritura que actualizan el índice invertido.
66

@@ -9,7 +9,7 @@ \chapter{Estrategias de planificación de consultas}
99

1010
\section{Estrategias por bloques}
1111
\label{scheduling:bloques}
12-
Un sistema de planificación de un motor de búsqueda trabaja en un contexto \textit{online}, esto significa que desconoce las transacciones que vendrán en el futuro y que cuando llega una nueva transacción de lectura, se debe tomar una decisión rápida acerca de qué hacer con ella. Adicionalmente, una transacción de lectura debe ser resuelta dentro de una cota superior de tiempo, al cual se llamará $t_{limite}$. En el contexto del presente trabajo, para que el planificador tome una decisión con respecto a una consulta, debe conocer de ella (1) su tiempo de ejecución y (2) el número de hebras con los que será resuelta. El tiempo de ejecución de cada consulta se obtiene utilizando los métodos de predicción de tiempos mostrados en el Capítulo \ref{cap:prediccion}; una vez que se predice el tiempo esperado $t_{esperado}$ de cada consulta para $1$,$2$,$4$,$8$ y $16$ hebras, se asigna el número de hilos de ejecución tal que se cumpla que $t_{esperado} < t_{limite}$, de esta forma se satisface la condición de que todas las consultas deben ser resueltas en una cota superior de tiempo previamente definida.
12+
Un sistema de planificación de un motor de búsqueda trabaja en un contexto \textit{online}, esto significa que desconoce las transacciones que vendrán en el futuro y que cuando llega una nueva transacción de lectura, se debe tomar una decisión rápida acerca de qué hacer con ella. Adicionalmente, una transacción de lectura debe ser resuelta dentro de una cota superior de tiempo, al cual se llamará $t_{limite}$. En el contexto del presente trabajo, para que el planificador tome una decisión con respecto a una consulta, debe conocer de ella (1) su tiempo de ejecución y (2) el número de hebras con los que será resuelta. El tiempo de ejecución de cada consulta se obtiene utilizando los métodos de predicción de tiempos mostrados en el Capítulo \ref{cap:prediccion}; una vez que se predice el tiempo esperado $t_{esperado}$ de cada consulta para $1$, $2$, $4$, $8$ y $16$ hebras, se asigna el número de hilos de ejecución tal que se cumpla que $t_{esperado} < t_{limite}$, de esta forma se satisface la condición de que todas las consultas deben ser resueltas en una cota superior de tiempo previamente definida.
1313

1414
Bajo el contexto de un motor de búsqueda en el que se debe planificar transacciones de lecturas que eventualmente serán resueltas de forma paralela por diferentes hilos de ejecución, existe una estrategia teórica llamada RW que aborda este problema \citep{Ye:2007} y se adapta a este escenario de un motor de búsqueda vertical; esta estrategia del estado del arte da pie para que en el presente trabajo de tesis se proponga dos nuevas estrategias siguiendo el mismo enfoque de RW, pero estas enfocadas principalmente en mejorar la asignación de consultas a bloques, para así reducir el tiempo ocioso de las hebras.
1515

@@ -38,27 +38,27 @@ \subsection{Estrategia Rooms y Walls}
3838
\REQUIRE Una SchedulingList $L$ en donde se hará la planificación, QueryObject $Q$ a planificar
3939
\ENSURE SchedulingList $L$ con la nueva query planificada
4040

41-
\IF {$isBig(query)$}
41+
\IF {$isBig(Q)$}
4242
\STATE $block = new Wall();$
43-
\STATE $block \rightarrow addQuery(query);$
43+
\STATE $block \rightarrow addQuery(Q);$
4444
\STATE $L \rightarrow addBlock(block);$
4545
\ELSE
4646
\STATE $asignada = false;$
4747
\FOR {$ i = L \rightarrow firstOpenBlockLocked() ... L \rightarrow size()$}
4848
\STATE $room\_block = L \rightarrow getBlockLocked(i);$
4949

50-
\IF {$(room\_block \rightarrow isOpen()) \& \&
51-
(room\_block \rightarrow freeThreads() >= query \rightarrow getThreads())$
50+
\IF {$(room\_block \rightarrow isOpen()) \And
51+
(room\_block \rightarrow freeThreads() >= Q \rightarrow getThreads())$
5252
}
53-
\STATE $room\_block \rightarrow addQuery(query)$
53+
\STATE $room\_block \rightarrow addQuery(Q)$
5454
\STATE $asignada = true$
5555
\STATE $break;$
5656
\ENDIF
5757
\ENDFOR
5858

5959
\IF {$!(asignada)$}
6060
\STATE $block = new Room();$
61-
\STATE $block \rightarrow addQuery(query);$
61+
\STATE $block \rightarrow addQuery(Q);$
6262
\STATE $L \rightarrow addBlockLocked(block);$
6363
\ENDIF
6464
\ENDIF
@@ -94,10 +94,10 @@ \subsection{Estrategia Times}
9494
\STATE $best\_diff = INF;$
9595
\FOR {$ i = L \rightarrow firstOpenBlockLocked() ... L \rightarrow size()$}
9696
\STATE $block = L \rightarrow getBlockLocked(i);$
97-
\IF {$ block block \rightarrow freeThreads() \geq query \rightarrow getThreads() $}
97+
\IF {$ block block \rightarrow freeThreads() \geq Q \rightarrow getThreads() $}
9898
\STATE $tiempo\_min = block \rightarrow getMinimumTime()$
99-
\IF {$ block \rightarrow isSchedulable(query) $}
100-
\STATE $L \rightarrow addQuery(query);$
99+
\IF {$ block \rightarrow isSchedulable(Q) $}
100+
\STATE $L \rightarrow addQuery(Q);$
101101
\STATE $assigned = true;$
102102
\STATE $break;$
103103
\ENDIF
@@ -107,9 +107,9 @@ \subsection{Estrategia Times}
107107
\ENDIF
108108
\ENDIF
109109
\ENDFOR
110-
\IF {$ !(assigned) \& \& (blocks\_viewed \geq MAX\_BLOCKS\_CHECKED) $}
110+
\IF {$ !(assigned) \And (blocks\_viewed \geq MAX\_BLOCKS\_CHECKED) $}
111111
\STATE $block = new QueryBlock();$
112-
\STATE $block \rightarrow addQuery(query);$
112+
\STATE $block \rightarrow addQuery(Q);$
113113
\STATE $L \rightarrow addBlockLocked(block);$
114114
\ENDIF
115115
\end{algorithmic}
@@ -136,20 +136,20 @@ \subsection{Estrategia Times Ranges}
136136
\begin{algorithmic}[1]
137137
\REQUIRE Una SchedulingList $L$ en donde se hará la planificación, QueryObject $Q$ a planificar
138138
\ENSURE SchedulingList $L$ con la nueva query planificada
139-
\STATE $range = getQueryRange(query);;$
139+
\STATE $range = getQueryRange(Q);$
140140
\FOR {$ i = L \rightarrow firstOpenBlockLocked() ... L \rightarrow size()$}
141141
\STATE $block = L \rightarrow getBlockLocked(i);$
142-
\IF {$ block block \rightarrow freeThreads() \geq query \rightarrow getThreads() \& \& block_ranges[i] == range$}
143-
\STATE $block = L \rightarrow addQuery(query);$
142+
\IF {$ block \rightarrow freeThreads() \geq query \rightarrow getThreads() \And block\_ranges[i] == range$}
143+
\STATE $block = L \rightarrow addQuery(Q);$
144144
\STATE $asignada = true;$
145145
\STATE $break;$
146146
\ENDIF
147147
\ENDFOR
148148
\IF {$ !(asignada) $}
149149
\STATE $block = new QueryBlock();$
150-
\STATE $block->addQuery(query);$
150+
\STATE $block \rightarrow addQuery(Q);$
151151
\STATE $L \rightarrow addBlockLocked(block);$
152-
\STATE $block_ranges[L \rightarrow size - 1] = range;$
152+
\STATE $block\_ranges[L \rightarrow size - 1] = range;$
153153
\ENDIF
154154
\end{algorithmic}
155155
\end{algorithm}

tesis-postgrado.pdf

-52 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)