importer le file text dans la database SQL Server 2008 en time réel

J'ai une machine qui crée un nouveau file journal au début de la journée (12h) et met à jour le file journal chaque fois qu'il y a des changements jusqu'à la fin de la journée.

  1. Comment puis-je importer datatables en time réel (30 secondes, 1 minute ou chaque fois qu'il y a des changements) dans ma database SQL Server?
  2. SQL Server 2008 pourra-t-il accéder au file journal actif? Si non, cela sera-t-il plus facile si je laisse mon ordinateur créer un nouveau file journal chaque fois qu'il y a des mises à jour? Mais si c'est le cas, comment importer autant de files journaux avec des noms différents en time réel. (Je dois être capable d'adapter la solution à plusieurs machines)

Merci beaucoup

Vous pouvez save chaque nouvelle ligne avec un horodatage inversé.

Étant donné que vous devez vous connecter uniquement lorsque le file change, vous pouvez implémenter une queue en memory qui lit le file et stocke datatables. Ensuite, implémentez un model de consommateur producteur dans lequel un thread lit et charge des données de la queue et le consommateur se connecte à la database. Un service Windows peut ensuite continuer à lire dans la queue et se connecter au server SQL. (Puisque c'est un consommateur producteur, il n'y aura pas d'attente en cas d'attente de la queue)

D'une manière ou d'une autre, vous devrez également notifier le thread du producteur à chaque fois que chaque journal est créé. Cela peut être fait via Sockets / ou d'autres moyens au cas où vous auriez access au code qui effectue la journalisation.

Si vous n'avez aucun contrôle sur l'application qui produit le file, vous n'avez pas d'autre choix que d'interroger le file. Ecrire une application qui interroge régulièrement le file et écrit les deltas dans la database. L'application devra save une haute marque d'eau à laquelle elle a été lue pour la dernière fois.

Un autre problème est que si l'application ne ferme pas le file entre les écritures, il se peut que le dernier horodatage consulté ne soit pas mis à jour. Il est donc possible que la vérification de l'ancienneté du file ne soit pas fiable. Dans ce cas, vous devez implémenter quelque chose comme ce process:

  • Ouvrez le file journal
  • Recherchez votre dernière position enregistrée EOF
  • Essayez de lire
  • En cas de succès, traitez les nouveldatatables jusqu'à ce que vous arriviez au nouveau EOF.
  • Mettez à jour votre position EOF persistante
  • Ferme le file

Vous devrez vous assurer que le nombre d'octets lus correspond à votre position de search de file. Si le file journal est unicode, il peut ne pas avoir un mappage 1: 1 entre les octets et les caractères. Vous devrez peut-être lire des morceaux du file en mode binary et faire la traduction en caractères à partir du tampon.

Une fois les inputs du file journal analysées, vous pouvez simplement insert datatables ou utiliser SQLBulkCopy pour les volumes de données plus volumineux.

Si vous pouvez relâcher vos contraintes de latence et que le file journal est suffisamment petit, vous pouvez simplement implémenter un process qui copy le file journal dans une zone de transit et recharge le tout périodiquement.

Que diriez-vous d'un packageage SSIS appelé par un travail planifié SQL Server?