web-dev-qa-db-fra.com

Qu'est-ce qui rend un pipeline de données évolutif? Meilleures pratiques pour un design évolutif?

Je cherche ce sujet depuis quelques jours et je n'ai encore rien trouvé sur des livres, des cours ou des tutoriels.

Qu'est-ce qu'un moyen de rendre les pipelines de données plus évolutifs, cela n'implique pas NOSQL ou des investissements majeurs tels que les clusters Hadoop?

La plupart de nos pipelines sont actuellement fabriqués avec Python. Ils sont assez simples de nature: l'application se connecte à une base de données SQL, récupère des données brutes dans un Dataframe, le transforme, puis la nourrit à une application de production.

Ma question est la suivante: où dans cette conception est une évolutivité définie? Ou plutôt, si nous accélérons le volume de données qui vont et que la partie de cette conception commencerait à donner des problèmes? J'ai lu comment une grande raison pour laquelle NOSQL est plus efficace que SQL à la mise à l'échelle est que les contraintes SQL prennent beaucoup de ressources à appliquer.

Donc, dans mon exemple, cela serait-il déjà évolutif? Étant donné que SQL ne participe que dans le processus d'ingestion de données brutes, tandis que des calculs sont effectués en dehors de SQL via Python/Pandas (donc à ma connaissance, aucune contrainte n'est vérifiée ou appliquée), alors les résultats sont définis sur une autre application.

1
ThePorcius

Basé sur votre commentaire sur la réponse de DFORD:

Je pensais avoir fractionné des enregistrements en morceaux de taille X si le montant total dépasse un certain seuil, puis amener les morceaux à différents fils

Il semble que vous exécutez 1 processus de votre application, sur place, de ne pas pouvoir bénéficier de l'approche du cloud FAAS (que je pense que ce serait la meilleure pour une évolutivité rentable).

Dans ce cas, j'ajouterais à la réponse de DFord une application/processus de "producteur" supplémentaire, qui ferait:

  • vérifiez les nouveaux enregistrements sur la DB initiale;
  • lisez les premiers enregistrements X et envoyez-les à traiter par 1 processus inactif de votre Python app (E.G.: Passer les ID des enregistrements sur la DB, pour être entièrement lu par votre application);
  • au cas où il existe des quantités massives de données, elle pourrait automatiquement apparaître de nouveaux processus (ou réduire l'échelle, en tuant des processus inactifs Python processus également);

En tant que perspicacité, vos processus pourraient même être exécutés sur différents ordinateurs, si nécessaire - à nouveau, si vous êtes sur le nuage, des services sans serveur tels que FAAS (comme AWS Lambda, par exemple) s'occuperaient automatiquement de la mise à l'échelle de haut en bas. , comme mentionné par Dford.

0
Emerson Cardoso