No final de 2012, o Facebook deu início ao projeto que se tornou o Presto. O objetivo desse projeto era criar uma maneira de realizar análises ad-hoc em centenas de petabytes de dados. Depois de rejeitar alguns projetos externos, o Facebook decidiu criar o seu próprio mecanismo de consulta distribuído.
A interface do Presto é baseada no modelo SQL ANSI. A maioria dos sistemas de consultas distribuídas requerem que o usuário aprenda uma nova sintaxe. Às vezes, a sintaxe é semelhante ao SQL, mas nenhum é tão conhecido e documentado quanto o próprio SQL. A expectativa do Facebook é que essa decisão torne o aprendizado de novos usuários mais fácil e rápido. O fato de se basear no SQL ANSI também deve permitir que o Presto funcione com ferramentas existentes de terceiros.
Internamente, o Presto é baseado em pipelines. Após a consulta ser analisada e as tarefas atribuídas aos nós apropriados, o "cliente recebe os dados do estágio de saída que, por sua vez, recebe de etapas subjacentes." Segundo Martin Traverso:
O modelo de execução do Presto é fundamentalmente diferente do Hive/MapReduce. O Hive traduz as consultas em vários estágios de tarefas MapReduce que executam uma após a outra. Cada tarefa lê a entrada do disco e escreve imediatamente a saída de volta para o disco. Por sua vez, o mecanismo do Presto não usa o MapReduce. Ele emprega consultas customizadas e um mecanismo de execução com operadores destinados a suportar semânticas SQL. Além da otimização no agendamento, todo o processamento é feito em memória e trafegado através da rede entre os estágios. Isso evita operações desnecessárias de I/O e, consequentemente, a latência associada a essas operações. O modelo de execução em pipeline executa vários estágios de uma vez, e direciona os dados de um estágio anterior para o próximo conforme forem se tornando disponíveis. Esse processo reduz significativamente a latência final para vários tipos de consultas.
O Presto foi escrito em Java com um backend plugável. Para cada fonte de dados, como o Hive, HBase ou Scribe, um conector específico é necessário. O conector fornece metadados ao Presto, informação na qual cada nó contém os dados e uma maneira para buscar os dados como uma stream.
De acordo com Martin, o Presto está superando o Hive/MapReduce por um fator de 10 quando se trata de latência e eficiência de CPU para a maioria das consultas no Facebook. Mas eles ainda não terminaram e têm planos para melhorar ainda mais o desempenho. Um desses planos envolve a concepção de um novo formato de dados que reduz a quantidade de transformações necessárias conforme os dados se movem de um estágio para outro.
O Facebook também está trabalhando para remover algumas das limitações do desenho atual.
As principais restrições do estágio atual são relacionadas à limitação de tamanho ao fazer joins com tabelas e cardinalidade de chaves/grupos únicos. O sistema também não tem a capacidade de gravar dados de saída de volta para as tabelas (atualmente, os resultados das consultas são transferidos para o cliente).
O Presto está disponível no GitHub sob a licença Apache 2.