Migrace relační databáze na dokumentovou bez ztráty konzistence
Přechod z relační databáze na dokumentovou není jen výměna technologií. Je to změna myšlení o datech. V relačním modelu jsou data normalizovaná, rozdělená do tabulek a svázaná cizími klíči. Dokumentový model naproti tomu ukládá související data pohromadě, často v jednom dokumentu. Právě tady vzniká riziko nekonzistence, pokud migraci podceníte.
Prvním krokem je důkladná analýza současného schématu. Zjistěte, které tabulky se používají společně a které naopak žijí vlastním životem. Většina dotazů v aplikaci totiž stejně načítá data z více tabulek najednou. Pokud takové tabulky sloučíte do jednoho dokumentu, snížíte počet dotazů a zjednodušíte logiku. Není ale nutné všechno nacpat do jednoho dokumentu. Některá data je lepší nechat stranou, zvláště pokud rostou neomezeně. Pokud si nejste jistí, jak dokumentový model navrhnout, pomůže vám přehled o tom, co je NoSQL a kdy ho použít, protože špatně zvolený model se opravuje mnohem hůř než špatně napsaný dotaz.
Samotný přenos dat pak probíhá v několika fázích. Nejprve vytvořte nové kolekce a naplňte je daty z relační databáze. Během přenosu udržujte obě databáze v synchronizaci, ideálně pomocí change data capture nebo dočasného dvojího zápisu. Aplikaci přepínejte postupně, po částech, a vždy mějte možnost se vrátit. Konzistenci ověřujte průběžně, ne až na konci. Porovnávejte počty záznamů, kontrolní součty a vzorky dokumentů proti původním datům.
Po dokončení migrace je potřeba ověřit, že aplikace funguje správně i při výpadku jednoho uzlu. Dokumentové databáze často nabízejí eventual consistency, což je pro některé scénáře v pořádku, pro jiné ne. Nastavte úrovně čtení a zápisu podle toho, co vaše aplikace skutečně vyžaduje. A nezapomeňte na indexy. Bez nich bude migrace sice úspěšná, ale dotazy budou pomalé. Konzistence není jen o datech, ale i o výkonu, který uživatelé očekávají.