Comment utiliser un query engine pour transformer votre SI ?
Traditionnellement, les applications basées sur un écosystème Big Data ont été construites en regroupant les données dans des Data Lakes ou Data Warehouses. L'idée était de concentrer les données en une seule plateforme. Cette approche, bien que largement employée et évidente pour gérer une infrastructure de données, est en train d'évoluer. Dans un contexte mondial où le volume de données augmente significativement chaque année (en termes de quantité et de sources de données), il devient coûteux, et souvent impossible, de centraliser les données. Partager les données sur des infrastructures fortement régulées pousse alors les entreprises à innover. Nous voyons bien que ce que nous cherchons à faire se positionne comme un composant d'architecture de données permettant de partager des données.
Il existe de nombreux modèles d'architecture permettant le partage de données. Parmi les modèles les plus utilisés, nous pouvons citer :
- Point à point
- Hub ou centralisé
- Temps réel
Dans notre cas d'étude, nous souhaitons partager les données sous la forme d'un hub - centralisé - sans pour autant dupliquer les datastores des sources de données. Pour mettre en place ce type de modèle, les moteurs de requêtes distribués semblent être la réponse au problème. En effet, ils permettent d'accéder, de traiter et d'interroger les données là où elles sont stockées, sans nécessité de les déplacer ou de les dupliquer. Ils offrent une vue unifiée et cohérente des données, malgré leur répartition sur diverses sources. De plus, ils permettent des requêtes en temps réel, ce qui améliore grandement l'efficacité et la flexibilité des opérations de données.
Data Platform
Les plateformes de données sont un élément clé pour la transformation numérique des entreprises. Elles permettent de collecter, stocker, traiter et diffuser des données provenant de différentes sources. Les plateformes de données offrent plusieurs avantages pour les entreprises, tels que la prise de décision, l'amélioration de l'efficacité opérationnelle, le développement de nouveaux produits/services et la réduction des coûts. Une plateforme de données permet l'importation, le traitement, l'analyse et la présentation des données. Le pattern d'architecture de la plateforme de données a émergé avec l'avènement des technologies Hadoop en 2006.
Son objectif est de gérer le cycle de vie des données depuis leur création jusqu'à leur valorisation et exposition. Historiquement, on parlait de centralisation des données dans des plateformes de données centrées sur les données, car le principe de base était de stocker les données dans un même système pour permettre le partage de ces données (pattern d'architecture Hub/Centralisée).
Aujourd'hui, le principe de centrisme des données est toujours d'actualité. Cependant, il ne s'agit plus de se concentrer uniquement sur le stockage dans un entrepôt de données (Data Warehouse) ou un système ERP, mais plutôt de s'appuyer sur des systèmes hétérogènes pour sauvegarder les données. Dans ces approches plus modernes, on cherche à positionner un moteur de requêtes entre les systèmes de stockage que l'on souhaite partager, afin de séparer la couche de partage de la couche de stockage. Ce pattern ressemble à un pattern d'API Gateway dans le monde applicatif, car il expose une interface/vue sur les données que l'on peut partager, sans avoir à connaître les détails des systèmes sous-jacents.
À quoi sert un query engine ?
Effectuer des requêtes SQL sur tout type de datastore (base de données, streaming, nosql…)
Les query engines sont des composants de plateformes data principalement utilisés pour présenter un ensemble de sources de données hétérogènes comme des tables SQL. Ils permettent d’exécuter des requêtes sur ces datastores hétérogènes et combiner les résultats de requêtes sur plusieurs sources de données, qu'il s'agisse de Datastore (Blob, S3, HDFS), de bases de données (MongoDB, Cassandra, MariaDB, DB2) ou de données stream (Kafka).
Séparation des ressources d’infrastructure de Storage et Compute
Les fonctionnalités d’un moteur de query distribués peuvent varier, mais la plupart des moteurs sont conçus pour être hautement scalable, capables de traiter des requêtes en parallèle sur de nombreux nœuds et de fonctionner avec une large variété de données.
En utilisant un moteur de query, les entreprises peuvent accéder facilement à leurs données présentes sur différents systèmes de gestion de données, les analyser et les distribuer simplement. Il permet à n’importe quel utilisateur de récupérer facilement de la donnée avec ses propres requêtes, libérant une charge de travail non-négligeable à l’équipe data.
Fédération de query
L'objectif principal des query engines est la virtualisation des données, permise via la création d'un point d'accès unique aux données pour les utilisateurs. La virtualisation des données fournit un niveau d'abstraction sur les données. Elle permet de rassembler les résultats d'une requête dans des vues virtuelles afin qu'elles soient consommées par des composants applicatifs, un peu comme si nous présentions des vues de base de données. La principale force d’un query engine est sa capacité à interroger des systèmes hétérogènes, ce qu'un moteur de query d'une base de données unique ne permet pas.
Cas usages des query engines
On pourrait s’interroger sur l’utilité de l’utilisation d’un moteur de query alors qu’il est nativement disponible dans les moteurs de bases de données. Ici, le but est d’essayer d’exploiter des données venant de sources différentes, et parfois de formes différentes. Pour ce faire, il nous faut fédérer tous nos datastores hétérogènes, ce qui est plus facilement réalisable avec un moteur de query.
Transformation progressive de data plateformes
Un query engine permet de migrer des sources de stockages sans casser la logique applicative.
Le SI est composé de différents storage (deux sur le cloud et un sur site). Sans query engine les différentes applications doivent requêter manuellement les données sur chaque espace de stockage. Modifier ce stockage entraine des problèmes au niveau applicatif. La query engine va s’occuper de procéder à la requête sans que l’endroit où sont stockées les données n'impacte la résolution de celle-ci.
Self-Service BI
L’approche de self-service BI permet à des utilisateurs de sélectionner eux même les données qu’ils ont besoin pour composer des reportings à la volée. Elle repose sur la mise à disposition de données, la recherche de données pertinentes et l’utilisation de ces données dans des reportings. Cette approche permet de réduire le temps de mise à disposition de données calculées en réduisant le nombre d’étapes pour créer un reporting.
Data Mesh
Le data mesh veut que les domaines métiers portent chacun un produit data, ayant un cycle de vie autonome. Les domaines métiers sont liés par un couplage faible, et consomment des données d’autres domaine métier ou mettent à disposition leurs données. Pour ce faire le datamesh repose sur une exposition de donnée, un catalogue centralisé qui peut se construire à l’aide de query engine.
Quel query engine choisir ?
Hive
Hive est un système de traitement de données distribué pour Hadoop. Il permet aux utilisateurs de traiter des données volumineuses en utilisant un langage de requête SQL-like appelé HiveQL. Hive stocke les données dans un système de fichiers distribué, tel que HDFS ou S3. Les avantages de Hive incluent la compatibilité SQL, la prise en charge de données semi-structurées et la capacité à gérer de grands ensembles de données. Cependant, Hive a des limites en termes de performances de requête et de temps de latence. Cliquez ici pour en savoir plus.
Trino
Trino, anciennement connu sous le nom de Presto, est un moteur de requête SQL distribué open-source conçu pour traiter de grands ensembles de données. Il est utilisé pour des cas d’utilisation tels que le traitement de données en temps réel, le traitement de données pour l’analyse, et la découverte de données. Trino est compatible avec de nombreux systèmes de stockage de données, tels que Hadoop HDFS, Amazon S3, Cassandra, MongoDB, etc. Les avantages de Trino incluent des performances de requête rapides, une évolutivité horizontale, une compatibilité SQL et la possibilité de traiter des données semi-structurées. Cliquez ici pour en savoir plus.
Drill
Drill est un moteur de requête distribué open-source conçu pour exécuter des requêtes sur des données semi-structurées et non structurées. Il prend en charge les formats de fichiers tels que JSON, CSV, AVRO, Parquet, etc. Drill est compatible avec de nombreux systèmes de stockage de données, tels que Hadoop HDFS, Amazon S3, Azure Blob Storage, etc. Les avantages de Drill incluent la prise en charge de données semi-structurées, la compatibilité SQL, et la capacité à interroger des sources de données multiples sans avoir besoin d’exporter les données vers un système de stockage central. Cliquez ici pour en savoir plus.
Impala
Impala est un moteur de requête SQL open-source distribué pour Hadoop. Il permet aux utilisateurs d’exécuter des requêtes SQL en temps réel sur des données stockées dans Hadoop. Impala est compatible avec de nombreux formats de fichiers, tels que HDFS, Kudu, Parquet, etc. Les avantages d’Impala incluent des performances de requête rapides, une évolutivité horizontale, et la prise en charge de SQL. Cependant, Impala est limité par la compatibilité des formats de fichiers et des sources de données. Cliquez ici pour en savoir plus.
Dremio
Dremio est une plateforme de données distribuée open-source conçue pour accélérer les temps d’accès aux données. Il prend en charge les requêtes SQL et permet aux utilisateurs de requêter des données dans des sources multiples, y compris des sources cloud et locales. Dremio utilise une architecture distribuée pour accélérer les temps d’accès aux données, et dispose d’une fonction de cache intégrée pour accélérer les temps de réponse des requêtes. Les avantages de Dremio incluent la prise en charge de plusieurs sources de données, une évolutivité horizontale, une compatibilité SQL, et des performances de requête rapides. Cliquez ici pour en savoir plus.
Comparaison de ces solutions
Nous avons décidé de comparer ces queries engines sur la base de plusieurs critères :
- Temps réel : note plus élevée pour une solution permettant le temps réel,
- Coût infrastructure : note plus élevée pour un coût d’infrastructure plus faible,
- Performance : note plus élevée pour une performance plus importante,
- Connecteurs : note plus élevée si des connecteurs vers des sources de données sont disponibles et maintenus par l’éditeur ou la communauté,
- Communauté : note plus élevée si la communauté qui développe ou utilise le produit est importante.
Conclusion
En résumé, Hive, Trino, Drill, Impala et Dremio sont tous des composants d'infrastructure informatique distribuée conçus pour traiter de grands ensembles de données. Tous les composants ont la capacité de stocker et de traiter de grandes quantités de données, et utilisent des requêtes SQL pour interroger les données.
Cependant, chaque composant a ses propres avantages et limites. Hive est bien adapté pour les cas d'utilisation où la compatibilité SQL est nécessaire, mais peut souffrir de performances de requête plus lentes. Trino et Drill sont tous deux adaptés pour le traitement de données semi-structurées et non structurées. Trino tire le maximum de ses capacités à traiter des données en temps réel. Impala est bien adapté pour le traitement de données stockées dans Hadoop, mais peut être limité en termes de compatibilité de format de fichier et de sources de données. Enfin, Dremio est conçu pour accélérer les temps d'accès aux données, avec une fonction de cache intégrée pour accélérer les temps de réponse des requêtes. Trino est un très bon composant d’infrastructure pour partager des données de sources hétérogènes et des cas usages en temps réel. Son architecture consomme très peu de ressources d’infrastructure.