Desenvolvedores SQLite desenvolvem backend HC-tree com suporte para gravações paralelas

Os desenvolvedores do projeto SQLite começaram a testar um back-end experimental do HCtree que oferece suporte ao bloqueio em nível de linha e fornece um alto nível de paralelização ao processar consultas. O novo backend visa melhorar a eficiência do uso do SQLite em sistemas cliente-servidor que precisam processar um grande número de solicitações de gravação simultâneas no banco de dados.

As estruturas b-tree usadas nativamente no SQLite para armazenar dados não são projetadas para esse tipo de carga, o que limita o SQLite a gravar em apenas um thread. Como experiência, os desenvolvedores começaram a desenvolver uma solução alternativa que utiliza estruturas de árvore HC para armazenamento, mais adequadas para paralelizar operações de gravação.

Para permitir que várias operações sejam executadas simultaneamente, um registro HCtree usa um mecanismo de particionamento de transação que usa bloqueio em nível de página e é semelhante ao MVCC (Controle de simultaneidade multiversão), mas usa verificações de transação baseadas em chaves e intervalos de chaves em vez de conjuntos de páginas. As operações de leitura e gravação são executadas em conexão com um instantâneo do banco de dados, cujas alterações se tornam visíveis no banco de dados principal somente após a conclusão da transação.

Os clientes podem usar três operações de transação aberta:

  • “BEGIN” – as transações não levam em consideração dados de acesso de outros clientes. Se operações de gravação forem executadas dentro de uma transação, a transação poderá ser confirmada somente se durante sua execução não houver outras operações de gravação no banco de dados.
  • “BEGIN CONCURRENT” - as transações coletam informações sobre o acesso de outros clientes. Se operações de gravação forem executadas em uma transação, a transação poderá ser confirmada se outras transações tiverem sido confirmadas no banco de dados desde que o instantâneo foi criado.
  • “BEGIN EXCLUSIVE” - após a abertura de uma transação, bloqueia operações de outras transações até que ela seja concluída.

HCtree oferece suporte à replicação mestre-escravo, o que permite migrar transações para outro banco de dados e manter os bancos de dados secundários sincronizados com o banco de dados primário. O HCtree também remove a limitação do tamanho do banco de dados - em vez de identificadores de página de dados de 32 bits, o HCtree usa identificadores de 48 bits, o que aumenta o tamanho máximo do banco de dados de 16 tebibytes para 1 exbibyte (milhão de tebibytes). Espera-se que o desempenho do SQLite com o backend HCtree não seja inferior ao backend clássico de thread único. Os clientes SQLite com suporte HCtree poderão acessar bancos de dados baseados em árvore HC e bancos de dados SQLite legados.

Fonte: opennet.ru

Adicionar um comentário