\begin{frame} \frametitle{Optimistic Concurrency Control: Validation} \vspace{-.5ex} \begin{goal}{} Validation is typically implemented by maintaining: \begin{itemize} \item a \emph{read set RS($T_k$)} (attributes read by $T_k$), and \item a \emph{write set WS($T_k$)} (attributes written by $T_k$) \end{itemize} for every transaction $T_k$. \end{goal} \pause \begin{block}{Backward-oriented optimistic concurrency control (BOCC)} On commit, compare $T_k$ against all \emph{committed} transactions $T_i$.\\ Check \emph{succeeds} if \begin{tcenter} $T_i$ committed before $T_k$ started \;\;\emph{or}\;\; RS($T_k$) $\cap$ WS($T_i$) = $\varnothing$ \end{tcenter} If the check fails, abort $T_k$. \end{block} \pause \begin{block}{Forward-oriented optimistic concurrency control (FOCC)} On commit, compare $T_k$ against all \emph{running} transactions $T_i$.\\ Check \emph{succeeds} if \begin{tcenter} WS($T_k$) $\cap$ RS($T_i$) = $\varnothing$ \end{tcenter} If the check fails, abort $T_k$ or $T_i$. \end{block} \end{frame}