Vývojáři projektu SQLite zahájilo testování experimentálního backendu HCtree který podporuje zamykání na úrovni řádků a poskytuje vysokou úroveň paralelismu při zpracování dotazů.
Pokud jde o nový backend, ve kterém pracují, je zmíněno, že toto si klade za cíl zlepšit efektivitu používání SQLite v systémech klient-server Musí zpracovat velké množství souběžných požadavků na zápis do databáze.
the původně používané b-stromové struktury v SQLite pro ukládání dat Nejsou určeny pro tento typ zátěže., který omezuje SQLite na zápis pouze do jednoho streamu. Jako experiment začali vývojáři vyvíjet alternativní řešení, které používá pro ukládání struktury HCtree, vhodnější pro paralelizaci operací zápisu.
Projekt HC-tree (hctree) je pokusem o vývoj nového databázového backendu, který vylepšuje běžný SQLite takto:
Vylepšená souběžnost: Použitím rozšíření begin-concurrent se to změní tak, že jej lze spouštět souběžně pomocí optimistického zamykání na úrovni stránky. To poněkud zlepšuje souběžnost, ale zamykání na úrovni stránky může detekovat konflikty mezi logicky nezávislými transakcemi a operace COMMIT je stále třeba serializovat.
Podpora replikace: Stock SQLite podporuje rozšíření relace, který umožňuje serializaci obsahu potvrzené transakce pro přenos a aplikaci do druhé databáze. Hctree to integruje do databázového backendu a přidává podporu pro použití takových transakcí na databáze následovníků v konfiguracích vedoucí-následovatel. V tomto případě lze transakce přijaté z hlavní databáze použít rychleji a s větší souběžností než ty, které byly původně aplikovány na hlavní databázi, protože ověření transakce.
Odstranění omezení velikosti databáze: Stock SQLite používá 32bitová čísla stránek. Při použití výchozí velikosti stránky 4 kB to vede k maximální velikosti databáze 2^44 bajtů nebo 16 TiB.
Chcete-li zvládnout několik operací současně, Protokoly HCtree používají mechanismus oddělení transakcí který používá zámky na úrovni stránky, podobně jako MVCC (kontrola zadržování více verzí), ale místo sad stránek používá ovládací prvky transakcí založené na rozsazích klíčů a rozsazích klíčů.
Operace čtení a zápisu se provádějí vzhledem ke snímku databáze, jehož změny jsou viditelné v hlavní databázi až po dokončení transakce.
Klienti mohou k otevření transakcí použít tři operace:
- «ZAČÍT«: Transakce nezohledňují přístupové údaje ostatních zákazníků. Jsou-li operace zápisu prováděny v rámci transakce, lze transakci potvrdit pouze tehdy, pokud v době jejího provádění nebyly do databáze žádné jiné operace zápisu.
«ZAČNĚTE SOUČASNĚ«: Transakce shromažďují informace o přístupu jiných klientů. Pokud jsou v rámci transakce prováděny operace zápisu, lze transakci potvrdit, pokud byly do databáze od vytvoření snímku potvrzeny jiné transakce.
«ZAČNĚTE EXKLUZIVNĚ«: po otevření transakce zablokuje operace ostatních transakcí, dokud nebude dokončena.
HCtree podporuje replikaci master-slave, která umožňuje přenášet transakce do jiné databáze a udržovat sekundární databáze v synchronizaci s primární databází.
HCtree také odstraňuje omezení velikosti databáze: místo 32bitových identifikátorů datové stránky používá HCtree 48bitové identifikátory, což zvyšuje maximální velikost databáze z 16 tebibajtů na 1 exbibajt (milion tebibajtů).
Očekává se, že výkon SQLite s backendem HCtree bude minimálně tak dobrý jako u klasického jednovláknového backendu. Klienti SQLite s podporou HCtree budou mít přístup jak k databázím stromu HC, tak ke starším databázím SQLite.
zdroj: https://sqlite.org/