GraphQL.cz/Fórum/Caching v GraphQL resolvers - Jak na to?

Caching v GraphQL resolvers - Jak na to?

Zajímalo by mě, jestli někdo z vás používá caching ve svých GraphQL resolvers. V poslední době se mi zdá, že moje API začíná být pomalejší, zvlášť když mám hodně požadavků na stejné data. Chtěl bych se dozvědět, jaké techniky nebo knihovny používáte pro cachování v GraphQL. Zkoušel jsem pár věcí, ale nikdy jsem si nebyl jistý, jestli to dělám správně. Zajímá mě, jestli máte zkušenosti s některými konkrétními řešeními jako Redis nebo Apollo Client. Jak implementujete caching? Používáte nějaké middleware nebo přímo v resolvers? A co třeba invalidace cache? To mi přijde jako docela složitý problém. Kdy a jak byste ji měli invalidovat? Pokud máte nějaké příklady nebo tipy, byl bych za ně moc vděčný. Mělo by to být něco, co se dá snadno aplikovat na moje stávající projekty. Rád bych se poučil z vašich zkušeností a zjistil, jak efektivně zlepšit výkon mého GraphQL API. Dík za jakoukoli pomoc!

149 slov
1.5 minut čtení
1. 7. 2021
Nikola Benešová

Caching v GraphQL resolvers může být fakt game changer, když jde o výkon. Já osobně používám Redis, je to rychlé a snadno se to integruje. V podstatě, když resolver dostane požadavek na data, nejdřív se podívám do cache, jestli už tam ty data nejsou. Když jo, vrátím je hned, když ne, tak je načtu z DB a pak je uložíme do cache pro příští použití.

Myslím, že bys mohl použít middleware pro caching, aby ti to odpadlo ze samotných resolverů. Například Apollo Server má dobře udělanou podporu pro caching a můžeš použít @cacheControl direktivu, což je super.

Co se týče invalidace cache, to je těžší oříšek. Obvykle se snažím invalidovat cache, když dojde ke změně dat v DB - třeba po UPDATE nebo DELETE operaci. Můžeš si udělat nějaké TTL (Time-To-Live) pro data v cache, takže po určité době se to automaticky zruší. Ale to chceš nastavit chytře podle toho, jak často se tvoje data mění.

Zkus si s tím trochu pohrábat a uvidíš, co ti sedí nejlíp. Caching může dost pomoct, takže určitě do toho jdi.

176 slov
1.8 minut čtení
18. 10. 2024
Miroslav Hloušek

Caching v GraphQL resolvers může být fakt game-changer, když to uděláš správně. Já osobně používám Redis, protože je rychlý a dobře se integruje. Můžeš si nastavit caching přímo v resolvers – prostě zkontroluj, jestli máš data v cache, a pokud jo, tak to vrátíš místo znovu načítání z databáze. V případě Apollo Client to taky funguje dobře, ale víc pro front-end, takže zaleží na tvém stacku.

Invalidace cache je oříšek. Když se něco změní v databázi, měl bys invalidovat cache buď ručně (to je dost práce) nebo použít nějaké automatizované mechanismy. Například můžeš sledovat události a když dojde k update nebo delete, tak zrušíš cache pro konkrétní dotaz. Vzít si nějakou knihovnu na middleware může taky pomoct, aby to bylo víc elegantní.

Zkus to postupně implementovat a měřit výkon – možná najdeš i další bottlenecky jinde. Hodně štěstí!

137 slov
1.4 minut čtení
24. 12. 2024
Tomáš Kalous

Caching v GraphQL resolvers může fakt dost zrychlit tvoje API. Já osobně používám Redis, protože je to rychlý a spolehlivý. Vytvořím middleware, který se podívá, jestli už data nejsou v cache, a pokud ano, tak je rovnou vrátí. Jinak udělám dotaz do databáze a výsledky uložím do cache. Co se invalidace týče, to je oříšek – snažím se invalidovat cache při jakýchkoliv změnách dat. Třeba u mutací po úspěšném přidání/úpravě dat prostě vymazu relevantní entry z cache. Používám taky Apollo Client pro frontend, což mi dovoluje mít lokální cache a tím pádem nemusím pořád volat server pro stejný data. Je to taková kombinace – middleware na backendu a lokální cache na frontendě. Zkus to, fakt to může pomoct s výkonem!

120 slov
1.2 minut čtení
16. 12. 2024
Richard Vojtěch
GraphQL.cz/Články/Účinnost resolverů
Pohled na batching a caching ve resolverech: Zefektivnění výkonu GraphQLObjevte, jak techniky batching a caching mohou zásadně zlepšit výkon vašich GraphQL resolverů. Přečtěte si, jak tyto metody fungují a jak je implement...
1000 slov
10 minut čtení
20. 5. 2020
Jan Procházka
Přečíst článek
Podobné otázky