Bouw een Data Analytics Platform met Flask, SQL en Redis

In dit artikel zal ik de ontwikkeling van een op Flask gebaseerde webapplicatie bespreken die communiceert met een SQL Server-database om bevolkingsgegevens te analyseren. De applicatie stelt gebruikers in staat om bevolkingsbereiken op te vragen, provincies op te halen per staat en staten binnen specifieke bevolkingsbereiken op te halen. Ik zal ook bespreken hoe u Redis kunt integreren voor het cachen van queryresultaten om de prestaties te verbeteren.

Waarom Flask, SQL Server en Redis?

Flask is een lichtgewicht en flexibel Python webframework dat perfect is voor het bouwen van kleine tot middelgrote webapplicaties. Het biedt de benodigde tools om RESTful API’s te maken, dynamische HTML-templates te renderen en te communiceren met databases. Aan de andere kant is SQL Server een robuust relationeel databasebeheersysteem (RDBMS) dat veel wordt gebruikt in bedrijfstoepassingen. Door Flask te combineren met SQL Server kunnen we een krachtige applicatie bouwen voor gegevensanalyse en visualisatie.

Om de prestaties verder te verbeteren, zullen we Redis integreren, een in-memory datastore, om vaak opgevraagde queryresultaten te cachen. Dit vermindert de belasting op de database en versnelt de responstijden voor herhaalde queries.

Applicatie-overzicht

Onze Flask-applicatie voert de volgende taken uit:

  1. Query populatieranges. Gebruikers kunnen een jaar en populatierange opgeven om het aantal staten binnen die ranges te krijgen.
  2. Fetch counties per staat. Gebruikers kunnen een staatscode invoeren om een lijst van counties op te halen.
  3. Haal staten op op basis van populatierange. Gebruikers kunnen een populatierange en jaar opgeven om een lijst van staten binnen die range te krijgen.
  4. Opmerking. Voel je vrij om je eigen schema in de database te maken en voorbeeldgegevens in te voegen op basis van de volgende API’s die zijn gedeeld met behulp van SQL-query’s. Ook kunnen de HTML-pagina’s die hier worden gebruikt een basis tabelontwerp zijn dat de teruggegeven gegevens uit de Flask-appcode vastlegt en de resultaten weergeeft.

Laten we de implementatiedetails induiken.

De Flask-toepassing instellen

1. Vereisten

Voordat je begint, zorg ervoor dat je het volgende hebt geïnstalleerd via je terminal (commando’s compatibel met MacOS):

  • Python 3.x 
  • Flask (pip install flask)
  • SQLAlchemy (pip install sqlalchemy)
  • PyODBC (pip install pyodbc)
  • Redis (pip install redis

2. Databaseverbinding

We gebruiken SQLAlchemy om verbinding te maken met de SQL Server-database. Hier is hoe de verbinding kan worden geconfigureerd:

Python

 

Deze verbindingsreeks maakt gebruik van de ODBC-stuurprogramma voor SQL Server en bevat parameters voor versleuteling en time-out.

3. Redis Configuratie

Redis wordt gebruikt om queryresultaten te cachen. Zo stel je de Redis-verbinding in:

Python

 

4. Implementatie van de toepassingsroutes

Homepagina Route

De homepagina route rendert de hoofdpagina van de toepassing:

Python

 

Populatiebereikquery met Redis-caching

Deze route behandelt query’s voor populatiebereiken. Het controleert eerst of het resultaat gecachet is in Redis. Zo niet, dan wordt de database bevraagd en het resultaat gecachet voor toekomstig gebruik:

Python

 

Haal provincies op per staat met Redis-caching

Deze route haalt provincies op voor een gegeven staatcode. Het maakt ook gebruik van Redis om de resultaten te cachen:

Python

 

Haal staten op per populatiebereik met Redis-caching

Deze route haalt staten binnen een gespecificeerd populatiebereik op en cacht de resultaten:

Python

 

Prestatievergelijking: SQL Server vs. Redis

Query Type Redis Fetch Time SQL Execution Time
Populatiebereikquery (Gecachet) 0,002 seconden 0,000 seconden
Populatiebereikquery (Vers) 0,002 seconden 1,342 seconden

Belangrijkste leerpunt: Redis vermindert de uitvoeringstijd van ~1,3 seconden naar ~0,002 seconden, waardoor query’s 650x sneller worden!

Hoe Redis de prestaties verbetert

Redis is een in-memory dataopslag die fungeert als een cache-laag tussen de applicatie en de database. Zo werkt het in onze applicatie:

  • Cache-sleutel. Voor elke query wordt een unieke sleutel gegenereerd op basis van de parameters.
  • Cache-controle. Voordat een databasequery wordt uitgevoerd, controleert de applicatie of het resultaat al gecachet is in Redis.
  • Cache-hit. Als het resultaat wordt gevonden in Redis, wordt het onmiddellijk geretourneerd, waardoor een databasequery wordt vermeden.
  • Cache-miss. Als het resultaat niet wordt gevonden, wordt de query uitgevoerd en wordt het resultaat gecachet in Redis voor toekomstig gebruik.
  • Cache-verval. Gecachte resultaten worden ingesteld om te verlopen na een bepaalde tijd (bijv. 1 uur) om de gegevensversheid te garanderen.

Door veelgebruikte queryresultaten te cachen, vermindert Redis aanzienlijk de belasting op de database en verbetert het de responstijden voor herhaalde queries.

Conclusie

In dit artikel hebben we een Flask-applicatie gebouwd die communiceert met een SQL Server-database om bevolkingsgegevens te analyseren. We hebben Redis geïntegreerd om queryresultaten te cachen, waardoor de prestaties verbeteren en de belasting van de database afneemt. Door best practices te volgen, kunt u deze applicatie uitbreiden om complexere queries aan te kunnen en schaalbaar maken voor productiegebruik.

Link: De broncode van deze volledige applicatie is te vinden op GitHub.

Source:
https://dzone.com/articles/build-data-analytics-platform-flask-sql-redis