Relace vs. dokumenty vs. klíč-hodnota: jak vybrat datový model
Volba datového modelu je jedno z prvních rozhodnutí, které u českého e-shopu nebo API ovlivní vše ostatní. Špatně zvolený model se neprojeví hned při vývoji, ale ve chvíli, kdy začne růst objem dat nebo se změní požadavky na dotazy. Relační databáze staví na pevném schématu a cizích klíčích, dokumentové databáze ukládají celý objekt pohromadě a klíč-hodnota drží jen minimální strukturu. Každý přístup řeší jiný problém a žádný není univerzálně nejlepší.
Relační model dává smysl tam, kde potřebujete silné transakce a konzistenci napříč tabulkami. Typickým příkladem je objednávka, platba a skladová dostupnost, které musí být vždy v souladu. Pokud ale řešíte katalog produktů s proměnlivými atributy, dokumentový model vám ušetří spoustu migrací, protože jednotlivé produkty mohou mít odlišnou strukturu. Než se ale pustíte do přepisování stávajícího řešení, vyplatí se nejdřív pochopit, co je NoSQL a kdy ho použít, protože řada týmů sahá po novém typu databáze zbytečně brzy.
Klíč-hodnota je nejjednodušší a zároveň nejrychlejší varianta, ale hodí se hlavně pro cache, session store nebo čítače. Jakmile potřebujete filtrovat podle více atributů nebo spojovat data z různých zdrojů, narazíte na limity a začnete si logiku dotazů psát do aplikace. To se nevyplácí, protože se vám rozpadne konzistence a testování se výrazně zkomplikuje. U e-shopu se proto často kombinuje relační jádro pro objednávky s dokumentovým úložištěm pro produkty a klíč-hodnota pro rychlé cache.
Rozhodnutí by mělo vycházet z konkrétních dotazů, ne z popularity technologie. Sepište si pět až deset nejčastějších operací, které bude systém provádět, a podle nich porovnejte, jak si jednotlivé modely povedou. Pokud převažují složité joiny a transakce, zůstaňte u relací. Když naopak potřebujete flexibilní strukturu a horizontální škálování, dokumenty nebo klíč-hodnota mohou být lepší volbou. V praxi se ale málokdy vyplatí stavět celý e-shop na jediném typu databáze.