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.