2017-02-25 4 views
0

Le rapport Excel doit prendre en charge 1 million de lignes et 800 colonnes. L'application doit générer Excel dans deux modes 1.online, où, lors de la sélection d'une entité sur la grille, un rapport Excel doit être généré. 2.offline, l'utilisateur peut sélectionner plusieurs entités et en utilisant un bouton sur l'interface utilisateur peut le déclencher pour générer Excel et peut recevoir Excel par courrier.EXPORTER 1 million de lignes avec 500 colonnes Données dans excel de la base de données SQL à partir du fichier d'application à l'aide du framework .NET 3.5

Actuellement, l'application prend en charge la fonctionnalité ci-dessus, mais l'exportation est très lente .Application et la base de données est sur le même serveur. Gardant cela à l'esprit, nous devons concevoir un cadre où il sera rapide même en cas de données sur l'application est augmenté de 10x avec des problèmes de performance minimes.

Est-ce que SSIS sera utile ou si d'autres suggèrent?

+0

Je pense aux "tableaux croisés dynamiques connectés à la base de données". –

+1

C'est au-delà de ce que je mettrais dans Excel. 1) Comment pouvez-vous utiliser une telle quantité de données et 2) comment pouvez-vous espérer qu'Excel consomme autant de données? ;-) –

+0

Actuellement, nous utilisons Open XML. Plusieurs utilisateurs téléchargent et exportent et nous avons constaté que puisqu'il y a un grand nombre d'exportations en cours, particulièrement quand l'exportation est des données autour des enregistrements 20K + l'application se bloque. Dans l'avenir, nous nous attendons à ce que l'application traite des données 10x et que la performance soit la principale préoccupation. –

Répondre

0

Vous ne dites pas ce qu'est l'interface utilisateur, mais puisque vous mentionnez "en ligne" je suppose que c'est un navigateur. Par conséquent, le moyen le plus rapide consisterait à interroger SQL Server, à extraire l'ensemble de données et à utiliser le document XML OpenDocument documenté pour générer un fichier XLSX dans le cadre du flux de réponses renvoyé par l'API MVC Controller/Web. Cela génère le moindre traitement des données et conserve la gestion du texte sur le serveur Web.

+0

Actuellement, nous utilisons Open XML. Plusieurs utilisateurs téléchargent et exportent et, par conséquent, il y a un grand nombre d'exportations en cours, en particulier lorsque l'exportation concerne des données d'environ 20K + enregistrements que l'application bloque. Dans l'avenir, nous nous attendons à ce que l'application traite des données 10x et que la performance soit la principale préoccupation. Actuellement, nous générons Excel sur le côté serveur et l'envoyer par courrier électronique pour hors ligne et en cas de téléchargement en ligne pour l'utilisateur. nous cherchons à améliorer le cadre ou toute autre alternative. –

+0

Vous avez vraiment besoin de nous en dire plus sur le temps passé dans votre pile d'applications. Avez-vous utilisé un profileur pour savoir où le temps est passé? Pouvez-vous isoler les processus les plus coûteux? Si votre application est déjà codée de manière optimale et si vous utilisez IIS et que la charge est liée à la génération du code XML, redimensionnez simplement quelques instances IIS supplémentaires sur d'autres machines. C'est la manière traditionnelle de faire face à une charge élevée. éliminé l'inefficacité du code. – PhillipH

0

1 million d'enregistrements prendront certainement du temps et dans un environnement concurrent ce n'est pas bon. Il est préférable d'avoir une architecture orientée services, ou simplement d'exécuter votre code de manière asynchrone pour éviter que cela ne se bloque. Le traitement de l'exportation (par exemple dans un service) doit être exécuté dans les threads d'arrière-plan pour gérer la charge.

Lorsque vous avez terminé générer et envoyer du courrier comme vous l'avez mentionné. Ou sauvegardez dans un répertoire temporaire d'application et utilisez SignalR par exemple (ou simplement regroupez le serveur avec Ajax) pour vérifier si le processus dans le service est terminé. Si oui, redirigez le client pour télécharger le fichier.