Migrace relační databáze na dokumentovou: dotazy a transakce
Přechod z relační databáze na dokumentovou není jen výměna úložiště. Znamená to přepsat způsob, jakým přemýšlíte o datech. V relačním modelu máte tabulky, cizí klíče a JOINy. V dokumentovém modelu máte kolekce a dokumenty, které drží pohromadě data, jež patří k sobě. První krok je zbavit se JOINů. Místo spojování tabulek v dotazu data vnoříte přímo do dokumentu nebo je denormalizujete. To znamená, že některé dotazy budou rychlejší, ale aktualizace mohou být složitější, protože musíte měnit data na více místech.
Dotazy v relační databázi často používají WHERE s více podmínkami a ORDER BY. V dokumentové databázi, jako je MongoDB, použijete find s filtrem a sort. Problém nastane u agregací. Relační GROUP BY a HAVING nahradíte agregačním pipeline. Ten je výkonný, ale jinak se píše. Pokud si nejste jistí, jestli je dokumentová databáze pro váš případ vhodná, přečtěte si článek o tom, co je NoSQL a kdy ho použít, než začnete přepisovat produkční dotazy. U transakcí platí, že relační databáze nabízejí ACID napříč tabulkami. Dokumentové databáze mají transakce také, ale často jen v rámci jednoho dokumentu nebo s omezeními. Pokud vaše aplikace spoléhá na složité transakce s více tabulkami, bude migrace náročnější.
Přepis transakcí vyžaduje změnu logiky. Místo BEGIN a COMMIT nad několika tabulkami použijete transakci nad několika dokumenty, pokud to databáze podporuje. Často ale stačí transakci nahradit idempotentními operacemi a verzováním. Například místo převodu peněz mezi dvěma účty v jedné transakci zapíšete dva samostatné dokumenty a stav dopočítáte. To zní jako krok zpět, ale v distribuovaném prostředí je to někdy jediná cesta. Musíte také řešit konzistenci. Relační databáze vám ji drží sama. U dokumentové si ji musíte ohlídat v aplikaci.
Než začnete migrovat, udělejte inventuru dotazů a transakcí. Zjistěte, které dotazy jsou kritické a které se dají obětovat. Napište si testy, které ověří, že nové dotazy vracejí stejná data jako staré. Migrujte po částech, ne vše najednou. Začněte s jednoduchými čteními, pak přejděte na zápisy a nakonec na transakce. Počítejte s tím, že některé věci budou pomalejší a některé rychlejší. Dokumentová databáze není univerzální náhrada. Je to jiný nástroj pro jiný typ problémů.