Return to search

Prestanda i ett GraphQL-API : Ett experiment med databaser och verktyg för hantering av N+1-problemet

Efficient performance is pivotal for digital service and product retention, necessitating consideration and design throughout system development. Central to this is the API, orchestrating communication between client and server within a system. GraphQL, created in 2012, revolutionized this interaction by enabling precise data requests. However, less sophisticated implementations of GraphQL often encounter the N+1 problem, where a query requiring N additional database queries is executed, leading to performance inefficiencies. With increasing data interconnectedness, query complexity and the choice of database management system (DBMS) become critical factors. This study investigates whether a GraphQL API performs better with Neo4j, a graph database, or MariaDB, a relational database, and evaluates how various N+1 problem solving tools influence API performance. The study conducted experiments with six API configurations, each subjected to five queries of varying complexity. One configuration utilized Neo4j, while the remaining five used MariaDB. Among the latter, three configurations integrated N+1 problem solving tools. The study shows that, when query complexity and data interconnectedness is low, response times from a GraphQL API using MariaDB, without solving the N+1-problem, are shorter than the response times of an API using Neo4j. It also demonstrates the efficacy of Neo4j when data becomes more interconnected. Furthermore, the study concludes that addressing the N+1 problem is crucial, and that different tools offer varying levels of performance in solving it. Tools that do manage to solve this issue commonly show a significant improvement in response times when interconnected data is requested. / Effektiv prestanda är avgörande för att behålla användare av digitala tjänster och produkter, och måste tas i beaktande när ett system utvecklas. Centralt i sammanhanget är API:et, som koordinerar kommunikationen mellan klient och server inomett system. GraphQL, som skapades 2012, revolutionerade denna interaktion genomatt möjliggöra exakta dataförfrågningar. Mindre genomtänkta implementationer avGraphQL stöter ofta på N+1-problemet, där en förfrågan som kräver N ytterligare databasförfrågningar utförs, vilket leder till sämre prestanda. Med starkare kopplingar mellan data blir komplexiteten i förfrågningar och valet av databas avgörande faktorer. Denna studie syftar till att utforska om ett GraphQL-API presterar bättre medNeo4j, en grafdatabas, eller MariaDB, en relationsdatabas, och utvärderar hur olika verktyg, som löser N+1-problemet, påverkar API-prestandan. Studien genomförde experiment med sex API-konfigurationer, var och en testad med fem förfrågningar av varierande komplexitet. En konfiguration använde Neo4j, medan övriga fem använde MariaDB. Tre av dessa fem konfigurationer implementerade verktyg för att lösa N+1-problemet. Studien visar att, vid enklare frågor utan kopplad data, kan ett GraphQL-API, som använder MariaDB utan att lösa N+1-problemet, ge mycket kortare svarstider än ett API med Neo4j. Neo4j visar däremot sin effektivitet när data med kopplingar efterfrågas. Vidare visade experimenten på vikten av att lösa N+1-problemet. Verktygen lyckades lösa problemet olika väl, men gemensamt för de verktyg som klarar av att lösa det är att de förbättrar svarstiderna avsevärt så fort kopplad data efterfrågas.

Identiferoai:union.ndltd.org:UPSALLA1/oai:DiVA.org:bth-26270
Date January 2024
CreatorsMartin, Fooladi, Pontus, Åkerberg
PublisherBlekinge Tekniska Högskola, Institutionen för datavetenskap
Source SetsDiVA Archive at Upsalla University
LanguageSwedish
Detected LanguageSwedish
TypeStudent thesis, info:eu-repo/semantics/bachelorThesis, text
Formatapplication/pdf
Rightsinfo:eu-repo/semantics/openAccess

Page generated in 0.0019 seconds