php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.10.2008, 10:01  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard Umsetzung eines eigenen Caching Algorithmus

Servus,

ich stell mir grad die Frage wie man bei einen Template System den Caching Algorithmus effizient umsetzen kann. Da ich mir nicht vorstellen kann das eine ständige Überprüfung auf Änderung oder ermittelns eines HASH-Wertes performanter als eine Neu-Generierung ist.
Vielleicht denk ich dafür auch einfach nur viel zu kompliziert deshalb wollte ich diese Diskussion mal anstoßen.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.10.2008, 10:36  
cortex
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von HStev Beitrag anzeigen
Da ich mir nicht vorstellen kann das eine ständige Überprüfung auf Änderung oder ermittelns eines HASH-Wertes performanter als eine Neu-Generierung ist
habe mir über dieses problem auch schon das ein oder andere mal gedanken gemacht... es wird ja oft als das killer-feature (vor allem bei frameworks) dargestellt. ich denke, es kommt auf den jeweiligen aufwand an, i.e. auf den umfang der angeforderten ressource:
prüfen, ob sich angeforderte ressource im cache befindet / ggfs. auslesen vs. seite komplett "neu" aufbauen incl. php-parsing und sql-queries.

darüber hinaus habe ich bis dato noch keine caching strategie gesehen, die durch intelligenz (kein statisches expire) und schonung der ressourcen (hdd-zugriffe, ram-verbrauch) glänzte. vielleicht lässt sich das auch nicht miteinander vereinbaren...

anderslautende meinungen / erfahrungen würden mich ebenfalls interessieren.

cx
  Mit Zitat antworten
Alt 21.10.2008, 11:38  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Ich halte es für die meisten Systeme für die falsche Strategie, on-demand zu überprüfen ob der Cache noch gültig ist, sowas macht meiner Meinung nach eben nur Sinn bei Zeit-basierten Caches, weil wie du schon sagst, eine Überprüfung meistens auch einiges an Zeit braucht.

Sinnvoller ist es eben den Cache zu löschen, wenn er veraltet ist und zwar dort wo die Daten verändert werden.
Man muss sich nur ein System für die Tags überlegen, wie man seine Inhalte im Cache verwaltet, ihnen z.b. Modul-abhängige / Eintrags-abhänige Tags verpassen und sobald jemand Inhalte verändert, neuen Eintrag erstellt, Eintrag verändert, etc werden einfach alle Einträge im Cache mit den passenden Tags gelöscht, so verschiebt man die komplette Cache-Logik an einen Ort wo etwas mehr Rechenzeit nicht unbedingt so stark auffällt (abhängig vom System, aber im Normalfall hat nutzt man ja einen Cache in Systemen wo es deutlich mehr Lese als Schreib-Zugriffe gibt und Daten eben durchaus längere Zeit nicht verändert werden.)
robo47 ist offline   Mit Zitat antworten
Alt 21.10.2008, 13:50  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also ich denke schon das Caching, auch wenn der Cache auf "expire" geprüft wird, einen Geschwindigkeitsvorteil bringen kann.

Bei einer Startseite werden mehrere Querys abgefeuert die aus einer recht großen Datenmenge lesen, dazu kommen noch JOINs auf mehrere andere Tabellen. Und das gleich mehrfach. Dazu kommen noch Kalender, Useronline, Werbung/Bannerrotation und so weiter.
Das sind locker > 10 Querys die ne relativ große Datenmenge selektieren. Wenn da 200 User gleichzeitig surfen zwingt das die Datenbank in die Knie. Der Webserver läuft ohne große Probleme, nur die Datenbank schafft einfach nicht so viel.

Und da bringt Caching doch einiges, denn dann hast du vlt. 200x eine Datei einlesen, aber es fallen 10 Querys pro Aufruf ab, dass sind rund 2000 Querys alle paar Sekunden. Und der Cache muss ja nicht mal sehr lange existieren, es reicht ja wenn er alle 1-2 Minuten neu erstellt wird ... dann hat man jede Minute einmal 10 Querys die den Cache generieren ... im Gegensatz zu ich sag mal 2000-4000 Querys pro Minute die sonst abgefeuert würden.

Aber sicher ist es praktischer wenn ein Cache gar nicht erst überprüft werden muss. Allerdings stell ich mir das mit dem Taggen durchaus recht schwierig vor. Vor allem wenn bestimmte Seiten aus sehr vielen Daten (von verschiedenen Quellen) existieren kommen da schnell mal einige Tags zusammen, wenn man da mal nicht was übersieht.

Ich hätte noch eine andere Idee. Man verwendet einen Cache der eben direkt angezeigt wird ohne überprüft zu werden, allerdings wird bei der Generierung des Caches die expiretime z.b. in eine Datenbank geschrieben, alle paar Minuten läuft dann ein Cronjob der alle Caches löscht die eben abgelaufen sind. Dann hat man vielleicht eine Ungenauigkeit von der Zeit die der Cronjob läuft aber ich denke das ist bei einem Cache kein Problem ob er jetzt 5 Minuten länger oder kürzer existiert.
Flor1an ist offline   Mit Zitat antworten
Alt 21.10.2008, 16:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wieso eigentlich expired prüfen? Beim Namen generieren einfach ein Modulo auf den aktuellen Timestamp mit in den Namen nehmen. Das erste Script, das auf das neue leere Cachefile trifft schreibt es dann.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 21.10.2008, 16:59  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Wieso eigentlich expired prüfen? Beim Namen generieren einfach ein Modulo auf den aktuellen Timestamp mit in den Namen nehmen. Das erste Script, das auf das neue leere Cachefile trifft schreibt es dann.

Hast ein Beispiel dazu? Ist etwas schwer verständlich wie du das meinen könntes.
Warum ein Modulo auf den Timestamp? Vor allem mit welchen Wert?
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 21.10.2008, 17:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

1/ Timestamp ist ein INT.
2/ Modulo Timestamp auf Sekunden entsprechend 14 Tagen
3/ Dann ändert sich alle 14 Tage das Ergebnis
4/ Dieses Eergbnis + weitere relevante (statische) Daten benutzen und bspw. über md5 nen Hash daraus erstellen
5/ Dieser Hash ist der Filename
6/ Filename verfällt automatisch, weil irgendwann ein neuer Dateiname gültig ist
7/ CRON muß aufräumen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 21.10.2008, 17:11  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
2/ Modulo Timestamp auf Sekunden entsprechend 14 Tagen
3/ Dann ändert sich alle 14 Tage das Ergebnis

hast du da nicht n denkfehler? Der Wert ändert sich doch continurierlich...
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 21.10.2008, 17:22  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Deshalb doch Modulo.
time () % 3600 sollte jede Stunde nen neuen Wert erzeugen, oder? Oder Ganzzahldivision? Jetzt bin ich grad verwirrt.

[edit]
Stimmt: Ganzzahldivision!
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (21.10.2008 um 17:25 Uhr).
nikosch ist gerade online   Mit Zitat antworten
Alt 21.10.2008, 17:44  
Neuer Benutzer
 
Registriert seit: 17.10.2008
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
Robsen befindet sich auf einem aufstrebenden Ast
Standard

Bei non-expire-caching empfinde ich es als sinnvoller, den Cache dann neu zu schreiben, wenn sich die entsprechende (zu cachende) Seite verändert.

Hier gibt es nun 2 Möglichkeiten:

Bei Verändern der entsprechenden Seite...
1) wird der Cache für diese Seite gelöscht... das Cachefile wird beim ersten darauf folgenden Zugriff generiert.
2) wird direkt auch das Cachefile neu geschrieben.

Ich empfinde Methode 1 als bequemer, aber das ist Ansichtssache.

Grüße
Robsen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Umsetzung von Formular-Script mit vordefinierten Feldern gamerphil PHP Tipps 2008 6 06.10.2008 11:31
OOP Umsetzung cycap PHP-Fortgeschrittene 26 17.06.2008 19:13
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
Probleme bei der Umsetzung Kein Genie PHP Tipps 2007 3 02.03.2007 15:43
Algorithmus für Suchwortrelevanz tinchen PHP Tipps 2006 3 06.12.2006 01:27
Algorithmus, verschlüsselungssystem notyyy PHP Tipps 2006 7 22.08.2006 09:08
[Erledigt] Smarty: Ist Caching sinnvoll? PHP-Fortgeschrittene 10 30.11.2005 21:46
register_globals, umsetzung, form, edit sql TimmaY PHP Tipps 2005-2 9 09.08.2005 22:31
[Browsergame] Hilfe bei Umsetzung Beitragsarchiv 28 05.03.2005 09:16
[Erledigt] Algorithmus für binomische Formeln... PHP-Fortgeschrittene 19 02.12.2004 09:03
Hilfe bei Umsetzung Datenbankanwendung PHP Tipps 2004 1 03.11.2004 20:24
Umsetzung eines Pluginsystems /tmp PHP-Fortgeschrittene 18 14.09.2004 22:58
[Erledigt] template-Systeme & caching PHP Tipps 2004 27 04.09.2004 14:03
Algorithmus Bestimmung d. äußeren Polygons im 2D-Punktfeld? tapferesschneiderlein Off-Topic Diskussionen 4 31.08.2004 15:12
Caching Performance PHP-Fortgeschrittene 2 13.07.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php eigener cache, browsergame algorithmus, cache algorithmus, eigener verschlüsselungsalgorithmus php, eigenen algorythmus, timestamp php cache, eigenen algorithmus, php caching algorithm, modulo timestamp cache, eigenen algorithmus php eigenen, caching algorithmen php, caching strategien php, cache algorithmen php, php cache umsetzten, ständige überprüfung php, php caching strategie, php cache md5, php cache algorithmus

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum