2010-09-14 3 views
1

mon application Windows lit le fichier texte et l'insère dans la base de données. Le problème est le fichier texte est extrêmement gros (au moins pour nos machines bas de gamme). Il a 100 000 lignes et il faut du temps pour l'écrire dans la base de données.Comment écrire des données dans la base de données efficacement en utilisant C#?

Est-ce que vous pouvez suggérer comment lire et écrire les données de manière efficace pour ne pas surcharger la mémoire de la machine? FYI ... Délimiteur de colonne: '|' delimiter Row: NewLine

Il a environ 10 colonnes .. (Il a une information de clients ... comme prénom, nom, adresse, téléphone, e-mails, etc.)

ESTIMENT ... Je suis limité d'utiliser CMD BULK.

+0

Quelle base de données utilisez-vous? – RedFilter

+1

Est-ce que c'est réellement de la "mémoire"? Ou est-il lent? Ou les deux? (ils sont souvent deux problèmes distincts) –

+0

@kirk. Je crois à la fois. Mais les machines sont aussi bas de gamme - celeron. – Jango

Répondre

3

Vous ne dites pas quel type de base de données vous utilisez, mais si c'est SQL Server, alors vous devriez regarder dans la commande BULK INSERT ou l'utilitaire BCP.

+0

Salut, c'est un autre problème .. plus tôt j'utilisais SP en utilisant Bulk insert ... problème est maintenant je ne peux pas vider le fichier texte sur notre serveur de base de données pour des raisons de sécurité .. Tout le plan est de lire le fichier texte et écrire – Jango

+1

@Crawling - Vous pourriez peut-être parler aux gens de la sécurité en laissant le serveur de base de données accéder à un partage réseau qui peut être utilisé dans le but de données de chargement en masse. Cela serait (probablement) beaucoup plus rapide que les insertions individuelles. –

0

Étant donné qu'il n'y a absolument aucune chance d'obtenir l'aide de vos gens de sécurité et de l'utilisation des commandes VRAC, voici l'approche que je prendrais:

  1. Assurez-vous que vous lisez le fichier texte entier avant d'insérer dans la base de données. Réduisant ainsi les E/S.

  2. Vérifiez quels index vous avez dans la table de destination. Pouvez-vous insérer dans une table temporaire sans index ou dépendances de sorte que les insertions individuelles sont rapides?

  3. Ces données doivent-elles être visibles immédiatement après l'insertion? Sinon, vous pouvez avoir un travail planifié à lire à partir de la table temporaire à l'étape 2 ci-dessus et l'insérer dans la table de destination (qui a des index, des clés étrangères, etc.).

+0

Qui a dit que le fichier rentrerait dans la mémoire? Si vous tentez de l'ajuster, vous risquez de bloquer le programme ou de ralentir le programme en raison de l'échange. –

+0

@Steven Sudit - C'est un bon point! Ensuite, l'approche serait de découper le fichier en quelque chose qui fonctionnera sur les machines «bas de gamme». –

+0

Seul problème, je fais face est lu fichier texte .. si je le lis à la fois il pose problème sur les machines bas de gamme. Propose-moi ce que je devrais faire ici? – Jango

0

pour vous Est-il possible de register votre assembly personnalisé dans Sql Server? (Je suppose que c'est sql server parce que vous avez déjà dit que vous avez utilisé l'insertion en bloc plus tôt). Que vous pouvez appeler votre assembly pour faire (surtout) ce dont vous avez besoin, comme obtenir un fichier à partir d'un service (ou de votre choix), l'analyser et l'insérer directement dans des tables.

Ce n'est pas une option que j'aime, mais il pourrait être un épargnant parfois.

+0

C'est une longue histoire. Mon application était sur le serveur web ... fonctionnant comme un observateur de fichier ... le fichier arrive .... lisez-le et vérifiez l'intégrité du fichier et appelez la procédure stockée et transmettez ftp, informations sur l'emplacement du fichier ... maintenant la procédure stockée revient à le serveur web ... saisit le fichier en utilisant l'appel ftp ... et réécrit le fichier sur le serveur Db puis fait l'insertion en bloc etc ... Donc maintenant prob est SP en utilisant Windows FTP .... ce qui n'est pas SSL. BE pour des raisons de sécurité ... maintenant, l'appel FTP de SP n'est pas terminé. Donc, je ne peux pas faire beaucoup sur le serveur DB. – Jango

+0

Vous pouvez exécuter FTP sur SSH. –

Questions connexes