» Caches / Zwischenspeicher wieder aktiv

Kleine Code-Optimierung bringt MikrosekundenNeuen Thread eröffnenNeue Antwort erstellenMehrere Datenbankabfragen optimiert
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
17.04.2015, 22:46
zitieren

Vor Jahren hatten wir mal ein Zwischenspeicher-System installiert, aber durch die Masse an Dateien, die dadurch auf dem Server entstanden sind, habe ich das dann irgendwann wieder ausgebaut, da das Backup immer länger dauerte.

Nun habe ich das System wieder ans Laufen gebracht aber ein paar grundsätzliche Dinge geändert. Und zwar gibt es nun deutlich weniger Dateien, da ich die Daten je nach Typ zusammen fasse. z.B. wenn man sich einen alten Thread anschaut, dann wird die 1. Seite aus dem Zwischenspeicher geladen. Die restlichen Seiten kommen aber dagegen direkt aus der Datenbank. Die Ersparnis ist alleine deswegen enorm.

Zusätzlich werden dann aber noch andere Informationen aus der Datenbank geladen, die ich ebenfalls mit in diese eine Datei packe. z.B. vorheriger und nächster Thread-Button oder einfach nur die Anzahl an Beiträgen um die Seitenzahlen ausgeben zu können.

Wo also ein 100-Seiten Thread vorher über 100 Dateien resultierte, gibt es jetzt nur noch eine Datei.

Das gleiche habe ich auch bei den globalen Daten gemacht. z.B. welche Rechte man in welchem Forum hat, welche Smilies es gibt, welche Werbebanner, usw. Eben die Informationen, die auf jeder Seite benötigt werden. Diese Infos hatte ich früher auch in einzelnen Dateien abgelegt. Auch das ist nicht mehr der Fall. Es gibt nun einfach eine Datei namens "globaleDaten.txt" und die und nichts anderes muss jetzt nur noch geladen werden. Das dürfte im Vergleich zu früher auch deutlich I/O einsparen.

Als ich das gemacht habe ist mir auch gleich ein kapitaler Fehler aufgefallen, der die ganze Zeit vorhanden war und der relativ viel RAM verschwendete. Und zwar hatten wir bis gestern noch einen RAM-Verbrauch pro Seitenaufruf von 13 MB. Jetzt sind es nur noch 5 MB. Das klingt nicht viel, aber wenn 100 Seitenaufrufe durch Besucher parallel enstehen, dann sind das mal eben 1,3 GB vs. 500 MB RAM und das macht sich in jedem Fall bemerkbar.

Es kann gut sein, dass der Zwischenspeicher dazu führt, das manche Daten "hängen bleiben". Falls das der Fall ist bitte bescheid geben. Die Daten sind alle da, nur der Zwischenspeicher wurde dann nur nicht ordentlich aktualisiert.



Verfasst am: 18.04.2015, 13:26
zitieren

Scheint recht gut zu funktionieren. Das Forum fühlt sich heute deutlich schneller an als gestern. Die Dateien-Struktur ist auch deutlich übersichtlicher als früher:


Früher hatten wir in jedem Verzeichnis bis zu 1.000 Dateien und 10 Ordner. Jetzt haben wir bis zu 1.000 Dateien und 1.000 Verzeichnisse. Dadurch ist es jetzt nicht mehr so stark verwurzelt und wie man sieht ist der Thread-Cache ("topic/") auch nur noch eine Datei pro Thread.

Das einzige was mich wundert, dass jetzt wirklich jeder Thread einen Cache hat. Eigentlich dachte ich das so eingestellt zu haben, dass nur Threads, die älter sind als 30 Tage einen haben. Aber selbst dieser hier hat jetzt einen. Das schaue ich mir die Tage noch mal an.

Update: Nein doch nicht. Ist alles gut. Die Texte von den Beiträgen sind einfach so klein, dass sie kaum Einfluss auf die Dateigröße haben. Es werden aber wie gewünscht nur die Threads gespeichert, die älter sind als 30 Tage. Na bei 20 kB pro Cache kann ich ja wirklich noch weitere Daten dazu packen.

Mittlerweile enthalten im Thread-Cache:
  • vorheriger Thread
  • nächster Thread
  • die 10 Beiträge von der ersten Seite
  • 10 ähnliche Threads
  • Anzahl der Beiträge (zur Berechnung der Seitennummerierung)
  • Kopfdaten (Titel, Thread-Ersteller, usw.)
Was noch fehlt:
  • Benachrichtigungsstatus pro User (also wer alles den Thread abonniert hat)
  • Meldestatus (welche Beiträge in dem Thread wurden gemeldet)


 
cache-verzeichnis.png
cache-verzeichnis.png - [Bild vergrößern]

 2x  bearbeitet

Verfasst am: 18.04.2015, 21:19
zitieren

Eine Bestandsaufnahme wie lange Google brauchte unsere Seite zu laden. In ein paar Wochen vergleichen wir dann.

 
Screenshot_2015-04-18-23-17-55.png
Screenshot_2015-04-18-23-17-55.png - [Bild vergrößern]

Verfasst am: 19.04.2015, 23:14
zitieren

Der komplette Zwischenspeicher wird nun gerade neu erstellt. Grund dafür ist, dass ich mich von
serialize()
getrennt habe. Stattdessen setze ich nun auf
include()
, weil das im Vergleich deutlich schneller ist:
$data = array();
// read cache
if (!file_exists($cache_file . '_lock')) {
$data = @include $cache_file;
}
// if empty cache, read sql
if (!$data) {
// read sql
// if read sql, write cache
// set lock
if (!file_exists($cache_file . '_lock') && @mkdir($cache_file . '_lock')) {
// write cache
file_put_contents($cache_file, '<?php return ' . var_export($data, true) . '; ?' . '>')) {
// remove lock
rmdir($cache_file . '_lock');
}
}
return $data;

Den
file_exists()
beim Einlesen der Cache-Datei kann ich mir sparen. Fehler unterdrücke ich mit dem @-Operator. Das ist deswegen ausreichend, weil die Cache-Datei ja in 99,99% aller Fälle existiert. Nur beim aller ersten Mal wird sie generiert und danach ist sie immer vorhanden.

Um das Einlesen partieller Caches zu verhindern, setze ich auf einen Lock-Mechanismus auf Basis von
mkdir()
, den ich hier schon mal als Race Condition Safe ermittelt habe:
http://www.programmierer-forum.de/flock-alternative-mkdir-optimiert-t225288.htm

Was ich jetzt nur noch machen muss ist nach einer gewissen Zeit prüfen ob gesetzte Locks nicht gelöscht wurden. z.B. falls ein Script abgebrochen wurde, bevor der Lock wieder entfernt werden konnte. In dem Fall wird der Cache ignoriert und live aus der Datenbank ausgelesen, was natürlich nicht wünschenswert wäre. Sollte das der Fall sein, werde ich die Locks in ein eigenes Verzeichnis packen und deren Inhalt regelmäßig auf überalterte Locks in prüfen (z.B. älter als eine Minute).

 1x  bearbeitet
pn email
Gast 
19.04.2015, 23:14
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Caches / Zwischenspeicher wieder aktiv" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Zwischenspeicher System testweise installiert
Hallo, ich habe soeben einen Zwischenspeicher für Themen installiert. Dieser bewirkt, dass bei der normalen Ansicht von Themen, nicht auf die Datenbank zugegriffen wird um die Beiträge darzustellen, sondern auf einen Zwischenspeicher. Das...
[Ankündigungen]von mgutt
3
374
31.10.2009, 10:27
mgutt
aktiv sub anschließen
Hallo an alle, Ich habe vor mir in meinem Polo einen aktiven Sub einzubauen. + hole ich mir natürlich direkt von der Batterie und - aus dem Kofferraum von einem Masse Punkt Dann brauch ich natürlich noch den audio Eingang und remote. So wie ich schon...
von Don-joan
5
1.417
02.04.2012, 19:25
Zyres83
Wegfahrsperre aktiv
Bei meinem CRV Bj 2005 springt seit einem halben Jahr alle 2-3 Monate die Wegfahrsperre an. Honda ist ratlos. Könnte ein Teil des Steuergerätes sein aber ist nicht sicher. Nach eingabe des Codes zur Erkennung des Steuergerätes ist wieder alles normal. (...
[CR-V]von Eduard Reischl
0
467
09.05.2014, 09:16
Eduard Reischl
aktiv system
hallo wollte mal fragen ob jemand von euch schon mal ein system ohne weichen verbaut hat ? Habe einen digital prozessor alpine pxa h600 und wollte einfach mal fragen ob mir jemand gute tips geben...
von Oliver CH
6
398
29.04.2010, 10:40
Hifi Mafia
 Endlich ma aktiv! (!Crystal EG6!)
Souh wollt nur mal kurz ab merken des ich mehr oder weniger neu hier bin ! Hab einen Civic EG4 gekauft (unten eigtl gleich bild :p ) Für sage und schreibe 500eur :D Hat jetzt knapp 130.000km runter und wollt den noch mal ganz gerne feddig machen. Also...
Seite 2, 3, 4, 5, 6 [Civic 92-95]von Funky-G
51
2.858
20.11.2014, 19:16
V-one
 Aktiv Subwoofer (Highlevel)
Hi Leute! Hab mir gestern einen Fusion 1100 Aktiv Subwoofer zugelegt. Da leider keine Kabeln dabei waren musste ich es selbst in die Hand nehmen. Ich möchte meinen original Radio behalten daher auch der Gedanke, High Level Input. So ich hab alles...
[Car Audio, Apps, Bluetooth & Navigation]von NoTReaL
7
1.563
12.04.2015, 10:51
NoTReaL
Passiv oder aktiv?
Hallo zusammen ich habe folgendes Problem: Vor kurzem habe ich mir ein neues Auto gekauft (Peugeot 206 GTI), bei welchem schon eine Anlage verbaut ist. Jedoch war sie vorne an der Batterie abgehängt und die Sicherung des Verstärkers war defekt. Jetzt...
von Nitr0
4
398
15.03.2012, 17:26
Nitr0
Kleiner Aktiv-Subwoofer
Hallo zusammen, hat jemand erfahrungen mit diesem Subwoofer? http://www.xxlaudio.de/auto-hifi/subwoofer/gehaeuse-subwoofer/aktiv-subwoofer-rock-it-400-metall-gehaeuse-120-watt-flaches-gehaeuse/a-483/?ReferrerID=7 Würde ihn zur Dezenten...
Seite 2 [Car Audio, Apps, Bluetooth & Navigation]von JanZ
14
3.073
07.08.2010, 11:39
JanZ
Antennesplitter - Aktiv oder Passiv ?
Ich möchte ein Pioneer Radio mit DAB+ einbauen da wohl mein altes Pioneer 2600BT den Geist aufgibt. Nun möchte ich die Original verbaute Antenne dazu nutzen und einen Antennensplitter kaufen. Nun weiß ich nicht welchen ich kaufen soll. Aktiv oder Passiv...
[Civic 06-11]von Syn@FK3
1
236
25.11.2019, 06:57
direzza
Aktiv Subwoffer unterm sitz
Hallo leute vl. kann mir wer tipps geben will mir nen Subwoffer holen den ich unterm sitz beim del sol bringe , weiß da wer was ordentliches ? und wenn gleich welchen verstärker brauch ich dazu danke lg...
[Del Sol]von Mike-EG6
9
1.089
05.03.2011, 16:01
onehead
© 2004 - 2025 www.maxrev.de | Communities | Impressum |