Frage

Vor einiger Zeit schrieb ich einen Antrag von mehreren Benutzern verwendet, um Trades Schaffung zu behandeln. Ich habe nicht die Entwicklung seit einiger Zeit getan, und ich kann mich nicht erinnern, wie ich die Parallelität zwischen den Benutzern verwaltet. So ich einige Ratschläge in Bezug auf Design suchen.

Der ursprüngliche Antrag hatte die folgenden Eigenschaften:

  • Ein schwerer Client pro Benutzer.
  • Eine einzige Datenbank.
  • Zugriff auf die Datenbank für jeden Benutzer insert / update / delete Gewerke.
  • Ein Gitter in der Anwendung spiegelt die Gewerke Tabelle. Das Raster aktualisiert wird jedes Mal, wenn jemand einen Deal ändert.
  • Ich bin mit WPF.

Hier ist, was ich frage mich:

  1. Am mich richtig im Denken, dass ich nicht über die Verbindung mit der Datenbank für jede Anwendung kümmern sollte? Bedenkt man, dass es ein Singleton in jedem ist, würde ich ohne Frage eine Verbindung pro Client erwarten.

  2. Wie kann ich mich über die Gleichzeitigkeit der Zugriffe zu verhindern? Ich denke, ich soll sperren, wenn die Daten ändern, aber nicht mehr erinnern, wie.

  3. Wie kann ich das Raster bis zu automatisch aktualisieren, wenn meine Datenbank aktualisiert wird (von einem anderen Benutzer, zum Beispiel)?

Vielen Dank im Voraus für Ihre Hilfe!

War es hilfreich?

Lösung

  1. Betrachten Connection Pooling nutzt Anzahl der Verbindungen zu reduzieren. Siehe: http://msdn.microsoft.com/en-us/library/8xx3tyca aspx

  2. Schloss so spät wie möglich und Release so schnell wie möglich die Parallelität zu maximieren. Sie können Transaction (siehe verwenden: 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 Sie mehrere db Aktionen haben, die zusammen gehen müssen Konsistenz verwalten oder mit ihnen umgehen nur in DB gespeichert proc. Halten Sie Ihre Anfrage einfach. Befolgen Sie die folgenden Tipps zu verstehen, wie die Arbeit Sperren und wie Ressourcenkonflikte und Deadlock zu verringern: http: // www .devx.com / gethelpon / 10MinuteSolution / 16488

  3. Ich bin nicht sicher, ob andere db, aber für SQL können Sie SQL Dependency verwenden, finden Sie unter http://msdn.microsoft.com/en-us/library/a52dhwx7 (v = vs.80) aspx

Andere Tipps

Concurrency wird in der Regel durch das DBMS mit Sperren gewährt. Locks ist eine Art von Semaphore, die die exklusiven Sperre auf eine bestimmte Ressource gewähren und damit andere Zugriffe beschränkt oder in der Warteschlange werden (nur im Fall beschränkt, die Sie verwenden Uncommited liest).

Die Anzahl der Verbindungen selbst kein Problem darstellen, während Sie nicht Höhen erreicht, wo man auf dem max_connections anrühre Ihres DBMS einstellen. Andernfalls könnten Sie ein Problem zu Wartungszwecken daran anschließen bekommen oder es herunterzufahren.

verwenden DBMSes in der Regel ein Konzept entweder Tabellensperren (MyISAM) oder Zeilensperren (InnoDB, die meisten anderen DBMSes). Die Art der Sperre bestimmt das Volumen des Schlosses. Tabellensperren können sehr schnell sein, aber sind in der Regel schlechter als Sperre zu bringen.

Sperren auf Zeilenebene auftritt innerhalb einer Transaktion (implizit oder explizit). Wenn eine Transaktion manuell starten, beginnen Sie Ihren Transaktionsbereich. Bis Sie manuell den Transaktionsbereich schließen, alle vorgenommenen Änderungen werden Attribute auf diese genaue Transaktion. Die vorgenommenen Änderungen werden auch gehorchen die ACID Paradigma .

Transaktions Umfang und wie es zu benutzen ist ein Thema viel zu lange für diese Plattform, wenn Sie wollen, kann ich ein paar Links posten, die mehr Informationen zu diesem Thema durchführt.

Für die automatischen Updates, unterstützen die meisten Datenbanken eine Art von Trigger-Mechanismus, der Code ist, die zu bestimmten Aktionen in der Datenbank ausgeführt wird (zum Beispiel die Schaffung eines neuen Datensatzes oder die Änderung eines Datensatzes). Sie könnten Ihren Code innerhalb dieser Trigger schreiben. Sie sollten jedoch nur eine recieving Anwendung der Änderungen informieren, nicht wirklich „tun“, um die Änderungen aus dem Trigger, auch wenn die Sprache könnte es möglich machen. Denken Sie daran, dass die Aktion, die den Code ausgelöst wird ausgesetzt, bis Sie mit Ihrem Trigger-Code beenden. Dies bedeutet, dass ein mageres Trigger ist am besten, wenn es überhaupt notwendig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top