Projet open source
facebookincubator/velox avatar
facebookincubator/velox

Velox : un moteur d’exécution C++ pour les données

Une bibliothèque de moteur d'exécution C++ composable et entièrement extensible pour les systèmes de gestion de données.

4 210 étoiles1 607 forksC++Apache-2.0

En bref

De quoi s’agit-il ?
Velox fournit des opérateurs vectorisés, des types et des fonctions destinés à être intégrés dans des moteurs de données.
À qui s’adresse-t-il ?
Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour velox. Il convient moins à celles qui attendent un support ou une compatibilité absents du README.
Puis-je l’utiliser commercialement ?
Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement C++, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Un moteur d'exécution C++ composable

Velox est un moteur d'exécution composable distribué sous forme de bibliothèque C++ open source. Il fournit des composants de traitement de données réutilisables, extensibles et performants qui peuvent être utilisés pour construire des systèmes de gestion de données axés sur des charges de travail analytiques telles que le traitement par lots, interactif, de flux et IA/ML. Velox a été créé par Meta et est actuellement développé en partenariat avec IBM/Ahana, Intel, Voltron Data, Microsoft, ByteDance et de nombreuses autres entreprises. Dans les scénarios d'utilisation courants, Velox prend un plan de requête entièrement optimisé en entrée et effectue le calcul décrit. Comme Velox ne fournit pas d'analyseur SQL, de couche dataframe ni d'optimiseur de requête, il n'est généralement pas destiné à être utilisé directement par les utilisateurs finaux ; il est plutôt utilisé principalement par les développeurs qui intègrent et optimisent des moteurs de calcul.

Composants principaux

Velox fournit un système de typage générique prenant en charge les types scalaires, complexes et imbriqués tels que les structures, les cartes et les tableaux. Son module Vector est un format de mémoire colonnaire compatible Arrow avec des encodages tels que Flat, Dictionary, Constant et Sequence/RLE, ainsi qu'un modèle de matérialisation paresseuse et la prise en charge des écritures hors ordre. Le moteur d'évaluation d'expressions est entièrement vectorisé et fonctionne sur des données encodées Vector/Arrow. Il comprend des ensembles de fonctions scalaires, d'agrégation et de fenêtre vectorisées suivant la sémantique Presto et Spark. Les opérateurs relationnels couvrent les scans, les écritures, les projections, le filtrage, le regroupement, le tri, le shuffle/exchange, les jointures par hachage, fusion et boucle imbriquée, ainsi que unnest. La couche I/O définit une interface de connecteur pour des sources et puits de données extensibles, prenant en charge les formats ORC/DWRF, Parquet et Nimble, ainsi que des adaptateurs de stockage pour S3, HDFS, GCS, ABFS et les fichiers locaux. Les sérialiseurs réseau implémentent des protocoles filaires tels que PrestoPage et UnsafeRow de Spark. Les primitives de gestion des ressources gèrent les arènes mémoire, la gestion des tampons, les tâches, les pilotes, les pools de threads, le spilling et la mise en cache.

Extensibilité

Velox est extensible et permet aux développeurs de définir des spécialisations spécifiques au moteur. Des types personnalisés, des fonctions simples et vectorisées, des fonctions d'agrégation, des fonctions de fenêtre, des opérateurs, des formats de fichiers, des adaptateurs de stockage et des sérialiseurs réseau peuvent tous être ajoutés. Des exemples d'extensibilité et d'intégration avec différentes API de composants sont disponibles dans le répertoire velox/examples. Le README ne détaille pas les API exactes de chaque point d'extension ; pour vérifier ces interfaces, il faut consulter le code source et les guides de développement liés depuis la documentation. Cette extensibilité est ce qui fait de Velox une bibliothèque plutôt qu'un système fixe ; il est conçu pour être adapté à différents moteurs de calcul.

Pour commencer

Le README décrit le clonage du dépôt puis l'installation des dépendances. Il fournit des scripts de configuration pour macOS, Ubuntu 20.04 ou ultérieur, et CentOS 9 Stream. Les scripts utilisent la variable d'environnement DEPENDENCY_DIR pour définir l'emplacement de téléchargement et de construction, par défaut deps-download dans le répertoire de travail actuel, et INSTALL_PREFIX pour l'emplacement d'installation. Sur macOS, l'emplacement d'installation par défaut est deps-install, tandis que sur Linux, il s'agit de l'emplacement système. Les versions minimales des compilateurs pris en charge sont GCC 11 ou Clang 15 sur Linux et Clang 15 sur macOS. Le README répertorie également les versions recommandées et les combinaisons alternatives. Pour les processeurs x86, le minimum est SSE4.2, avec AVX par défaut ; pour Arm, Apple Silicon et Linux AArch64 sont pris en charge. Les commandes exactes sont indiquées dans le README, nous ne les reproduisons pas ici. Le README note également que les scripts de configuration peuvent installer des adaptateurs pour des systèmes de fichiers tels que S3, GCS et Azure Blob File System.

Construction et tests

L'exécution de make dans le répertoire racine compile les sources. Pour le développement, make debug construit une version de débogage non optimisée et make release une version optimisée. make unittest construit et exécute les tests. Quatre suites de tests sur Linux CI utilisent des binaires groupés pour réduire les temps de liaison, tandis que d'autres suites utilisent des binaires individuels. Sur macOS, le regroupement est désactivé par défaut et peut être désactivé sur Linux avec le drapeau CMake -DVELOX_ENABLE_GROUPED_TESTS=OFF. Pour ceux qui ne souhaitent pas installer les dépendances système, un fichier docker-compose est fourni pour construire et exécuter les tests dans un conteneur, avec des commandes telles que docker-compose build ubuntu-cpp et docker-compose run --rm ubuntu-cpp. La variable d'environnement NUM_THREADS peut remplacer le nombre de threads utilisés lors de la construction. Les métriques de construction de Velox sont publiées sur un site lié depuis le README.

Communauté et gouvernance

Velox est un projet open source soutenu par une communauté de contributeurs individuels et d'organisations. Ses mécanismes de gouvernance technique sont décrits dans un document sur le site du projet. Les mainteneurs sont répertoriés sur le même site. Le principal canal de communication est l'espace de travail Slack Velox-OSS, ainsi que les issues et discussions GitHub. Pour accéder à l'espace de travail Slack, il faut ajouter un commentaire à une discussion GitHub spécifique. Le guide de contribution est disponible dans le dépôt. Des articles de blog récents sont liés dans le README, couvrant des sujets tels que la comparaison des allocateurs et les performances des jointures. Le README renvoie également à des guides de développement qui détaillent de nombreux aspects de la bibliothèque.

Licence · facebookincubator velox

Velox est distribué sous la licence Apache 2.0, et une copie de la licence est incluse dans le dépôt. La licence accorde une licence de droit d'auteur perpétuelle, mondiale, non exclusive, gratuite, sans redevance et irrévocable pour reproduire, préparer des œuvres dérivées, afficher publiquement, exécuter, sous-licencier et distribuer l'œuvre. Elle comprend également une licence de brevet dans certaines conditions. Le texte de la licence ne mentionne aucune garantie, support ou garantie de sécurité ; ceux-ci ne sont pas couverts par la licence elle-même. Le README indique que Velox est distribué sous Apache 2.0, et le texte complet est disponible dans le fichier LICENSE.

Tester velox dans son contexte

La configuration CMake, les tests ciblés et un opérateur de l’exemple doivent être compilés pour vérifier dépendances, architecture et résultats. Cette séquence relie le comportement annoncé pour velox aux fichiers et sorties observables. Elle ne permet pas d’inférer une compatibilité ou une garantie que le README ne décrit pas. Notez aussi les dépendances, la version utilisée et les erreurs exactes rencontrées, car elles déterminent la charge d’intégration.

Conclusion éditoriale

Le projet convient aux équipes dont le besoin correspond précisément aux fonctions décrites pour velox. Il convient moins à celles qui attendent un support ou une compatibilité absents du README. Avant décision, La configuration CMake, les tests ciblés et un opérateur de l’exemple doivent être compilés pour vérifier dépendances, architecture et résultats.

Sources officielles

  1. Official documentation
  2. Official README
  3. Project repository
Notes de la communauté

Notes de la communauté