2009-11-27 6 views
0

J'ai une expérience très limitée de la programmation de base de données et mes applications qui accèdent aux bases de données sont simples :). Jusqu'à présent :(J'ai besoin de créer une application de bureau de taille moyenne (appelée client enrichi?) Qui utilisera une base de données sur le réseau pour partager des données entre plusieurs utilisateurs, probablement C# et MSSQL/MySQL/SQLite. J'ai effectué quelques tests de conduite et j'ai découvert que sur des réseaux de mauvaise qualité, l'accès à la base de données n'est pas très simple: dans un réseau local, beaucoup de données sont transférées sur le réseau et les serveurs sont à charge constante. une requête INSERT ou SELECT SQL simple prendra 1-2 minutes ou même échouera avec timeout/erreur de réseauFrontend de base de données riche - comment gérer correctement les réseaux de faible qualité?

Est-il des pratiques recommandées pour gérer de telles situations? Bien sûr, je peux diviser mon application en thread graphique et thread DB afin les problèmes de réseau ne mèneront pas à une interface graphique figée. erreurs de travail? Les afficher à l'utilisateur trop souvent ne sera pas très bon :(Je pense à créer automatiquement une copie locale d'une base de données sur chaque ordinateur que mon application exécute: d'abord mettre à jour la base de données locale et la synchroniser en arrière-plan. Cela permettra une application pour fonctionner événement si le réseau a de grands LAG/problèmes.

les conseils et mots à la mode ce que je peux regarder en? peut-être que c'est une des meilleures pratiques déjà que je ne sais pas :)

Répondre

2

Désolé Ce n'est pas la réponse que vous recherchez, mais vous mentionnez qu'une insertion/mise à jour simple peut prendre 1-2 minutes ou même échouer avec une erreur de délai/réseau.

Cela me semble être un problème autre que le réseau lui-même. Si vous travaillez sur un réseau d'entreprise, il devrait y avoir des niveaux de trafic fous pour ce genre de comportement. Je ferais tout ce qui est en votre pouvoir pour améliorer le réseau avant de continuer. Pouvez-vous poster le résultat d'un ping dans la boîte de dialogue?

Si vous allez architecturer votre application autour de ce type de réseau, cela modifiera considérablement le produit final et peut même aboutir à un produit de mauvaise qualité pour d'autres clients. En fonction de la nature de l'application, vous pouvez envisager de mettre en œuvre une file d'attente de persistance asynchrone et de mettre en cache des données au démarrage ou même d'intégrer une copie de la base de données dans votre application.

+0

C'est une situation normale pour les petites et moyennes entreprises où les réseaux sont mal conçus, mal assemblés et peu entretenus :). Bien sûr, le serveur MySQL est plus tolérant au réseau que SQLite, mais les pings de 2-3 secondes qui ne peuvent pas s'ouvrir en raison des retards peuvent tuer toute conversation réseau entre l'application et la base de données :) – grigoryvp

1

Même si le comportement asynchrone/files d'attente/mise en cache/copie de la base de données à chaque instance locale etc aidera à résoudre les symptômes, le problème restera toujours. Si le réseau est vraiment mauvais alors je l'adresse avec leur I.T. département, ou le gestionnaire de projet et de construire une exigence de performance de leur côté des choses dans le contrat.

+0

+1 pour ajouter une clause au contrat – Karl

+0

C'est une bonne idée. Mais parfois, il est préférable d'ajouter une tolérance de réseau au logiciel que de se battre tous les 10 ans pour la qualité de son réseau :) – grigoryvp

Questions connexes