SlideShare uma empresa Scribd logo
1 de 19
Busca de vínculos na
Administração Pública
CONTROLADORIA GERAL DA UNIÃO
TRIBUNAL 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)
SQL
Pró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 + yEd
Pró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
Neo4J
SELECT 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 ...
Neo4J
MATCH
(empresaB { nome:'EMPRESA B' })
-[r:E_SOCIO*1..6]-
(empresaC { nome:'EMPRESA C' })
RETURN empresaB, r, empresaC;
Neo4J
Neo4J
MATCH
p = allShortestPaths(
(o:Empresas{nome:"EMPRESA B"})
-[r:E_SOCIO*..6]-
(d:Empresas{nome:"EMPRESA C"})
) RETURN NODES(p)
Neo4J
Neo4J
MySQL Neo4j
Mé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 allShortestPaths
Quantidade 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
Neo4J
Pró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 kochmb@tcu.gov.br
Gustavo Cordeiro Galvão Van Erven gustavo.erven@cgu.gov.br

Mais conteúdo relacionado

Semelhante a Busca de vínculos na Administração Pública

14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
guest519a5b6
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
guest519a5b6
 
Representanção gráfica processo de trabalho (1)
Representanção gráfica processo de trabalho (1)Representanção gráfica processo de trabalho (1)
Representanção gráfica processo de trabalho (1)
Alexandre Pereira
 

Semelhante a Busca de vínculos na Administração Pública (7)

Trabalho de Graduação Faculdade de Tecnologia de Ourinhos (FATEC Ourinhos)
Trabalho de Graduação Faculdade de Tecnologia de Ourinhos (FATEC Ourinhos)Trabalho de Graduação Faculdade de Tecnologia de Ourinhos (FATEC Ourinhos)
Trabalho de Graduação Faculdade de Tecnologia de Ourinhos (FATEC Ourinhos)
 
Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2Yii framework 2 exemplo de uma aplicação-parte2
Yii framework 2 exemplo de uma aplicação-parte2
 
Introducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-ptIntroducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-pt
 
Planejamento
PlanejamentoPlanejamento
Planejamento
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
Representanção gráfica processo de trabalho (1)
Representanção gráfica processo de trabalho (1)Representanção gráfica processo de trabalho (1)
Representanção gráfica processo de trabalho (1)
 

Busca de vínculos na Administração Pública

  • 1. Busca de vínculos na Administração Pública CONTROLADORIA GERAL DA UNIÃO TRIBUNAL DE CONTAS DA UNIÃO
  • 2. 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
  • 3. TCU – solução atual: i2 Poucas licenças (versão descontinuada após aquisição pela IBM) Consultas lentas
  • 4. 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)
  • 5. SQL Pró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)
  • 6. Apex + R + iGraph + yEd CNE, CNPJ, CPF, RAIS Fila Requisição arquivo GML Processamento Visualização e formatação
  • 7. Apex + R + iGraph + yEd Próximos passos •Disponibilização em caráter de teste •Processamento paralelizado •K-caminhos-mais-curtos •Adicionar mais bases
  • 8. 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
  • 9. 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
  • 10. Neo4J
  • 11. Neo4J SELECT 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 ...
  • 12. Neo4J MATCH (empresaB { nome:'EMPRESA B' }) -[r:E_SOCIO*1..6]- (empresaC { nome:'EMPRESA C' }) RETURN empresaB, r, empresaC;
  • 13. Neo4J
  • 14. Neo4J MATCH p = allShortestPaths( (o:Empresas{nome:"EMPRESA B"}) -[r:E_SOCIO*..6]- (d:Empresas{nome:"EMPRESA C"}) ) RETURN NODES(p)
  • 15. Neo4J
  • 16. Neo4J MySQL Neo4j Mé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 allShortestPaths Quantidade 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
  • 17. Neo4J Pró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
  • 18. 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
  • 19. Obrigado! Contatos Markus Buhatem Koch kochmb@tcu.gov.br Gustavo Cordeiro Galvão Van Erven gustavo.erven@cgu.gov.br