Devo ir com SSIS ou aplicativo com vários segmentos C # para carregar arquivos simples no banco de dados?

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

Pergunta

Dentro de SQL Server Integration Services (SSIS) existe a possibilidade de configurar uma conexão com um arquivo simples que pode conter milhões de registros e têm que os dados empurrados para um SQL DB. Além disso, este processo pode ser chamado de um aplicativo # C, fazendo referência e usando o namespace Microsoft.SqlServer.Dts.Runtime.

Será que um arquivo simples com milhões de registros de melhor ser executado com SSIS, ou seria o coletivo "você" preferem ac # aplicativo com vários threads de trabalho (um para ler e adicionar a linha a variável, a escrever a partir dessa variável para o DB), e uma classe de "mãe" que gerencia esses segmentos? (A caixa de dev tem duas CPU)

Eu tenho visto esses dados ( sql equipe do blog ) afirmando que para um arquivo simples com um milhão de linhas, o SSIS é o mais rápido:

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

Quais são seus pensamentos?

Foi útil?

Solução

Eu só posso falar por mim e minha experiência. Eu iria com SSIS, uma vez que este é um daqueles casos em que você pode ser re-inventar a roda desnecessariamente. Esta é uma tarefa repetitiva que já foi resolvido por SSIS.

Eu tenho cerca de 57 empregos (combinação de DTS e SSIS) que eu gerenciar em uma base diária. Quatro dos rotineiramente lidar com exportação entre 5-100.000.000 registros. O banco de dados eu consigo tem cerca de 2 bilhões de linhas. I fez uso de uma tarefa de script para anexar a data, até ao milésimo de segundo, para que eu possa executar tarefas várias vezes ao dia. Feito isso há cerca de 22 meses. Tem sido ótimo!

tarefas SSIS pode também ser agendada. Então você pode configurá-lo e esquecê-lo. Eu faço monitor de tudo todos os dias, mas a manipulação de arquivos parte nunca foi quebrado.

A única vez que teve que recorrer a um programa personalizado C #, foi quando eu precisava para dividir os arquivos muito grandes em pedaços menores. SSIS é o cão lento para esse tipo de coisa. Um arquivo de texto um show levou cerca de uma hora para dividir, usando a tarefa de script. O programa personalizado C # tratado que em 12 minutos.

No final, é só usar o que você sente confortável usando.

Outras dicas

SSIS é incrivelmente rápido. Além disso, se é algo que precisa ocorrer repetidamente, você pode configurar um agente para disparar-lo na programação. Escrevê-lo você mesmo é uma coisa, tentando fazê-lo multithreaded fica muito mais complicado do que parece à primeira vista.

Eu recomendo SSIS 9 vezes fora de dez.

Não consigo ver como usando vários segmentos ajudaria desempenho neste caso. Quando a transferência de grandes volumes de dados, o gargalo principal é geralmente o disco I / O. Desova vários segmentos não resolveria este problema, e meu palpite é de que isso iria piorar as coisas, uma vez que iria introduzir contenção de bloqueio entre os múltiplos processos que atingem o banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top