Mailinglisten-Archive |
Michael Bergbauer <michael_(at)_noname.franken.de> wrote on 18.07.01 19:52:04: > >On 18-Jul-2001 Ulrich Scheuermann wrote: >> >> ----- Original Message ----- >> From: "Michael Bergbauer" <michael_(at)_noname.franken.de> >> To: <mysql-de_(at)_lists.4t2.com> >> Sent: Wednesday, July 18, 2001 6:06 PM >> Subject: Re: Re: Datenbankdesign? OT? >> >> >>> >>> Ja. Ohne das du deine Abfragen hier postest, wirst du aber wohl >>> keinen >> besseren >>> Rat hören. >>> >>> >>> Was verstehst du unter verschachtelten Queries? >>> >> >> Hallo Michael, hallo Liste, >> >> Aus dem Startformular meiner Access-Anwendung wird per Schaltfläche >> eine Ereignisprozedur ausgeführt: >> >> DoCmd.RunSQL "UPDATE qry100OP selektieren >> SET qry100OP selektieren.MA Nr = intMaNr;" >> >> Die Abfrage "qry100OP selektieren" lautet: >> SELECT TOP 100 tblKontakte.MA Nr >> FROM tblKontakte >> WHERE ...; >> >> Also: eine Auswahlabfrage, die von einem SQL-String aktualisiert >> wird. > >Hmm, nachdem es in MySQL keine StoredQueries/Views/oä gibt würd ich >fast sagen, an der ganzen Misere ist Access schuld. Auch das "Select >TOP 100" ist in MySQL nicht möglich. Die ganze DB-Operation wird also >von Access und nicht MySQL gemacht, du solltest daher auch bei der >Access-Liste besser aufgehoben sein. > >Die MySQL-Lösung des Problems wurde hier schon mehrmals vorgeschlagen, >ich wiederhols aber gerne nochmal: > >entweder arbeitest du mit Lock/unlock table, oder mit create locks >(ich hoffe die Dinger heissen so, bin immer noch zu faul zum >nachschlagen), um das ganze zu serialiseren, oder du machst die UPDATE- >Abfrage vor der Select-Abfrage, dann solltest du sichergehen können, >das die Leute verschiedene Datensätze bekommen. > > > >Michael > >-- >Michael Bergbauer <michael_(at)_noname.franke.de> >Use your idle CPU cycles. >See http://www.distributed.net and win $ 1 000. >Visit our mud Geas at geas.franken.de Port 3333 > >--- >!!NEU!! >Fragen und Antworten zu MySQL und dieser Liste unter >-->> http://www.4t2.com/mysql Hi, falls ich auch noch meinen Senf dazugeben darf: Ein "SELECT TOP x" laesst sich fuer MySQL relativ einfach mit einem "LIMIT x" am Ende der Query ausdruecken. Fuer die Serialisierung der Datenzugriffe stehen unter MySQL prinzipiell zwei Varianten zur Verfuegung. Entweder sperrt man die Tabellen ganz hart mit einem "LOCK TABLES" oder man arbeitet mit kooperativen Sperren via "GETLOCK()". Beide Varianten haben den Nachteil, das die Sperre 24h stehenbleibt, wenn der Client abstuerzen sollte (... was die M$-Sachen ja gerne tun). Deshalb sollte die Sperrzeit so kurz moeglich sein. Eine harte Sperre via "LOCK TABLES" sperrt dann die Tabelle fuer alle Clients. Das arbeitet genau gegen den Multithreading-Ansatz des MySQL und kostet also extrem Performance. Ich fuer meinen Teil versuche deswegen, nur dann, wenn unbedingt noetig, harte Sperren einzusetzen. Um die Sperrzeit kurz zu halten, benutze ich im Normalfall eine von der restlichen Datenbank unabhaengige Tabelle, die nur die aktuell gesperrten Datensaetze (Will heissen: ID, Tabelle, Datensatznummer und Sperrzeitpunkt) enthaelt. Alle schreibenden Zugriffe auf diese Tabelle werden dann mittels "GETLOCK()" serialisiert. Hat ein Client dann den exklusiven Zugriff auf diese Sperrentabelle, loescht er als erstes alle Sperren, die aelter sind als z.B. 5 min. (damit fange ich die abgestuerzten Clients auf). Dann prueft der Client, ob der Datensatz, den er gerne bearbeiten moechte, in der Sperrtabelle eingetragen ist. Wenn nicht, traegt er genau diesen Datensatz mit der aktuellen Zeit (NOW()) in der Sperrentabelle ein und "merkt" sich die Datensatznummer des Sperrdatensatzes, damit er seine Sperren alle 3 min. aktualisieren kann. Nach der Bearbeitung entfernt er dann diesen Sperrdatensatz, so dass wieder alle damit arbeiten koennen. Dieser Algorithmus sollte sich mit maximal 200 Zeilen VBA ausdruecken lassen und hat sich (bis jetzt) als relativ wasserdicht herausgestellt. Ciao Oliver --- !!NEU!! Fragen und Antworten zu MySQL und dieser Liste unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive