Painel 05 03 - Gustavo - Markus - Busca de vínculos na Administração Pública

19
Busca de vínculos na Administração Pública CONTROLADORIA GERAL DA UNIÃO TRIBUNAL DE CONTAS DA UNIÃO

Transcript of Painel 05 03 - Gustavo - Markus - Busca de vínculos na Administração Pública

Busca de vínculos na Administração PúblicaCONTROLADORIA GERAL DA UNIÃOTRIBUNAL DE CONTAS DA UNIÃO

Busca de vínculos Bases da Administração possuem vínculos expressos (PF-PF; PJ-PF; PJ-PJ):

◦ CPF: nome da mãe◦ CNPJ e CNE: sócios e responsáveis◦ RAIS: empregados◦ ...

• É possível combinar todas essas bases em um único grafo

• Desafio: mais de um bilhão de vínculos

TCU – solução atual: i2 Poucas licenças (versão descontinuada após aquisição pela IBM)

Consultas lentas

SQL Solução para busca de vínculos em até 6 níveis

Acesso direto à base de dados do i2

Viabiliza consulta a qualquer tipo de entidade modelada no i2 (CPF, CNPJ, telefone, automóvel, endereço)

Codificado em PL/SQL (Oracle) e T-SQL (SQL-Server)

Redução do problema de explosão combinatória criando grafo de 3 níveis a partir de cada entidade consultada (origem e destino)

SQLPróximos passos

•Teste de carga/eficiência em ambiente SQL Server 2014 (queries em memória) e em banco de dados colunar

•Encapsulamento da solução em interface para o usuário

•Ampliação das fontes de consulta (dissociar do i2)

Apex + R + iGraph + yEd

CNE, CNPJ, CPF, RAIS

Fila

Requisição arquivo GML

Processamento

Visualização e formatação

Apex + R + iGraph + yEdPróximos passos

•Disponibilização em caráter de teste

•Processamento paralelizado

•K-caminhos-mais-curtos

•Adicionar mais bases

CGU – solução atual: i2 Poucas licenças (versão descontinuada após aquisição pela IBM)

Bases não centralizadas em um repositório único

Não engloba as trilhas de auditoria

Neo4J Utilização de um banco de grafos para realizar consultas de vínculos

Consultas em SQL podem incluir vários níveis de junções no modelo relacional

Podem resolver trilhas de auditoria com mais eficiência

Neo4J

Neo4JSELECT C01.nome_empresa, P01.nome_pessoa,C02.nome_empresa, P02.nome_pessoa, C03.nome_empresa, P03.nome_pessoa, C04.nome_empresa

FROM PessoasSocios AS PP01

INNER JOIN Empresas AS C01 --Inicio das 12 juncoes.

ON C01.pk_empresa = PP01.fk_empresa

INNER JOIN Pessoas AS P01

ON P01.pk_pessoas = PP01.fk_pessoa_socio

LEFT JOIN PessoasSocios AS PP02

ON PP02.fk_pessoa_socio = P01.pk_pessoa

LEFT JOIN Empresas AS C02

ON C02.pk_empresa = PP02.fk_empresa

LEFT JOIN PessoasSocios AS PP03

ON PP03.fk_empresa = C02.pk_empresa

LEFT JOIN Pessoas AS P02 ...

Neo4JMATCH (empresaB { nome:'EMPRESA B' })

-[r:E_SOCIO*1..6]-(empresaC { nome:'EMPRESA C' }) RETURN empresaB, r, empresaC;

Neo4J

Neo4JMATCH p = allShortestPaths(

(o:Empresas{nome:"EMPRESA B"})-[r:E_SOCIO*..6]-(d:Empresas{nome:"EMPRESA C"})

) RETURN NODES(p)

Neo4J

Neo4J

MySQL Neo4jMétodo de carga Ferramenta ETL Aplicação desenvolvida em JAVA

Tempo de execução 72.608,949s (Aprox. 20h)14h sem sucesso para consulta por padrões e

369ms com allShortestPathsQuantidade de vínculos obtidos 1 1

• Fonte: Base CGU• Número Empresas: 7.754.989• Número Sócios: 14.190.151• Número de Sociedades: 20.903.480• Máquina: 24 cores 64GB de RAM• Consulta: Alternada de seis níveis• Origem: Uma empresa com aproximadamente 400 sócios• Destino: Uma segunda empresa com aproximadamente 400 sócios• Objetivo: Avaliar a busca por relacionamentos, não necessariamente conluio

Neo4JPróximos passos Disponibilizar um conjunto de consultas para os Auditores Tentar explorar os benefícios do Cypher em conjunto outras bibliotecas/linguagens Processar grafos maiores para criar trilhas baseadas em grafos

Trabalho Conjunto Evita redundância de esforços Trabalho colaborativo mas independente

Próximos passos Comparar o desempenho das diferentes abordagens Unir esforços em torno da solução mais vantajosa

Obrigado! Contatos

Markus Buhatem Koch [email protected]

Gustavo Cordeiro Galvão Van Erven [email protected]