Frage

Ich war an potenzielle Concurrency Probleme in DB suchen, damit ich ging zu lesen. Ich fand http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0005267.htm und es Zugang zu unbestätigten Daten erwähnt.

  

Der Zugriff auf nicht festgeschriebenen Daten.   Anwendung A könnte einen Wert erhalten,   die Datenbank und die Anwendung B Macht   diesen Wert lesen, bevor es war   engagiert sein. Dann, wenn der Wert von A   später nicht begangen, sondern Rückzieher gemacht,   Die Berechnungen von B durchgeführt sind,   basierend auf nicht gebundenen (und vermutlich   ungültige) Daten.

Was ... ich dachte, andere Sitzungen (gleiche App und sogar gleichen Thread) Daten lesen kann, die noch nicht begangen hat? Ich dachte, nur die Verbindung / Sitzung (ich bin nicht sicher, ob meine Terminologie), die die Daten in die nicht ausgeführten Transaktion geschrieben kann nicht festgeschriebene Daten lesen.

Can anderen Threads lesen wirklich Daten, dass hasnt begangen worden? Ich plane, mysql zu verwenden, aber ich verwenden kann SQLite

War es hilfreich?

Lösung

Was andere Sitzungen lesen können, hängt davon ab, wie Sie Ihre Datenbank einrichten. In MySQL es hängt auch davon ab, welche Datenbank-Engine Sie verwenden. Der Begriff Sie suchen (in ANSI SQL Begriffe) ist "Isolationsstufe" .

Viele Datenbanken auf eine Isolationsstufe Standard wo auf unbestätigte Daten liest blockiert. Also, wenn Transaktion A-Updates 1234 in Tabelle T aufnehmen und dann Transaktion B versucht Datensatz 1234 auszuwählen, bevor A Commits oder Rollen zurück, dann wird B blockiert, bis A eines dieser Dinge tut.

Unter MySQL Transaktionen, Teil II. - Transaktionsisolationsstufen

Ein gravierender Nachteil ist, dass die Batch-Update-Operationen, die in leben lang laufenden Transaktionen (in der Regel), die möglicherweise viele Anfragen blockieren können.

Sie können es auch so einstellen, B unbestätigte Daten sehen werden, aber das ist oft schlecht beraten.

Alternativ können Sie ein Schema namens verwenden MVCC ( "Multiversion Concurrency Control"), die verschiedene Transaktionen eine konsistente Sicht der Daten geben auf der Grundlage der Zeit der Transaktion gestartet. Dies vermeidet das nicht gebundene Lese Problem (das Lesen von Daten, die zurückgesetzt werden können) und ist viel besser skalierbar, vor allem im Zusammenhang mit den langlebigen Transaktionen.

MySQL unterstützt MVCC .

Andere Tipps

Sicher in SQL Server können Sie, müssen Sie wählen es zu tun, es ist nicht der Standard ist, aber wenn Sie die richtige Isolationsstufe verwenden oder Abfrage-Hinweis können Sie wählen, eine uncommitted Reihe, kann dies führt zu Problemen zu lesen und sogar ein zweimaliges Lesen der gleichen Zeile in der Theorie.

In diesem Artikel erwähnt Zugang zu unbestätigten Daten als eines der Probleme, eliminierte durch den Datenbankmanager.

  

Der Datenbankmanager steuert diese   Zugriff auf unerwünschte Effekte zu vermeiden,   wie zum Beispiel:

     

...

     
      
  • Zugriff auf unbestätigte Daten.
  •   

MySQL-Speicher-Engine InnoDB unterstützt mehrere Transaktionsisolationsstufen. Weitere Informationen finden Sie http://dev.mysql.com/doc/refman/ 5.4 / en / set-transaction.html .

Für einige Versionen einiger Datenbanken, Abfragen Einstellung der Lage sein, nicht gebundenen zu lesen Leistung verbessern, wegen reduzierter Verriegelung. Die noch Blätter Fragen der Sicherheit, Zuverlässigkeit und Skalierbarkeit zu beantworten.

eine bestimmte geben, habe ich zur Arbeit auf einem sehr großen E-Commerce-Website. Sie benutzten lesen uncommitted auf lesen in den Laden Katalog, da die Daten stark zugegriffen wurden, selten geändert, und nicht empfindlich auf Bedenken über unbestätigte Daten zu lesen. Alle Daten aus dem Katalog, der verwendet wurde, um zu zuschlagen würde sowieso wieder überprüft werden. Dies war auf SQL Server 2000, das bekannt war Sperr Performance-Probleme zu haben. Bei neueren Versionen von SQL Server hat die Sperrleistung verbessert, so dass dies nicht notwendig wäre.

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