2009-06-24 12 views
0

J'ai une application d'enregistrement de données (C#/.net) qui enregistre les données dans une base de données SQLite. Cette base de données est écrite en permanence pendant que l'application est en cours d'exécution. Il est également possible d'archiver la base de données et de créer une nouvelle base de données dès que la taille de la base de données SQLite atteint une taille prédéfinie. Je suis en train d'écrire une application Web pour la création de rapports sur les données. Ma configuration Web est C# /. Net avec un serveur SQL. Les clients pourront voir leurs propres données recueillies en ligne à partir de leur instance de mon application. À des fins de test, pour télécharger les données à tester avec j'ai écrit une application grossière et sale qui lit essentiellement à partir de la base de données SQLite, puis injecte les données dans le SQL Server en utilisant SQL - Je lance l'application une fois pour peupler la base de données SQL Server en ligne.Meilleure façon de synchroniser la base de données client avec la base de données du serveur

Mon application est écrite en C# et est modulaire, donc je pourrais ajouter un processus qui vérifie périodiquement la base de données SQLite puis transférer de nouvelles données par lots à mon SQL Server. Ma question est la suivante: si je voulais synchroniser continuellement la ou les bases de données SQLLite côté client avec mon serveur alors que l'application est en train d'enregistrer les données, quelle serait la meilleure façon de procéder?

Y a-t-il une technologie/stratégie que je devrais envisager d'employer ici? Des techniques recommandées?

Répondre

0

Vous pouvez jeter un oeil sur le Sync Framework. À quel point le schéma que vous cherchez à synchroniser est-il complexe? & est-il uniquement à sens unique ou les données doivent-elles être redescendues? En guise de solution simple, j'examinerais l'exportation de données dans un format délimité, puis j'utiliserais bcp/BULK INSERT pour l'intégrer à votre serveur central.

+0

Merci pour cela, le transfert de données sera à sens unique. Je vais utiliser quelque chose comme le bcp pour commencer et regarder dans le cadre de synchronisation comme une solution à plus long terme. – Mattl

0

pourrait vouloir enquêter sur concept de Log Shipping

+0

Je ne suis pas sûr que ce soit faisable puisque je travaille à partir d'une base de données SQLite vers un SQL Server, je voudrais aussi mettre à jour le serveur SQL constamment - pas en temps réel mais peut-être quelques minutes. Cependant, il me faut réfléchir à la façon de résoudre un autre problème que j'ai. – Mattl

1

Plusieurs options me viennent à l'esprit. Vous pouvez ajouter un horodatage à chaque table à partir de laquelle vous souhaitez copier, puis sélectionner les lignes écrites après la dernière mise à jour. C'est rapide et cela fonctionnera si vous archivez la base de données et commencez par une base vide.

Vous pouvez également consigner vos mises à jour pour chaque table dans une chaîne XML décrivant les modifications et les stocker dans une nouvelle table traitée comme une file d'attente.

0

Il existe un projet open source sur Github également disponible sur Nuget. Il est appelé SyncWinR, il implémente Sync Framework Toolkit pour permettre la synchronisation avec WinRT ou Windows Phone 8 et SQLite. Vous pouvez accéder au projet à partir de https://github.com/Mimetis/SyncWinRT.

Questions connexes