Gli sviluppatori SQLite sviluppano un backend HC-tree con supporto per scritture parallele

Gli sviluppatori del progetto SQLite hanno iniziato a testare un backend sperimentale HCtree che supporta il blocco a livello di riga e fornisce un elevato livello di parallelizzazione durante l'elaborazione delle query. Il nuovo backend ha lo scopo di migliorare l'efficienza dell'utilizzo di SQLite nei sistemi client-server che devono elaborare un gran numero di richieste di scrittura simultanee sul database.

Le strutture b-tree utilizzate nativamente in SQLite per archiviare i dati non sono progettate per questo tipo di carico, il che limita SQLite a scrivere su un solo thread. A titolo sperimentale, gli sviluppatori hanno iniziato a sviluppare una soluzione alternativa che utilizza strutture ad albero HC per l'archiviazione, più adatte per parallelizzare le operazioni di scrittura.

Per consentire l'esecuzione simultanea di più operazioni, un record HCtree utilizza un meccanismo di partizionamento delle transazioni che utilizza il blocco a livello di pagina ed è simile a MVCC (Multi-Version Concurrency Control) ma utilizza controlli delle transazioni basati su chiavi e intervalli di chiavi anziché su set di pagine. Le operazioni di lettura e scrittura vengono eseguite in connessione con uno snapshot del database, le cui modifiche diventano visibili nel database principale solo dopo il completamento della transazione.

I clienti possono utilizzare tre operazioni di transazione aperte:

  • “BEGIN”: le transazioni non tengono conto dei dati di accesso di altri clienti. Se all'interno di una transazione vengono eseguite operazioni di scrittura, è possibile effettuare il commit della transazione solo se durante la sua esecuzione non sono state effettuate altre operazioni di scrittura nel database.
  • "BEGIN CONCURRENT" - le transazioni raccolgono informazioni sull'accesso di altri client. Se le operazioni di scrittura vengono eseguite all'interno di una transazione, è possibile eseguire il commit della transazione se sono state eseguite altre transazioni nel database da quando è stato creato lo snapshot.
  • “BEGIN EXCLUSIVE” - dopo aver aperto una transazione, blocca le operazioni di altre transazioni fino al suo completamento.

HCtree supporta la replica master-slave, che consente di migrare le transazioni su un altro database e mantenere i database secondari sincronizzati con il database primario. HCtree rimuove anche la limitazione sulla dimensione del database: invece degli identificatori di pagina dati a 32 bit, HCtree utilizza quelli a 48 bit, il che aumenta la dimensione massima del database da 16 tebibyte a 1 exbibyte (milione di tebibyte). Si prevede che le prestazioni di SQLite con il backend HCtree non saranno inferiori a quelle del classico backend a thread singolo. I client SQLite con supporto HCtree saranno in grado di accedere sia ai database basati su HCtree che ai database SQLite legacy.

Fonte: opennet.ru

Aggiungi un commento