O talento em bases de dados

Há uma grande procura de profissionais na área das bases de dados, nomeadamente para o ambiente de administração de bases de dados (os denominados DBAs), como se pode rapidamente concluir através de breves pesquisas, utilizando a expressão “base dados”, em sites especializados em ofertas de emprego em áreas mais tecnológicas (Figura 1).

Figura 1: Pesquisas para “base dados” nestes três sites em 22/4/2017.

Uma das maiores dificuldades que as empresas, nacionais e internacionais, têm no recrutamento de talentos com formação e/ou experiência nesta área é precisamente a sua escassez. Isso tem provocado uma (pequena) inflação nos salários oferecidos aos profissionais ainda disponíveis.

Como tal, pode ser interessante o investimento pessoal em formação na área das bases de dados, quer seja numa óptica de desenho e construção da base de dados, como na vertente mais complexa relacionada com a administração dos sistemas de bases de dados.

DBA | Isolamento de transacções

As normas ANSI SQL determinam os seguintes três tipos de isolamento transaccional nos sistemas de gestão de bases de dados:

  1. Dirty Read. A transacção T1 modifica um facto. Outra transacção T2 lê esse mesmo facto antes que T1 faça commit ou rollback. Se T1 desistir da transacção (rollback) então T2 leu um facto que nunca foi confirmado e, como tal, nunca existiu.
  2. Non-Repeatable Reads. A transacção T1 lê um facto. Outra transacção T2 modifica ou apaga esse facto e faz commit. Se T1 renovar o pedido desse facto descobre que ele foi modificado ou que já não existe.
  3. Phantom. A transacção T1 lê um conjunto de factos de acordo com uma determinada condição. A transacção T2 insere novos factos, que satisfazem a condição de T1, e confirma-os na base de dados. Se T1 voltar a fazer a mesma leitura-condição obtém um conjunto de factos distintos dos da leitura inicial.

DBA | Gestão de Transacções

O papel da gestão de transacções é o de assegurar que as transacções são gravadas correctamente na base de dados. O gestor de transacções é o componente do SGBDR que processa esses movimentos de dados. Uma transacção é um conjunto de acções ou movimentos de dados considerados de modo a que sejam todos gravados na base de dados ou rejeitados na sua totalidade. Uma transacção é uma unidade atómica de trabalho em que todos os seus elementos têm que ser processados, caso contrário a base de dados ficará inconsistente. O pagamento de uma propina escolar, por exemplo, é uma transacção que se subdivide, em grandes linhas, em dois elementos: a actualização do saldo da conta de propinas da escola, e a actualização dos montantes pagos por esse aluno. A base de dados ficaria inconsistente se se alterasse um único desses elementos: ou se faz tudo ou não se faz nada.

O princípio da atomicidade transaccional exige que todo o conteúdo transaccional seja processado segundo a regra do “tudo-ou-nada”, e que cada conjunto de transacções seja transmissível em série / realizável (serializable). Quando uma transacção é interrompida antes do seu termo o gestor de transacções têm que repor a base de dados no estado em que se encontrava antes do início da operação, desfazendo todas as acções entretanto efectuadas. As transacções, por uma questão de eficiência e de eficácia, não devem durar mais do que o necessário de modo a assegurar a integridade do sistema. No caso da liquidação de uma propina o pagamento do aluno e o crédito na contabilidade da escola é a unidade mínima de trabalho necessária para manter as contas em dia.

DBA | Transacção

Uma transacção agrupa um conjunto de operações que transformam a base de dados de uma estado consistente n para outro estado consistente n+1. Pode considerar-se que há uma história – ou cronograma ou processo – que modela/transforma a execução em simultâneo (interleaved) de um conjunto de transacções numa série temporal de operações lienares sobre determinadas peças de informação.
Duas operações nesse cronograma entram em conflito quando pertencem a transacções distintas e, pelo menos, uma delas efectua uma operação de escrita sobre a mesma peça de informação. Uma peça de informação pode ser, por exemplo, uma linha de uma tabela, uma coluna de uma tabela, uma tabela inteira, ou um espaço de tabelas.
Uma história pode resumir-se num grafo de dependências que estabelece as marcas temporais no fluxo de dados entre transacções. Uma história é compreensível e é considerada realizável (serializable) quando é equivalente a um conjunto de eventos realizados em série, i.e., quando o seu grafo de dependências tem a mesma cronologia de uma história que execute sequencialmente (em série) as transacções.