| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Neuer Benutzer Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() | nikosch, Du bist mir ein bisschen zu destruktiv unterwegs... Kein Mensch redet davon, daß alle Nase lang ein "timeout exceeded" auf dem Screen erscheint. Mir geht's nur darum, was passiert, wenn ALLES, wirklich ALLES schief läuft... Während dem Spiel ist für jeden Spieler nur alle 15 Minuten ein kleineres (ihn betreffend) bzw. für's ganze Spiel alle 6 Stunden mal ein größeres Update nötig. Nur das große Update macht'n bißchen Ärger... aber auch das werd' ich wohl auf 1-5 Sekunden runterdrücken können, wie's inzwischen aussieht. Während den 5 Sekunden, sollt's halt nicht zu Kollisionen kommen. Mit Get_Lock lässt sich das sperren des Tabellenzugriffs für einzelne Spieler auch schick steuern. PHP-Code: Bei anderen Schreib/Lesezugriffen müssen die Spieler dann eben checken ob - Tabelle als ganzes und in ihrem Bereich für sie frei - und bei Schreibzugriffen ggf. ein timetable_playerX Lock setzen. Mit den weiteren Befehlen lässt sich das bestimmt noch bissl verfeinern... Zitat:
Find ich jetzt so eigentlich 'ne ziemlich cheesy Lösung. Geändert von Samhayne (10.02.2010 um 09:01 Uhr). | |
| | |
| | |
| Gast
Beiträge: n/a
| Sehe ich inzwischen auch so. Da wird eine Menge aus dem Zusammenhang gerissen und dann interpretiert. Man müsste mal zählen was hier mehr Trafik erzeugt, die "blöden Fragen" oder die "Hinweise auf Google bzw. die Forenrichtlinien..." So genug gemeckert... @Samhayne Schön, dass Du inzwischen eine (MySQL spezifische) Lösung gefunden hast. Wenn Du Performanceproblem auf der Datenbank bzw. mit SQL haben solltest, bitte melden... Grüße Thomas |
|
| | |||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Er machts schon wieder… Zitat:
Zitat:
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | ||
| | |
| | |
| Neuer Benutzer Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() | So, wollte mich nun dranmachen, das ganze einzubauen, bzw. hab schon die ganzen Datenbankfunktionen geschrieben und merk nun ... dass get_lock einen Schönheitsfehler hat, den ich übersehen hab. -.- Nach einem zweiten get_lock von einem User wird das erste überschrieben. Code: mysql> SELECT GET_LOCK('lock1',1), GET_LOCK('lock2',1), GET_LOCK('lock3',1);
+---------------------+---------------------+---------------------+
| GET_LOCK('lock1',1) | GET_LOCK('lock2',1) | GET_LOCK('lock3',1) |
+---------------------+---------------------+---------------------+
| 1 | 1 | 1 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT IS_FREE_LOCK('lock1'), IS_FREE_LOCK('lock2'), IS_FREE_LOCK('lock3');
+-----------------------+-----------------------+-----------------------+
| IS_FREE_LOCK('lock1') | IS_FREE_LOCK('lock2') | IS_FREE_LOCK('lock3') |
+-----------------------+-----------------------+-----------------------+
| 1 | 1 | 0 |
+-----------------------+-----------------------+-----------------------+
1 row in set (0.00 sec)
Soll wohl vor deadlocks schützen... is aber so... einfach für mich nicht zu gebrauchen. *seufz* Wär' auch zu schön gewesen. Requests mehrere Locks setzen zu können gibt's einige... eingebaut wurde es aber nie. |
| | |
| | |
| Gast
Beiträge: n/a
| Wellcome back... Mit dem GET_LOCK() habe ich zwar noch nie gearbeitet, aber Dein Beispiel arbeitet ja immer mit der selben Datenbank-Connection und dem selben User. Der kann sich ja nicht selbst raussperren. Zu Testen musst Du parallel zwei MySQL-Consolen oder PHP-Skripte laufen lassen - auf den selben Datensatz - erst dann gibt es "Kollisionen". MySQL :: MySQL 5.1 Referenzhandbuch :: 12.10.4 Verschiedene Funktionen Grüße Thomas |
|
| | |
| Neuer Benutzer Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() | Hey thomas. ![]() Nene, das is klar. Für EIN Lock geht das auch... den Ausschluss hab ich ja beim letzten mal noch getestet und das ganze für 'ne dolle pragmatische Lösung befunden. Aber wie de oben sehen kannst, kann jeder User nur ein einziges Lock setzen. Setzt er ein neues mit neuem Namen wird das alte wieder freigegeben. SELECT GET_LOCK("tabelle_1",1); SELECT GET_LOCK("tabelle_2",1); // <= tabelle_1 ist wieder frei Stumpffug. |
| | |
| | |
| Gast
Beiträge: n/a
| ..hm, was passiert bei.. Code: // pro User mehrere Datenbank-Connection öffnen
$db1 = mysqli_connect(..);
$db2 = mysqli_connect(..);
$db3 = mysqli_connect(..);
// können vielleicht so pro User mehrere LOCKs erzeugt werden?
$db1->query('SELECT GET_LOCK("tabelle_1",1)');
$db2->query('SELECT GET_LOCK("tabelle_2",1)');
$db3->query('SELECT GET_LOCK("tabelle_3",1)');
Thomas |
|
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] mysql_insert_id () und LOCK TABLES | Senifor | PHP Tipps 2009 | 2 | 29.10.2009 15:40 |
| [Erledigt] breadcrumb 2 Tables mit Subcategories | fulltilt | PHP Tipps 2009 | 6 | 19.09.2009 07:57 |
| Kann LOCK TABLES zu Absturz der MySQL Datenbank führen? | kat_2403 | Datenbanken | 2 | 03.09.2009 15:22 |
| mysqlabfrage mit 2 tables (COUNT?) | mqs | PHP Tipps 2009 | 6 | 17.06.2009 12:49 |
| Welche Tables muss ich erstellen? | She-Sign.de | Datenbanken | 2 | 12.05.2009 19:54 |
| [Erledigt] LOCK TABLES - Thread statt Table??? | Curanai | Datenbanken | 1 | 04.04.2009 01:33 |
| [Erledigt] Problem bei delete über 2 tables | fulltilt | PHP Tipps 2009 | 3 | 24.02.2009 22:29 |
| Impossible WHERE noticed after reading const tables | Gumfuzi | Datenbanken | 6 | 03.01.2009 10:53 |
| Extrahieren aus 2 Tables mit einem bekannten Wert | ssm | Datenbanken | 12 | 23.03.2006 20:29 |
| Tables | Schubi | PHP Tipps 2005-2 | 0 | 05.08.2005 15:09 |
| Tables | Schubi | PHP Tipps 2005-2 | 0 | 05.08.2005 15:08 |
| Tables | PHP Tipps 2005-2 | 0 | 05.08.2005 13:39 | |
| LOCK TABLES / LAST_INSERT_ID | AliceD | Datenbanken | 3 | 20.07.2005 13:45 |
| Suche zufalls(bild)script das in tables läuft... | Beitragsarchiv | 0 | 05.07.2005 12:18 | |
| SHOW PROCESSLIST und TEMPORARY TABLES | tapferesschneiderlein | Datenbanken | 2 | 05.03.2005 11:40 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| tsql lock erzeugen, lock tables, select get_lock ohne release_lock, wo wird lock table in der datenbank geändert, lock table nicht die ganze tabelle, browsergame datenbank update nur einmal ausführen php, t-sql tabelle für schreibzugriffe sperren, get_lock sperre überschrieben, get_lock auflisten, mysql get_lock wie verwenden, mysql get_lock, t-sql datenbank sperre select, mit php mysql tabelle sperren, tsql transaction ausführen mit lock und timeout, release_lock funktioniert nicht, php mysql tabelle sperren, t-sql table lock anzeigen, php \select is_free_lock\, lock wait timeout exceeded; try restarting transaction temporary tables, is_free_lock |