transformer des données binarys en utilisant ssis et sql server 2008

J'ai une tâche à importer / transformer et extraire les files binarys zippés qui contiennent à la fois des données de text ainsi que des données binarys incorporées. Au sein des données, datatables sont de nature relationnelle et doivent être traitées dans une structure de database définie. Actuellement, j'ai une application mono-threadée C # qui saisit essentiellement tous les files du directory (actuellement il y a 13K files de tailles variables) et extrait datatables sur une seule ligne de threads par des insertions de ligne à la database. Comme vous pouvez l'imaginer, c'est un process très lent et inacceptable. Plusieurs routines d'parsing différentes sont utilisées en fonction de l'logging d'en-tête dans le file. Il y a potentiellement jusqu'à un million de lignes par file lorsque toutes datatables sont extraites au niveau de détail de la ligne. Follow on task est d'parsingr ces lignes dans leurs tables appropriées en fonction de son contenu. c'est-à-dire que le contenu textuel doit être analysé plus avant dans des "compartiments" de données similaires dans la database. Cela résume la situation dans son set. Maintenant pour la list des tâches problème.

  1. Comment puis-je parcourir un package de données en utilisant SSIS? Dans l'application, le file est décompressé puis analysé à l'aide de arrays de types de données et d'octets de stream et est routé vers la routine d'parsing requirejse en fonction des données d'en-tête de chaque package. Il y a aussi des échanges de bits. Dois-je conclure le code de l'application dans une ou plusieurs tâches de script et le laisser effectuer le traitement personnalisé? Les données sont séparées par année et les tables du server SQL sont également partitionnées par année. Je dois aussi pouvoir «attraper» datatables de mauvais file et les traiter à la main le plus probable.

  2. Dois-je simplement charger le file compressé dans SQL comme un blob et parsingr le file avec T-SQL? Serait-ce multi threaded si fait de cette façon? Vous ne savez pas comment faire l'parsing dans T-SQL qui est impliqué ici. Selon vous, lequel serait le plus rapide?

  3. Potentiellement datatables qui sont actuellement traitées via des files pourraient nous parvenir via une socket. SSIS peut-il collecter ces données en time réel? Comment est-ce que j'irais mettre en place cela?

Le traitement de ces nouveaux files à partir des directorys deviendra une tâche quotidienne. Je peux gérer datatables une fois que je l'ai à SQL Server. Le fait d'y arriver en time opportun semble être la longue perche de la tente pour moi. J'apprécierais tous les commentaires ou suggestions du groupe.

Meule

Je pense que vous n'avez pas de chance ici – SSIS n'est tout simplement pas l'outil pour cela. La manipulation binary n'est pas ce qu'ils avaient en tête lorsqu'ils étaient conceptualisés. SSIS est fondamentalement au cœur des process ETL en chargeant des entrepôts de données avec toutes sortes de données.

SSIS fonctionnera très bien. Vous pouvez améliorer le process en ne saisissant pas tous les files 13k dans une seule tâche. Vous pouvez arrondir robin tirant dans les files. Divisez vos files en fonction du nombre de processeurs que vous avez dans votre boîte SSIS. Si l'application C # peut être réduite, vous pouvez le mettre dans une tâche de script. J'ai un framework qui va vous permettre de déplacer les files en parallèle. Je l'utilise pour déplacer des files .pdf dans le server sql. Si vous m'envoyez votre email, je vous le transmettrai.