Beste forumleden,

Ik gebruik een SQL query waarbij een hele tabel wordt opgevraagd.
Dus gewoon SELECT * FROM map.
Ik krijg zo'n 4200 rijen terug, wat nogal lang duurt.

Die rijen worden dan weergegeven op een webpagina na omzetting in XML.

Is er een manier om ervoor te zorgen dat de rijen die niet gewijzigd zijn te 'cachen' en de andere die wél gewijzigd zijn te updaten?

Groetjes en bedankt
Ik kan me niet indenken dat een simpele SELECT-querie met ruim 4.000 records lang duurt. Zit de traagheid niet in het renderen van de HTML-pagina?
Dag Ariën, bedankt.
Je hebt gelijk als ik de query in PHPMyAdmin doe duurt het maar een klein secondje.

De gegenereerde XML pagina is wel een megabyte groot en het duurt meer dan 2 seconden om ze te genereren, terwijl ik lokaal werk (127.0.0.1).

Is er een manier om alleen de rijen die geüpdatet zijn te herladen en de rest te 'cachen'?
Je kunt bijhouden wanneer de xml is gemaakt en wanneer de aanmaakdatum van de nieuwe records later ligt dan de laatste keer dat de xml is bijgewerkt die records aan de xml toevoegen.

Maar wat voor script gebruik je voor omzetten van query resutlaat naar xml?
Inderdaad, om hier antwoord op te kunnen geven moeten we meer weten over:
- de structuur en inhoud van je data
- de code die de XML bakt

Enne, een XML bestand van één megabyte? Dat is een hoop tekst. En wellicht een beetje zwaar voor een browser? Dit bestand cachen lijkt een goed idee, zodat deze niet elke keer opnieuw gegenereerd hoeft te worden. Een beter idee is wellicht nog kijken of je de bestandsgrootte (flink) kunt terugdringen.
Ik heb de bestandsgrootte kunnen verkleinen naar 280 kb.
Ik gebruik Symfony om een XML response te genereren. Dit is mijn controller.


    public function geoxmlAction() {
        $em = $this->getDoctrine()->getManager();
        $repository = $em->getRepository('MapBundle:Map');
        
        $markers = $repository->findAll();
        
        $response = new Response($this->renderView('MapBundle:Default:geoxml.xml.twig', array(
                    'markers' => $markers)));
        $response->headers->set('Content-Type', 'application/xml; charset=utf-8');
        $date = new DateTime();
        $date->modify('+6000 seconds');
        $response->setExpires($date);
        return $response;
    }


Dat geeft een XML bestand zoals dit:


<ms>
<m id="1" owner="Laurens" lat="45" lng="-111" faction="f"/>
<m id="2" owner="Lorenzo" lat="47" lng="-121" faction="e"/>
<m id="4" owner="local tribes" lat="83" lng="-85" faction="u"/>
<m id="5" owner="local tribes" lat="83" lng="-83" faction="u"/>
</ms>


Maar dan 4200 lijnen.

Het twig bestand ziet er zo uit;


<ms>
{% for marker in markers %}
<m id="{{ marker.id }}" owner="{% if marker.owner %}{{ marker.owner }}{%else%}local tribes{%endif%}" lat="{{ marker.lat }}" lng="{{ marker.lng }}" faction="{{ marker.faction }}" />
{% endfor %}
</ms>


Het probleem is dat ik ten allen tijde een geüpdate versie moet krijgen met alle 4200 rows.
Al overwogen om een ander format te gebruiken? Bijvoorbeeld JSON?

Reageren