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.

Avalie esse artigo

Relevância
Estilo/Redação

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 mensagens dessa discussão
Comentários da comunidade

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

Receber mensagens dessa discussão

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

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.