Facebook a démarré le projet qui est devenu Presto à l'automne 2012. L'objectif de ce projet était de proposer une solution aux entrepôts de données pour effectuer des analyses adaptées à des centaines de pétaoctets de données. Après avoir écarté quelques projets externes, ils ont décidé de créer leur propre moteur de requêtes distribué.
L'interface de Presto est basée sur la norme SQL ANSI. La plupart des moteurs de requêtes distribués demande à l'utilisateur d'apprendre une nouvelle syntaxe. Parfois la syntaxe est proche du SQL, mais aucune n'est aussi bien connue et documentée que le véritable SQL. Le recours à la norme SQL ANSI devrait également permettre à Presto de fonctionner avec les outils tiers.
En interne Presto est basé sur les pipelines. Après que la requête a été analysée et les tâches assignées aux nœuds appropriés, le "client récupère les datas de l'étape de sortie, ce qui extrait les données des étapes sous-jacentes. Martin Traverso ajoute,
Le modèle d'exécution de Presto est fondamentalement différent d'Hive/MapReduce. Hive traduit les requêtes en plusieurs étapes que MapReduce exécute en plusieurs tâches les unes après les autres. Chaque tâche lit des entrées depuis le disque et écrit les sorties intermédiaires sur le disque. En revanche, le moteur de Presto n'utilise pas MapReduce. Il emploie une requête personnalisée et un moteur d'exécution avec des opérateurs conçus pour supporter la sémantique SQL. En plus d'améliorer la planification, tous les traitements sont en mémoire et en pipeline à travers le réseau entre les étapes. Cela évite les I/O inutiles et l'overhead de latence associée. Ce modèle d'exécution en pipeline traite plusieurs étapes à la fois, et envoie les données d'une étape à la suivante lorsque celle-ci devient disponible. Cela réduit significativement la latence de bout-en-bout pour de nombreux types de requêtes.
Presto a été écrit en Java avec un système de plugins pour le backend. Pour chaque source de données comme Hive, HBase, ou Scribe un connecteur de données est nécessaire. Le connecteur fournit à Presto les métadonnées, les informations sur les nœuds qui contiennent la donnée, et un moyen pour réellement récupérer la donnée comme un flux.
Selon Martin, Presto surpasse Hive/MapReduce d'un facteur 10 pour ce qui est de la latence et de l'efficacité du CPU, pour la plupart des requêtes chez Facebook. Mais ils ne sont pas encore prêts et ils ont des plans pour encore améliorer les performances. Un tel plan suppose la conception d'un nouveau format de données qui réduit la quantité de transformations nécessaires lorsque la donnée passe d'une étape à la suivante.
Facebook travaille également pour supprimer certaines limitations dans la conception actuelle.
Les principales restrictions à ce stade sont une limitation sur la taille des jointures de tables et la cardinalité des couples clé/groupe uniques. Il manque également au système la possibilité d'écrire le retour des données de sortie vers les tables (actuellement les résultats de requête sont envoyés au client).
Presto est disponible sur github sous la licence Apache 2.