[MySQL client] Table 'cachen'

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
In een paar applicaties wil ik een table cachen in de app zelf. Wat is de beste manier om dit te doen?
Elke seconde/minuut de hele table reselecten is een optie, maar met veel overhead.
Updates zien door een modified timestamp bij te houden zou kunnen, maar wat doe ik dan met deletes?

  • MisterData
  • Registratie: September 2001
  • Laatst online: 10-05 19:07
Als je zeker weet dat je app de enige is die op de database werkt zou je iets van IPC kunnen gebruiken om tussen de apps een berichtje als het ware rond te sturen als je iets hebt aangepast oid... :)

Verwijderd

Geen MySQL gebruiken?
Wanneer een DB triggers ondersteunt, kun je daar allerlei leuke dingen mee doen, zoals bv. bijhouden of er op een tabel wijzigingen zijn opgetreden. En InterBase/FireBird heeft zelfs een eigen EventAlerter systeem om de overige aangesloten clients te informeren over wijzigingen.

Bij MySQL zul je client side of in een middle layer zelf iets moeten verzinnen.
In Afterlife in "[VB6]Planbord ontwikkelen" heb ik een beetje uit de doeken gedaan hoe ik dat zelf heb opgelost. Misschien heb je daar iets aan?

offtopic:
Hoe insert ik zo'n bookmark gemakkelijk?

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Voor een 'custom' app is dat een goede optie, maar voor een app die in een 'standaard' omgeving op internet servers moet draaien is MySQL een van de weinige keuzes.

Een middle-end zou een goede optie zijn, maar volgens mij is de communicatie tussen een middle-end en bijvoorbeeld PHP niet zo simpel.

[ Voor 22% gewijzigd door Olaf van der Spek op 07-03-2005 19:20 ]


  • MisterData
  • Registratie: September 2001
  • Laatst online: 10-05 19:07
Ligt aan je MySQL versie, maar de nieuwste kunnen ook al iets van triggers doen geloof ik :)

Verwijderd

OlafvdSpek schreef op maandag 07 maart 2005 @ 19:18:
Een middle-end zou een goede optie zijn, maar volgens mij is de communicatie tussen een middle-end en bijvoorbeeld PHP niet zo simpel.
Je had er niet bijverteld dat 't een browser based client zou zijn. :)
In dat geval is het 'pushen' van informatie ("Yo! tabel xyz is gewijzigd!") wat lastiger. en moet je uitwijken naar bv. Java applets, ActiveX of proprietary dingen als Flash.

In situaties waar zo'n event broker niet mogelijk of niet handig is, gebruik ik meestal een tabelletje dat bestaat uit 2 velden: tabelnaam en nummer van laatste wijziging (die wordt steeds opgehoogd). De clients houden bij wat het laatste nummer was, en als die afwijkt van het nieuwe nummer, wordt de tabel opnieuw ingelezen. Ik laat die (Delphi-)clients dat elke 5 seconden checken, maar in PHP zou je dat natuurlijk ook kunnen doen bij elke page refresh.

Blijft alleen het probleem van het ophogen van die nummers i.c.m. MySQL. Met een DB die triggers ondersteunt is dat een eitje, maar ja...
Zonder triggers zit je vast aan of een middle layer (SOAP service of zo), of een client side actie. Elke client zorgt ervoor dat 'ie na iedere update/insert/delete op een tabel het volgnummer voor die tabel ophoogt, en de andere clients weten dan bij de eerstvolgende check dat ze de gegevens opnieuw moeten ophalen.
Niet zo waterdicht als 'push' technologie, maar over het algemeen prima werkbaar. :)

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op maandag 07 maart 2005 @ 20:59:
Je had er niet bijverteld dat 't een browser based client zou zijn. :)
In dat geval is het 'pushen' van informatie ("Yo! tabel xyz is gewijzigd!") wat lastiger. en moet je uitwijken naar bv. Java applets, ActiveX of proprietary dingen als Flash.
Dat is het ook niet. De cache zit in een C++ app, maar PHP scripts updaten soms (ook) tables.
In situaties waar zo'n event broker niet mogelijk of niet handig is, gebruik ik meestal een tabelletje dat bestaat uit 2 velden: tabelnaam en nummer van laatste wijziging (die wordt steeds opgehoogd). De clients houden bij wat het laatste nummer was, en als die afwijkt van het nieuwe nummer, wordt de tabel opnieuw ingelezen. Ik laat die (Delphi-)clients dat elke 5 seconden checken, maar in PHP zou je dat natuurlijk ook kunnen doen bij elke page refresh.
De hele table inlezen bij elke update kan ook nog veel werk zijn.

Verwijderd

OlafvdSpek schreef op maandag 07 maart 2005 @ 21:03:
Dat is het ook niet. De cache zit in een C++ app, maar PHP scripts updaten soms (ook) tables.
Tja... Dan zit er denk ik niets anders op dan of alle clients aan te passen, of een 'middle man' in het leven te roepen die de insert/update/delete queries ontvangt, eruit filtert wat de tabel is, de query uitvoert, en het tellertje ophoogt...
De hele table inlezen bij elke update kan ook nog veel werk zijn.
Is 't ook, en dat vonden de klanten ook. Vandaar die EventBroker oplossing. :)
Pagina: 1