BT

Biblioteca de grafos Cassovary: mais um projeto do Twitter com código aberto

por Marcelo Costa em 19 Mar 2012 |

Foi liberada no início deste mês pelo grupo de engenharia do Twitter o código fonte de sua sofisticada biblioteca de processamento de grafos Cassovary. Segundo anúncio no blog de engenharia do Twitter, a Cassovary foi projetada para lidar eficientemente com grafos contendo bilhões de arestas e nós, e foi desenvolvida pelo grupo de engenharia do Twitter. A biblioteca oferece alguns tipos de nós e estruturas de dados básicas, além de algoritmos de percurso dos grafos. Um uso típico para esta biblioteca é fazer análise e mineração de dados em grande escala estruturados como grafos.

Segundo Pankaj Gupta líder técnico do Twitter é usado flockDB como banco de dados para armazenamento de grafos em tempo real. Esses dados são exportados diariamente para processamento pela Cassovary. Gupta descreve o uso da Cassovary no Twitter:

No Twitter, a Cassovary é parte da camada inferior de um conjunto de tecnologias utilizadas para suportar muitas das nossas funcionalidades básicas para tratamento de grafos, incluindo as funcionalidades Who to Follow e Similar to. Também utilizamos a biblioteca em buscas e nos algoritmos que determinam que tipo de produtos promocionais os usuários vêem. Com o tempo, esperamos trazer para a Cassovary mais lógica não proprietária [utilizável em contextos diferentes do Twitter].

A Cassovary apesar de ter sido desenvolvida em Scala, pode ser utilizada com qualquer outra linguagem que suporte a JVM. Uma característica importante é a economia de espaço, aspecto em que se diferencia em relação a outras bibliotecas para tratamento de grafos que fazem uso da JVM.

Veja um exemplo mínimo de uso da API, em Scala, que gera um grafo direcionado com três nós e imprime estatísticas sobre o grafo gerado:

import com.twitter.cassovary.graph.TestGraphs

object HelloGraph {
 def main(args: Array[String]) {
   val numNodes = if (args.length > 0) args(0).toInt else 3
   printf("Generating a complete directed graph with %d nodes...\n", numNodes)
   val graph = TestGraphs.generateCompleteGraph(numNodes)
   printf("\nHello Graph!\n\tA complete directed graph with %s nodes has %s directed edges.\n",
     graph.nodeCount, graph.edgeCount)
 }

}

Há outros exemplos do Cassovary na página do projeto no Github.

O Twitter encoraja que os desenvolvedores usem a biblioteca, criem projetos fork e contribuam para o projeto, participem por meio das listas de discussão e até criem issues no GitHub. A conta @cassovary é a recomendação dada para se manter informado sobre as atualizações na biblioteca.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT