[oop] objecten meegeven?
Pagina: « vorige 1 2 3 4 volgende »
@Ward: thanks!! Eindelijk een praktijk voorbeeld. Het voorbeeld van de file cache is me helemaal duidelijk. Wat betreft het voorbeeld van de databse cache... ik snap deels wat je bedoelt, alleen je laatste gedeelte begrijp ik niet "een compleet mediabestand op te slaan in de database". Je had al een mediadatabase schrijf je eerst, en daarna schrijf je dat je een mediabestand hebt opgeslagen? Wat is het verschil tussen beiden?
Ozzie PHP op 15/04/2013 14:21:04:
Erwin, jammer dat je me niet 1 concreet voorbeeld kunt noemen omdat ik dan met ja maar's zou komen. Beetje een flauwe reactie. Ik vraag al diverse malen om 1 voorbeeld. Ik ben geen opgeleid IT'er en ik vraag gewoon om een simpel voorbeeldje. That's all. Maar goed, als je mij geen voorbeeld kunt noemen, dan wijt ik dat aan het feit dat je zelf ook geen voorbeeld weet of kunt bedenken.
Ik kan je meerdere voorbeelden geven. Als je me inmiddels een beetje kent dan weet je dat ik niet zomaar iets zeg. Ik kan fouten maken, ik kan dingen verkeerd hebben, maar ik zeg nooit iets zonder dat te kunnen onderbouwen. Nu ook niet.
Dat ik het nu niet doe is omdat ik er geen zin in heb. Heeft niets te maken met niet kunnen, maar met niet willen. Het voorbeeld is namelijk totaal niet van belang. Het gaat erom dat er situaties zijn die om database cache vragen. Wanneer dat is kom je vanzelf wel achter. Als je een beetje slimme programmeur bent dan leer je te herkennen wanneer een uitzondering op kan treden. Je gaat niet van te voren proberen alle uitzonderingen op te noemen en in welke situaties die zich voor kunnen doen. Dat is pure tijdverspilling, wat jij nu dus doet. Het feit DAT het kan is hier van belang, niet wanneer. Dat is denken in abstracties. Ik hoop dat je dat inziet, veel belangrijker dan een simpel voorbeeldje.
P.S. ik ben ook geen opgeleide IT-er, daar heeft het ook weinig mee te maken.
Erwin, deels heb je gelijk. En ja je hebt gelijk dat het belangrijk is om te weten DAT het kan. Maar als ik niet weet wanneer ik het een of het ander moet toepassen, dan kan ik dus ook geen juiste keuze maken. Dus vandaar dat ik om een voorbeeldje vraag. Als je iets in een database cachet dan neem ik aan dat je een tabel hebt met 2 velden: de cache-key en de value. Maar bij bestanden heb je dat ook, maar dan is de key de bestandsnaam. Beiden kunnen in dit geval dus precies hetzelfde. Dus vandaar mijn vraag wat het verschil is en in welke situatie je wat gebruikt. Ik vind het jammer dat je jouw kennis niet wil delen, maar toch bedankt voor je reactie.
Wat je nu doet met je voorstelling is dat je jezelf beperkt tot HOE een cache geimplementeerd wordt. In DIE situatie zal je inderdaad niet snel een database cache gaan gebruiken nee. Maar er zijn veel meer implementaties mogelijk. Wat als de cache content afhangt van twee velden bijvoorbeeld en niet alleen van die ene key, is een filecache dan nog steeds makkelijker? -> leer je de uitzondering al ontdekken?
"Wat je nu doet met je voorstelling is dat je jezelf beperkt tot HOE een cache geimplementeerd wordt. In DIE situatie zal je inderdaad niet snel een database cache gaan gebruiken nee."
Dit is de spijker op z'n kop. Als ik niet weet hoe en waarom ik iets moet implementeren, dan zal ik dat inderdaad niet gauw doen. Dat is toch logisch? Als je voor het eerst gaat autorijden, zal er ook iemand moeten zijn die jou uitlegt dat je op het gaspedaal moet trappen om vooruit te komen en dat je van z'n 1 naar z'n 5 schakelt om meer snelheid te maken. Precies zo wil ik graag weten op welke manier ik cache moet gebruiken.
"Wat als de cache content afhangt van twee velden bijvoorbeeld en niet alleen van die ene key, is een filecache dan nog steeds makkelijker?"
Nu noem je voor mij voor het eerst een concreet voorbeeld. Helaas snap ik niet wat je ermee bedoelt. Wat bedoel je met dat de cache content afhangt van 2 velden?
Ozzie PHP op 15/04/2013 15:05:36:
Als je voor het eerst gaat autorijden, zal er ook iemand moeten zijn die jou uitlegt dat je op het gaspedaal moet trappen om vooruit te komen en dat je van z'n 1 naar z'n 5 schakelt om meer snelheid te maken.
Dat is heel iets anders. Dat zijn zaken die je gewoon stap voor stap uit kunt leggen. Dat kan in dit geval helemaal niet, juist omdat elke situatie anders is. Juist daarom heeft een voorbeeld geven zo weinig zin, reden waarom heb ik boven al uitgelegd.
Ozzie PHP op 15/04/2013 15:05:36:
Precies zo wil ik graag weten op welke manier ik cache moet gebruiken.
Dan moet je nu stoppen. Je zou inmiddels met je framework toch wel door moeten hebben dat er geen blauwdruk is die je met een paar simpele ja/nee vragen uiteindelijk voor kan leggen wat je in welke situate moet doen. Dat zou namelijk betekenen dat voor elke situatie die je kan vinden al een voorbeeld bestaat. En dat betekent weer dat eigenlijk alles al een keer gedaan is en dat er geen enkele innovatie meer kan plaatsvinden. Dat is gelukkig niet zo.
Ozzie PHP op 15/04/2013 15:05:36:
Nu noem je voor mij voor het eerst een concreet voorbeeld. Helaas snap ik niet wat je ermee bedoelt. Wat bedoel je met dat de cache content afhangt van 2 velden?
De cache is niet afhankelijk van 1 key, maar van 2. Wat moet ik daar nu verder aan uitleggen? Op basis van 2 input waardes bepaal je wat je toont, niet op basis van 1.
latitude/longitude of eigenaar/kijker, of x/y, of....
Jij ziet cache nog steeds als de volledige content van een pagina geloof ik, daar zit waarschijnlijk dan al het probleem. Cache is gewoon data tijdelijk opslaan zodat je het niet elke keer opnieuw hoeft aan te maken. WAT het is is daarin niet gedefinieerd. Heck, zelfs je $_SESSION is al een vorm van cache.
Hmmm naja... ik zoek het verder zelf wel uit dan.
Je moet weten wat de voor- en nadelen van verschillende cache technieken zijn en dan ga je per situatie kijken of de voordelen hoger op wegen dan de nadelen. Als je bijv. 3 bestandsnamen gaat cachen dan kun je dat beter in een file doen, het is sneller en je hoeft geen ingewikkelde relationair gedoe te gebruiken.
Maar ga je bijv. routes cachen van punt A naar punt Z dan zullen de voordelen van een relationaire database weer opwegen tegen de snelheid.
Merk op dat dit natuurlijk ook weer per situatie afhangt. Stel je hebt een simpel gebouw waarin maar enkele routes mogelijk zijn dan ga je dit natuurlijk niet in een database doen. Maar werk je toevallig bij de ANWB dan is het geweldig als je de beschikking hebt over een database cache met routes.
Caching is typisch iets dat je pas goed kunt als je er een concreet probleem mee wilt aanpakken. In mijn voorbeeld ging het om een fotodatabase, maar ik ken bijvoorbeeld ook iemand die een ander cachemechanisme nodig had voor mp3's. (Nee, niets illegaals: opnamen van telefoongesprekken.)
Wouter J op 15/04/2013 15:46:38:
Je moet weten wat de voor- en nadelen van verschillende cache technieken zijn en dan ga je per situatie kijken of de voordelen hoger op wegen dan de nadelen.
Dát dus, met een noot die je misschien niet graag hoort: de snelste cacheoplossingen zijn PHP-loos :)
@Ward:
"Nee, niets illegaals: opnamen van telefoongesprekken"
Dat klinkt gelukkig ook helemaal niet illegaal :-)))
NOG 1 LAATSTE VRAAG:
Ik denk op dit moment dat je alles kunt cachen op basis van acties. Bijvoorbeeld, er wordt een nieuw nieuwsbericht toegevoegd aan de database en we genereren een nieuw cachebestand. We voegen een nieuw product toe en we genereren een nieuw cache bestand met de laatste 10 toegevoegde producten enz. Echter, ik weet ook dat er cachers zijn die een bestand cachen op basis van tijd. Bijv. als het bestand ouder is dan een uur, maak dan een nieuw cache-bestand aan. Nu vraag ik me af of het cachen op basis van tijd zinvol is. Kun je niet alles ondervangen door te cachen op basis van een actie? (bijv. een nieuw item dat wordt toegevoegd aan de database)
Gewijzigd op 15/04/2013 16:44:44 door Ozzie PHP
Ja, dat is juist, maar dan moet je dus het patroon van die acties herkennen en weten wat de uitzonderingen zijn. Als je bijvoorbeeld weet dat er ná 18:00 uur niemand meer aan live content werkt, dan kun je de hele avond en nacht een cache gebruiken, tot de volgende ochtend.
Maar zijn er situties waarin het wel nuttig kan zijn om op tijd te cachen in plaats van op een actie? Ik kan me zo 1, 2, 3 niks bedenken, maar jullie misschien wel?
Ozzie PHP op 15/04/2013 16:52:43:
Maar zijn er situties waarin het wel nuttig kan zijn om op tijd te cachen in plaats van op een actie? Ik kan me zo 1, 2, 3 niks bedenken, maar jullie misschien wel?
Tijd is juist zo'n beetje het voorspelbaarste en regelmatigste patroon.
Stel dat je "fooprovider" elk heel uur een geactualiseerd "foobericht" post, dan kun je dus tot :59 uur cachen en om :00 uur je cache updaten voor het komende uur.
Oké dat kan inderdaad... maar waarom bijv. niet de cache updaten nadat de fooprovider een bericht heeft gepost? Is dat niet efficiënter? (de actuele cache is niet meer geldig dus we maken een nieuwe)
Ozzie PHP op 15/04/2013 17:14:43:
Oké dat kan inderdaad... maar waarom bijv. niet de cache updaten nadat de fooprovider een bericht heeft gepost? Is dat niet efficiënter? (de actuele cache is niet meer geldig dus we maken een nieuwe)
De snelste cache is een cachemechanisme dat zegt: gebruik een Foo uit de cache. De enige uitzondering die zo'n cache kent, is: er zit geen Foo in de cache. Daar heb je geen PHP voor nodig, want een memcache en filecache kunnnen dat nu juist heel goed.
Kijk eens naar een van de snelste cachemechanismen die we kennen: de browsercache. Als je tegen een browser zegt "je mag dit plaatje voor eeuwig opslaan want het verandert nooit" heb je zelfs anno 2013 met glasvezelverbindingen een supersnelle site. Wat eenmaal in de cache zit, hoef je namelijk niet meer opnieuw op te halen.
Door dit soort wisselwerkingen staat een cache nooit op zich. Het cachemechanisme voor een foto kan er anders uitzien dan het cachemechanisme van een pagina met die foto.
Misschien rare vraag... maar een filecache maak je toch met PHP?
Ik snap wat je bedoelt met browsercache, alleen met mijn vraag bedoelde ik wat anders.
Ik ga nu eerst een filecacher maken, maar ik vraag me af of ik daar een optie in moet bouwen om een bestand voor een bepaalde tijd te cachen. Ik kan me op dit moment geen situatie bedenken waarin je zou zeggen, cache iets voor xxx minuten. Volgens mij kun je alles afvangen met "acties": er wordt pas een nieuw cachebestand gemaakt op het moment dat actie foo plaatsvindt. Dat kan bijv. zijn dat er een niew product wordt toegevoegd aan de database. Op dit moment kan ik me dus geen situatie voorstellen waarbij je iets op basis van tijdsduur zou willen cachen, maar misschien zie ik nu iets gruwelijks over het hoofd?????
Mijn globale idee om iets te cachen is als volgt (aan de hand van een "top 5 met nieuwe producten".
Code (php)
1
2
3
4
5
2
3
4
5
- is er een cachebestand met de laatste 5 producten aanwezig?
ja: laad en gebruik de gegevens uit het cachebestand
nee: laad en gebruik de gegevens uit de database en maak tevens een nieuw cachebestand
- verwijder het cachebestand zodra er een nieuw product aan de database wordt toegevoegd
Dit zorgt er voor dat er automatisch (in de vorige stap) een nieuw cachebestand wordt aangemaakt.
ja: laad en gebruik de gegevens uit het cachebestand
nee: laad en gebruik de gegevens uit de database en maak tevens een nieuw cachebestand
- verwijder het cachebestand zodra er een nieuw product aan de database wordt toegevoegd
Dit zorgt er voor dat er automatisch (in de vorige stap) een nieuw cachebestand wordt aangemaakt.
Op- en aanmerking zijn zeer welkom!
Gewijzigd op 15/04/2013 17:52:49 door Ozzie PHP
Ozzie PHP op 15/04/2013 17:52:19:
Op dit moment kan ik me dus geen situatie voorstellen waarbij je iets op basis van tijdsduur zou willen cachen, maar misschien zie ik nu iets gruwelijks over het hoofd?????
Jawel, legio voorbeelden. Veel klanten willen bijvoorbeeld rond de jaarwisseling de copyrightvermelding in footers aangepast zien: © 2013 moet © 2014 worden. En de jaarwisseling op om 24:00 uur 's nachts is meestal een tijdstip waarop je niet handmatig wilt ingrijpen.
Ward... dat is onzin natuurlijk. Een beetje goede site echo'd gewoon date('Y'). Cachen is voor zoiets niet nodig.
- Raoul - op 15/04/2013 19:03:34:
Wel als je static memcached webpagina's hebt. Ik zie het punt ook niet zo (omdat het jurisch onzin is), maar er zijn opdrachtgevers die denken dat een copyrightvermelding het huidige jaar moet noemen :(Ward... dat is onzin natuurlijk. Een beetje goede site echo'd gewoon date('Y'). Cachen is voor zoiets niet nodig.
Anyhow... als we dan de memcached pagina's even vergeten, maar we het puur hebben over het cachen van array's en/of gegevens uit de database... zijn er dan situaties te bedenken waarbij je je cache zo zou moeten instellen dat deze maar een xx aantal minuten of xx aantal dagen geldig is, of kun je alles triggeren via acties zoals ik hierboven al eerder heb beschreven?
Ik vraag dit omdat ik wil weten of ik in mijn cache class een optie moet inbouwen waarmee je iets voor een bepaalde tijd kunt cachen. Op dit moment zie ik er het nut niet van, maar iemand anders wellicht wel. Graag jullie reactie en alvast bedankt.