Zum Hauptinhalt springen
Nicht aus der Schweiz? Besuchen Sie lehmanns.de

Von Geodaten bis NoSQL: Leistungsstarke PHP-Anwendungen (eBook)

Aktuelle Techniken und Methoden für Fortgeschrittene

(Autor)

eBook Download: PDF
2012 | 1. Auflage
528 Seiten
Carl Hanser Fachbuchverlag
978-3-446-43122-5 (ISBN)

Lese- und Medienproben

Von Geodaten bis NoSQL: Leistungsstarke PHP-Anwendungen -  Arno Hollosi
Systemvoraussetzungen
27,99 inkl. MwSt
(CHF 27,35)
Der eBook-Verkauf erfolgt durch die Lehmanns Media GmbH (Berlin) zum Preis in Euro inkl. MwSt.
  • Download sofort lieferbar
  • Zahlungsarten anzeigen
LEISTUNGSSTARKE PHP-ANWENDUNGEN //
- Für fortgeschrittene PHP-Entwickler mit Kenntnissen zu Datenbanken und Webtechniken
- Vom Frontend bis zum Backend: Neue Technologien für interaktive, schnelle und benutzerfreundliche Webseiten
- Mit vielen Beispielen, Lösungen und Tipps
- Alle Beispiele aus dem Buch unter: http://downloads.hanser.de
- MySQL 5.6, PostGIS 2.0, Redis 2.4, MongoDB 2.0, Varnish 3.0, Memcached 1.4
Schnell, einfach, persönlich. Das sind aus Sicht des Benutzers die wesentlichen Erfolgsfaktoren für Websites. Wie Ihre Websites diesen Anforderungen gerecht werden, erfahren Sie in diesem Buch. Es gliedert sich in vier Themenbereiche:
Teil I Geodaten, Zeitzonen und Schriftzeichen zeigt Ihnen, wie Sie Geodatenbanken nutzen, einen Routenplaner programmieren sowie Unicode und Zeitzonen für internationale PHP-Anwendungen richtig einsetzen.
Teil II Interaktive Websites hat AJAX und Server Push zum Thema. Neben neuen Funktionen (Fortschrittsanzeige, Cross-Domain-Requests) lernen Sie Server-sent Events und WebSockets kennen und entwickeln einen eigenen eventbasierten PHP-Server, der viele Tausend Verbindungen parallel bedienen kann.
Teil III Leistungsstarke Webseiten erklärt, wie Sie HTML optimieren und Ihre Website spürbar schneller machen können. Ausführlich wird auf Caching von Webseiten und
Strategien zur Vermeidung von Cache-Stürmen eingegangen.
Teil IV MySQL und NoSQL zeigt, wie Sie Indexe und Transaktionen in MySQL richtig einsetzen und Abfragen optimieren. Mit Redis, einem Key/Value-Store, und MongoDB, einer populären Dokumentendatenbank, lernen Sie die Einsatzgebiete von NoSQL-Datenbanken kennen.
AUS DEM INHALT:
Geodatenbanken PostGIS & SpatiaLite // Zeitzonen // Unicode im Detail // JSON // Cross-Origin-AJAX // Server-sent Events // WebSockets // Eventbasierter PHP-Server im Eigenbau // Frontend optimieren // Cache-Stürme verhindern // Caching: Varnish, Edge Side Includes, APC & Memcached // MySQL: InnoDB, Indexe, Transaktionen // Redis (Key/Value-Store) // MongoDB & Map/Reduce

Arno HOLLOSI forscht und lehrt an der Fachhochschule CAMPUS 02 in Graz zu den Themen Web und Informationssicherheit. Nebenbei betreibt er zwei erfolgreiche englisch-sprachige Websites rund um das asiatische Brettspiel Go.

Vorwort 16
Teil I: Den Benutzer im Fokus: Geodaten, Zeitzonen und Schriftzeichen 20
1 Geodaten 22
1.1 Geolokalisierung in HTML5 23
1.1.1 Abfrage der aktuellen Position 23
1.1.2 Ergebnis der Positionsabfrage 24
1.1.3 Verfolgen von Positionsänderungen 25
1.1.4 Optionen für die Positionsabfrage 26
1.1.5 Zusammenfassung 27
1.2 Lokalisierung über IP-Adresse 27
1.2.1 Installation der GeoIP-PHP-Erweiterung 27
1.2.2 Installation der Datenbank 28
1.2.3 Auswerten der Daten 28
1.2.4 Vor- und Nachteile 30
1.3 GEOS 30
1.3.1 Installation 30
1.3.2 Geometrische Formen und Datenformate 31
1.3.3 Erzeugen von geometrischen Objekten 34
1.3.4 Abfragen, ob ein Objekt ein anderes beinhaltet 36
1.3.5 Abfragen von Objektüberschneidungen 38
1.3.6 Verändern und Kombinieren von Objekten 39
1.3.7 Abfragen von Eigenschaften 42
1.3.8 Bestimmen von Distanzen, Längen und Flächen 45
1.3.9 Zusammenfassung 46
1.4 Projektionen 46
1.4.1 Arten von Projektionen 47
1.4.2 Georeferenzsysteme 50
1.4.3 Auswahl eines Georeferenzsystems 52
1.5 Zusammenfassung 55
2 Geodaten speichern 56
2.1 MySQL und Geodaten 56
2.1.1 Datentypen und Datenformate 57
2.1.2 Beispieldaten: Landkreise und Geoinformationen 59
2.1.3 Einfache geometrische Funktionen 62
2.1.4 Abfragen geometrischer Beziehungen 64
2.1.5 Erstellen eines geometrischen Index 66
2.1.6 Zusammenfassung 67
2.2 PostGIS 67
2.2.1 Installation 68
2.2.2 Anlegen der Datenbank 69
2.2.3 Erstellen einer Tabelle mit Geodaten 70
2.2.4 Laden von Shape-Dateien 71
2.2.5 Ausgabedatenformate 72
2.2.6 Geography-Datentyp 74
2.2.7 Erstellen geometrischer Indexe 77
2.2.8 Beispiele für Geo-Abfragen 79
2.2.9 Kombinieren mit Maßzahlen (Measure) 84
2.3 Routenberechnung mit SpatiaLite 89
2.3.1 Installation 89
2.3.2 Laden und Indizieren von OSM-Daten 91
2.3.3 Suche des kürzesten Weges 92
2.3.4 Zusammenfassung 94
2.4 Kartendarstellung mit OpenLayers 95
2.4.1 Software für einen Kartendienst 95
2.4.2 Vorteile von OpenLayers 96
2.4.3 Einfache Kartendarstellung 96
2.4.4 Route in einem Layer darstellen 98
2.5 Zusammenfassung 100
3 Zeit und Zeitzonen 102
3.1 Zeitzonen und koordinierte Weltzeit (UTC) 102
3.1.1 Angabe von Zeitzonen 103
3.1.2 Veränderungen der Zeitzonen 104
3.1.3 Zeitzonendatenbank 104
3.2 Sommerzeit 105
3.3 Zeitangaben in PHP 106
3.3.1 Verwendung von Unix-Zeitstempeln 106
3.3.2 DateTime-Objekte 107
3.4 Zeitdatentypen in MySQL 109
3.4.1 Vorbereiten und Aktualisieren der Datenbank 110
3.4.2 Umrechnungen 110
3.4.3 Zeit- und Datumsfunktionen 111
3.4.4 Empfohlene Datentypen 112
3.5 Nicht-Gregorianischer Kalender 113
3.6 Ermitteln der Zeitzone des Benutzers 115
3.6.1 Abfragen der Client-Zeit mit JavaScript 115
3.6.2 Zeitzone über Ort bestimmen 116
3.6.3 Vor- und Nachteile 117
3.7 Zusammenfassung 117
4 Unicode 118
4.1 Zeichenkodierung 118
4.1.1 Kodierung und Decodierung 119
4.1.2 Zeichensatz 120
4.2 Unicode-Grundlagen 121
4.2.1 Codepoints 122
4.2.2 Abstrakte Zeichen und Äquivalente 122
4.2.3 Grapheme und Komposita 123
4.2.4 UTF-8 (Zeichenkodierung) 124
4.2.5 UTF-16 (Zeichenkodierung) 125
4.2.6 UTF-32 (Zeichenkodierung) 127
4.2.7 Zusammenfassung 127
4.3 PHP und Unicode 128
4.3.1 Unicode ist ein Muss 128
4.3.2 Unicode im PHP-Quellcode 128
4.3.3 Unicode ohne Unicode-Unterstützung 129
4.3.4 Validieren und Normalisieren von UTF-8-Zeichenfolgen 131
4.3.5 Multibyte-Strings (PHP-Modul mbstring) 136
4.3.6 Reguläre Ausdrücke 137
4.3.7 Grapheme und die Länge eines Strings 138
4.3.8 Zusammenfassung 142
4.4 MySQL und Unicode 143
4.4.1 Unterstützte Kodierungen 143
4.4.2 Kodierung der Client-Verbindung 143
4.4.3 Sortierfolge und Textvergleich 144
4.4.4 Angeben der gewünschten Sortierfolge 145
4.4.5 Auswirkung auf Indexe 148
4.4.6 Fazit 149
4.5 Zusammenfassung 150
Teil II: Interaktive Websites: Kommunikation zwischen Client und Server 152
5 Interaktive Websites 154
5.1 JavaScript Object Notation (JSON) 155
5.1.1 JSON-Syntax 155
5.1.2 Datentypen 156
5.1.3 JSON & PHP
5.1.4 JSON parsen mit JavaScript 161
5.1.5 Zusammenfassung 165
5.2 JavaScript Object Notation with Padding (JSONP) 165
5.2.1 Funktionsweise 165
5.2.2 Sicherheit 167
5.2.3 Zusammenfassung 169
5.3 XMLHttpRequest 169
5.3.1 Basisfunktionalität (XHR Level 1) 169
5.3.2 Beispiel: Nachladen von Textinhalten 172
5.3.3 Beispiel: Nachladen von XML-Inhalten 175
5.4 Cross-Origin Resource Sharing (CORS) 178
5.4.1 Einfache CORS-Anfragen 178
5.4.2 Komplexe CORS-Abfragen (preflighted requests) 180
5.4.3 Mitsenden bzw. Akzeptieren von Cookies 181
5.4.4 Überblick über alle CORS-HTTP-Header 182
5.5 XMLHttpRequest – Level 2 183
5.5.1 Erweiterte Ereignissteuerung (XHR Level 2) 183
5.5.2 Neue Datentypen (XHR Level 2) 186
5.6 Navigation in AJAX-Anwendungen 191
5.6.1 URL-Fragmente und Hashbang (#!) 191
5.6.2 HTML5-Session-History 192
5.7 Zusammenfassung 195
6 Servergesteuerte Aktualisierung (Server Push) 196
6.1 Kontinuierliches Abfragen (Polling) 196
6.2 Long Polling und Server-sent Events (SSE) 197
6.2.1 Server-sent Events: Client-Seite 198
6.2.2 Server-sent Events: Protokoll 201
6.2.3 Server-sent Events: Serverseite 202
6.2.4 Analyse der notwendigen Ressourcen 204
6.3 Eventbasierter PHP-Server 204
6.3.1 Eventbasierte Architektur 205
6.3.2 libevent 207
6.3.3 PHP-Server mit libevent 207
6.3.4 Beispiel: PHP-Server für Server-sent Events 213
6.3.5 Ressourcen und Geschwindigkeit 216
6.3.6 Zusammenfassung 216
6.4 WebSocket 217
6.4.1 Ablauf 217
6.4.2 Handshake 218
6.4.3 Datenübertragung mit Frames 221
6.4.4 Beispiel: Eventbasierter PHP-WebSocket-Server 225
6.4.5 Client-Seite 229
6.4.6 Fazit 235
6.5 Zusammenfassung 235
Teil III: Immer schneller: Leistungsstarke Webseiten 236
7 Frontend optimieren 238
7.1 Warum ist das Frontend wichtig? 238
7.2 Caching-Mechanismen im HTTP-Protokoll 241
7.2.1 Caching-Dauer begrenzen 241
7.2.2 Veränderliche Inhalte 245
7.2.3 Bedingungen für die Zwischenspeicherung 248
7.2.4 Kombinieren der HTTP-Header 249
7.2.5 Grenzen und Probleme 250
7.3 Auswirkungen des TCP-Protokolls 250
7.3.1 Aufbau einer TCP-Verbindung 250
7.3.2 Durchsatz einer TCP-Verbindung 251
7.3.3 Browser, Verbindungen und Datendurchsatz 253
7.4 Reduzieren der Anzahl der HTTP-Requests 254
7.4.1 Caching 254
7.4.2 Eliminieren von Umleitungen (HTTP Redirect) 255
7.4.3 Zusammenführen von CSS- und JavaScript-Dateien 256
7.4.4 CSS-Sprites 257
7.4.5 Kleine Bilder direkt einbinden (data-Protokoll) 259
7.5 Reduzieren der Größe der Ressourcen 260
7.5.1 Komprimierung bei der Übertragung 260
7.5.2 JavaScript 262
7.5.3 CSS 263
7.5.4 Bilder 263
7.5.5 HTML 264
7.6 Darstellungsgeschwindigkeit 264
7.6.1 Einbinden von Stylesheets 265
7.6.2 Einbinden von JavaScript 265
7.6.3 Dynamisches Nachladen von JavaScript 267
7.6.4 Minimieren von Darstellungsänderungen (Reflow) 268
7.7 Weitere Techniken 269
7.7.1 Flush early 269
7.7.2 Anzahl der Domänen (Sharding) 271
7.7.3 Cookies 271
7.8 HTML 5-Web Storage 272
7.8.1 Web Storage 273
7.8.2 Web Storage als Cache nutzen 277
7.9 Messen und Analysieren 281
7.9.1 Ladezeiten und HTTP-Wasserfall 281
7.9.2 Werkzeuge zur schnellen Analyse 283
7.9.3 Detailanalyse 284
7.10 Zusammenfassung 285
8 Caching von Inhalten 286
8.1 Einsatz und Ablauf von Caching 286
8.1.1 Zwischenspeichern mit einem Reverse Proxy 287
8.1.2 Zwischenspeichern in PHP 288
8.1.3 Geeignete Inhalte auswählen 289
8.2 Aktualisieren von gecachten Inhalten 292
8.2.1 Synchron aktualisieren 292
8.2.2 Asynchron aktualisieren 293
8.2.3 Zu bestimmten Zeitpunkten aktualisieren 293
8.2.4 Vor Ablauf aktualisieren 293
8.2.5 Bei Zugriff aktualisieren 294
8.3 Verhindern eines Cache-Sturms 294
8.4 Zusammenfassung 296
9 Varnish und Edge Side Includes 298
9.1 Installation und Administration 298
9.1.1 Installation vom Quellcode 298
9.1.2 Starten von Varnish 299
9.1.3 Administration 299
9.1.4 Konfigurationsdateien 301
9.2 Reverse Proxy 302
9.2.1 Festlegen eines Webservers 303
9.2.2 Cache-Eigenschaften 304
9.2.3 Mehrere Webserver für unterschiedliche URLs 305
9.2.4 Lastverteilung 307
9.2.5 Cookies und Caching 308
9.3 Edge Side Includes 309
9.3.1 Syntax 311
9.3.2 Konfiguration in Varnish 311
9.3.3 Beispiel 313
9.3.4 Alternative in JavaScript 315
9.4 Zusammenfassung 315
10 Alternative PHP Cache (APC) 316
10.1 Installation 316
10.2 Überblick und Konfiguration 317
10.2.1 Opcode-Cache 317
10.2.2 Benutzer-Cache 318
10.2.3 Konfiguration 318
10.3 Daten mit APC cachen 320
10.4 Ablauf von Daten in APC 322
10.5 Aktualisieren von Einträgen vor Ablauf 323
10.5.1 Übersicht 323
10.5.2 Sichtweise des aufrufenden Programms 324
10.5.3 CachedValue-Klasse 326
10.5.4 Auslesen des Eintrages (get-Methode) 327
10.5.5 Speichern des Eintrages (store-Methode) 329
10.5.6 Verhalten bei parallelen Zugriffen 329
10.6 APC anfüttern 331
10.7 Monitoring 332
10.7.1 APC-eigenes Skript (apc.php) 332
10.7.2 APC-Funktionen zum Monitoring 333
10.8 Zusammenfassung 335
11 Memcached 336
11.1 Funktionsweise 336
11.1.1 Übersicht und Prinzipien 336
11.1.2 Datenverteilung auf Server und konsistentes Hashing 338
11.1.3 Lebensdauer von Einträgen 339
11.2 Installation 340
11.2.1 Installieren des Servers 340
11.2.2 Installieren des PHP-Moduls 341
11.3 Daten cachen 343
11.3.1 Zu Memcached verbinden 343
11.3.2 Daten in Memcached speichern und abfragen 345
11.3.3 Kombinieren mehrerer Abfragen 347
11.4 Gruppieren von Werten 348
11.4.1 Beispielprogramm: Benutzerklasse 349
11.4.2 Beispielprogramm: Nachrichtenklasse 350
11.4.3 Beispielprogramm: Nachricht schreiben und speichern 350
11.4.4 Beispielprogramm: Asynchrones Auslesen aller Nachrichten 352
11.5 Aktualisieren von Einträgen 354
11.5.1 Überblick 354
11.5.2 CachedValue-Klasse 355
11.5.3 Auslesen eines Eintrages (get-Methode) 356
11.5.4 Neuberechnung eines Eintrages 357
11.5.5 Sichtweise des aufrufenden Programms 358
11.5.6 Verhalten bei parallelen Zugriffen 359
11.6 Ausfallsicherheit 360
11.7 Hinweise zum Praxiseinsatz 361
11.7.1 Auswahl der Server 361
11.7.2 Memcached und Sessions 362
11.7.3 Cachen des Fehlerfalls 362
11.7.4 Speichern von statischen Inhalten 363
11.7.5 Monitoring 363
11.8 Zusammenfassung 365
Teil IV: Datenbanken à la carte: MySQL und NoSQL 366
12 MySQL für Fortgeschrittene 368
12.1 Sakila-Beispieldatenbanken 368
12.2 Index-Strategien 370
12.2.1 Grundlagen 370
12.2.2 Verwenden von Indexen 372
12.2.3 Abdeckender Index (Covering Index) 375
12.2.4 Sortieren von Daten 376
12.2.5 Indexgröße 379
12.3 Optimieren von Abfragen 381
12.3.1 Abfragen von nicht benötigten Daten 381
12.3.2 Seitenweises Blättern mit LIMIT 382
12.3.3 Bereichsabfragen mit mehrspaltigen Indexen 383
12.3.4 Beispiel: JOIN optimieren 385
12.3.5 Zusammenfassung 387
12.4 Transaktionen 387
12.4.1 SQL-Transaktionen 388
12.4.2 Isolationsstufen von Transaktionen 390
12.4.3 MVCC und Lock-Mechanismen der Isolationsstufen 391
12.4.4 Transaktionen mit PHP 395
12.4.5 Fazit 397
12.5 Zusammenfassung 398
13 Redis 400
13.1 Warum NoSQL? 400
13.2 Übersicht 403
13.3 Installation 404
13.3.1 Installation als Boot-Service 404
13.3.2 Installation des PHP-Moduls 405
13.4 Aufbauen der Verbindung zu Redis 406
13.4.1 Persistente Verbindungen 406
13.4.2 Optionen 406
13.5 Datentypen 407
13.5.1 Zeichenketten 407
13.5.2 Listen 414
13.5.3 Mengen 421
13.5.4 Sortierte Mengen 431
13.5.5 Hashes 439
13.6 Weitere Funktionen 442
13.6.1 Befehle zur Schlüsselverwaltung 443
13.6.2 Ablauf von Einträgen 444
13.6.3 Sortieren 445
13.7 Transaktionen und Pipelining 449
13.8 Persistieren der Datenbank 451
13.8.1 Snapshot der Datenbank 451
13.8.2 Speichern per Logdatei 452
13.9 Zusammenfassung 453
14 MongoDB 454
14.1 Installation 454
14.1.1 Mongo-Shell 455
14.1.2 Installation der PHP-Erweiterung 455
14.2 Datenbanken und Datenschema 456
14.2.1 Verbinden und Auswahl der Datenbank 456
14.2.2 Auswahl und Erzeugen von Kollektionen 457
14.2.3 Dokumente und Datentypen 458
14.2.4 Entwerfen des Datenschemas 460
14.3 CRUD-Operationen 462
14.3.1 Einfügen von Dokumenten 463
14.3.2 Fehlerbehandlung 464
14.3.3 Primäre Schlüssel 466
14.3.4 Finden von Dokumenten 467
14.3.5 Aktualisieren von Dokumenten (Update) 468
14.3.6 Aktualisieren verschachtelter Dokumente 471
14.3.7 Löschen von Dokumenten und Kollektionen 475
14.4 MongoDB-Abfragesprache 476
14.4.1 Operatoren 476
14.4.2 Verschachtelte Dokumente und Arrays 478
14.4.3 Komplexe Bedingungen ($where) 480
14.4.4 Sortieren 482
14.4.5 Gruppieren 484
14.5 Indizieren von Feldern 487
14.5.1 Indexarten 488
14.5.2 Verwenden von Indexen 489
14.5.3 Analysieren von Abfragen mit explain() 490
14.6 Map/Reduce 494
14.6.1 Prinzip 495
14.6.2 Ablauf und Parameter 497
14.6.3 Inkrementelle Berechnung 501
14.7 Replikation und Verfügbarkeit 504
14.7.1 Funktionsweise 504
14.7.2 Anlegen einer Replikationsgruppe 504
14.7.3 Verwenden in PHP 505
14.8 Sharding und Skalierung 506
14.8.1 Funktionsweise 507
14.8.2 Sharding konfigurieren 507
14.8.3 Verwendung 508
14.8.4 Sharding-Schlüssel auswählen 509
14.9 Zusammenfassung 510
Bildnachweise 512
Index 514

AUS DEM INHALT //

- Geodatenbanken PostGIS & SpatiaLite
- Zeitzonen
- Unicode im Detail
- JSON
- Cross-Origin-AJAX
- Server-sent Events
- WebSockets
- Eventbasierter PHP-Server im Eigenbau
- Frontend optimieren
- Cache-Stürme verhindern
- Caching: Varnish, Edge Side Includes, APC & Memcached
- MySQL: InnoDB, Indexe, Transaktionen
- Redis (Key/Value-Store)
- MongoDB & Map/Reduce

Erscheint lt. Verlag 6.9.2012
Verlagsort München
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik Programmiersprachen / -werkzeuge
Schlagworte Caching • Geodaten • Lokalisierung • MongoDB • MySQL • NoSQL • Performanz • PHP 5 • PHP 5.4 • PHP MySQL • Webdesign
ISBN-10 3-446-43122-5 / 3446431225
ISBN-13 978-3-446-43122-5 / 9783446431225
Informationen gemäß Produktsicherheitsverordnung (GPSR)
Haben Sie eine Frage zum Produkt?
PDFPDF (Wasserzeichen)

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Apps programmieren für macOS, iOS, watchOS und tvOS

von Thomas Sillmann

eBook Download (2025)
Carl Hanser Verlag GmbH & Co. KG
CHF 40,95
Apps programmieren für macOS, iOS, watchOS und tvOS

von Thomas Sillmann

eBook Download (2025)
Carl Hanser Verlag GmbH & Co. KG
CHF 40,95