Was ist der beste Weg, die Parallelität zu verwalten, in einer Datenbank-access-Anwendung?
Vor einer Weile schrieb ich eine Anwendung von mehreren Benutzern verwendet, um zu behandeln trades Schöpfung.
Ich habe nicht getan, die Entwicklung für einige Zeit jetzt, und ich kann mich nicht erinnern wie ich es geschafft die Parallelität zwischen den Nutzern. So, ich bin auf der Suche nach einer Beratung in Bezug auf design.
Den ursprünglichen Antrag hatte die folgenden Eigenschaften:
- Einen schweren client pro Benutzer.
- Einer einzigen Datenbank.
- Zugriff auf die Datenbank für jeden Benutzer, insert/update/delete-trades.
- Ein Gitter in der Anwendung reflektiert die trades Tabelle. Das raster wird jedes mal aktualisiert, wenn jemand ändert ein Angebot.
- Ich bin mit WPF.
Hier ist was ich Frage mich:
-
Bin ich richtig in der Annahme, dass ich sollte keine sorgen über die Verbindung mit der Datenbank für jede Anwendung? Wenn man bedenkt, dass es ist ein singleton in jeder, ich würde erwarten, dass eine Verbindung pro client mit kein Problem.
-
Wie kann ich mich über die Verhinderung der Parallelität der Zugriffe? Ich glaube, ich sollte gesperrt werden, wenn die Daten geändert wurden, allerdings nicht erinnern, wie.
-
Wie richte ich das Netz automatisch aktualisieren, sobald meine Datenbank aktualisiert wird (durch einen anderen Benutzer, zum Beispiel)?
Vielen Dank im Voraus für Eure Hilfe!
- Welche Art von Datenbank?
- Was verwenden Sie, wie die Benutzeroberfläche? ASP.NET? WinForms? WPF? Silverlight?
- Ich bin mit WPF. Ich habe es in der Beschreibung. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Betrachten Nutzung von Connection Pooling zu reduzieren, # der verbindungen. Siehe: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx
Sperre so spät wie möglich und release so bald wie möglich, um Maximierung der Parallelität. Sie können verwenden Sie TransactionScope (siehe: http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx und http://blogs.msdn.com/b/dbrowne/archive/2010/05/21/using-new-transactionscope-considered-harmful.aspx) wenn du mehrere db-Aktionen, die gehen müssen, gemeinsam zu verwalten, Konsistenz oder einfach nur mit Ihnen umgehen in der DB gespeichert, proc. Halten Sie Ihre Abfrage einfach. Befolgen Sie die folgenden Tipps, um zu verstehen, wie die sperren funktionieren und wie, um Ressourcenkonflikte zu reduzieren und deadlock: http://www.devx.com/gethelpon/10MinuteSolution/16488
Ich bin nicht sicher, andere db, aber für SQL können Sie SQL-Abhängigkeit, siehe http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs. 80).aspx
Parallelität wird in der Regel erteilt durch das DBMS mithilfe von sperren. Die Schleusen sind eine Art semaphor, gewähren die exklusive Sperre auf eine bestimmte Ressource und damit für andere Zugriffe eingeschränkt werden oder in der Warteschlange (nur eingeschränkt im Falle der Verwendung ungebunden liest).
Die Anzahl der verbindungen, die sich stellt kein problem dar, während Sie nicht erreichen Höhen, in denen Sie möglicherweise berühren die max_connections Einstellung Ihres DBMS. Andernfalls erhalten Sie möglicherweise ein problem bei der Verbindung, um es für die Wartung oder für das Herunterfahren.
DBMS in der Regel ein Konzept von einer der beiden Tabellen sperren (MyISAM) oder Zeilen-sperren (InnoDB, die meisten anderen DBMS). Die Art der sperren bestimmt die Lautstärke des Schlosses. Tabelle sperren kann sehr schnell sein, sind aber in der Regel geringer bewertet als die der row-level-locks.
Row level locks innerhalb einer Transaktion auftreten (implizit oder explizit). Wenn Sie manuell eine Transaktion gestartet, beginnen Sie Ihre Transaktionsbereich. Bis Sie manuell schließen Sie die Transaktion Umfang, alle änderungen, die Sie vornehmen, werden Attribute, um diese exakte Transaktion. Die änderungen, die Sie vornehmen, befolgen Sie auch die ACID-Paradigma.
Transaktionsbereich und wie es zu benutzen ist ein Thema, das viel zu lange für diese Plattform, wenn Sie möchten, kann ich nach einige links, die mehr Informationen zu diesem Thema.
Für die automatischen updates, die meisten Datenbanken unterstützen irgendeine Art von trigger-Mechanismus, der code, der ausgeführt wird bei bestimmten Aktionen auf die Datenbank (z.B. die Schaffung eines neuen Datensatzes oder das ändern eines Datensatzes). Könnten Sie schreiben Sie Ihren code innerhalb dieser trigger. Allerdings sollten Sie nur informieren, erhalten die Anwendung der änderungen, nicht wirklich "tun" die änderungen, die von der trigger ausgelöst wird, auch wenn die Sprache, die es möglich machen könnte. Denken Sie daran, dass die Aktion, die ausgelöst wird der code angehalten, bis Sie fertig sind mit Ihrem trigger-code. Dies bedeutet, dass eine lean-trigger ist am besten, wenn es ist erforderlich.