DokuWiki

It's better when it's simple

Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Übersetzungen dieser Seite?:

Erfahre mehr über DokuWiki

DokuWiki erweitern

Geschäftliche Nutzung

Unsere Community


Folge uns auf Facebook, Twitter und anderen Sozialen Netzwerken.

de:playground:extrasite

Inhaltsverzeichnis

Erste Über

sdfsdfdfsfsd

asdasdasdasd

asdasdasd

1

111111111

2

2222222222

Offene Punkte

  1. Datenbank Seite / Memory Map:
    • Die Klasse CMemoryMap schreibt die Daten in einen von mehreren Prozessen gemeinsam genutzter Speicherbereich und ist an sich nicht multithreadfähig. Die Struktur der Klasse erlaubt es auch nicht, ohne weiteres die multithreadfähigkeit unmittelbar zu implementieren, ohne die Klasse grundlegend zu verändern.
    • Alternative wäre, mehrere Instanzen der Klasse, eins für jedes Clientthread, zu erzeugen und parallel zu verwenden. Diese Alternative scheitert aber sofort an einen „statischen“ gemeinsamen Speicherbereich welcher sowohl für die letztendliche Datenspeicherung als auch für die Synchronisierung mit einem anderem Prozess (nicht Thread) verwendet wird. Die Klasse CMemoryMap benutzt bestimmte Regionen in diesem gemeinsamen Speicherbereich, um aktuelle Lese- und Schreibposition zwischen den Prozessen auszutauschen. Mehrere Instanzen müssen also diese Synchronisierung ebenfalls untereinander regeln.
    • Ein weiterer Grund, warum Multithreadfähigkeit in dem aktuellen Konzept der gemeinsamen Speichernutzung faktisch nicht ohne weiteres umsetzbar ist, dass die Klasse CMemoryMap die Daten zu jedem SQL Befehl zuerst intern speichert und dann in einem bestimmten Format als eine ununterbrechbare Sequenz in oben erwähnten gemeinsamen Speicherbereich schreibt. Sollen mehrere Instanzen parallel die Schreiboperation ausführen, müssen diese über Information verfügen, an welcher Position sie dies tun dürfen, ohne die anderen Sequenzen zu unterbrechen - dafür müssen sich alle Instanzen untereinander Synchronisieren und Bereiche zuerst reservieren. Die Reservierung der Bereiche für einen SQL Befehl und deren Daten ist aber erst dann möglich wenn all die Daten zu diesem Befehl bereits vollständig vorliegen, d.h. sind von entsprechenden Client übertragen sind.
  2. Transaktionsgrenzen:
    • SQL Befehle wurden bisher immer zu Transaktionen gebündelt. D.h. alle SQL Befehle wurden auf die Memory Map geschrieben und von dem Abholprozess XDataStorage in die MS SQL Datenbank zwischen „BEGIN TRANSACTION“ … „END TRANSACTION“/„ROLLBACK TRANSACTION“ geschrieben. Nun kommen die Daten von verschiedenen Clients, so dass sichergestellt werden soll, dass die Daten von diesen Clients zu den richtigen Transaktionen zusammengefasst werden müssen!
    • Die SQL Sequenzen von verschiedenen Clients können in der beliebiger Reihenfolge auf die Memory Map geschrieben werden, z.B. …C1S1D1D2D3, C2S3D1D2,… wobei C1 Client 1 und C2 Client 2 bedeutet, S1 der SQL Befehl mit ID 1 und S3 der SQL Befehl mit der ID 3. Das Format war jedoch <ID><LEN>[DATA], wobei die ID die SQL Befehl ID, LEN die Länger der Daten bedeutete. Danach folgt der Datenblock DATA welcher Anhang der ID dekodiert werden kann. Der Leseprozess XDataStorage liest SQL Sequenzen und führt BIND und EXECUTE Befehle auf dem SQL Server aus. Das Format ist jedoch nicht ausreichend - es fehlt die ClientID in dem Memory Map Eintrag um die Sequenzen dem richtigen Client und entsprechender Transaktion zuzuordnen.
    • Da SQL Befehle immer zu Transaktionen gebündelt sind, markiert das Ende einer Transaktion auch den Beginn einer neuer. Das wurde ausgenutzt und der Beginn einer Transaktion wurde niemals in die Memory Map geschrieben. Auch das geschriebene Ende einer Transaktion enthält bisher keinerlei Bezug zu dem entsprechendem Client. Diese Informationen sind also unzureichend um die Transaktionen zu eröffnen oder zu schließen.
de/playground/extrasite.txt · Zuletzt geändert: 2015-06-15 16:52 von Michaelsy