Hvert 2 min kør 10 row ind af gangen i xml fil fra databasen
Hej Jeg har et spørgsmål jeg håber i har en løsning på. Har lavet function til at ligge data på xml fil fra databasen, da det skal bruges i et feed. Det jeg har problemer med at jeg højst han tage en måned a gangen og så bruger den for meget memory, har 256M at gøre med så skal have det til at spille. Som for i kan se hvad der er lavet indtil videre er lige her: $doc = new DOMDocument('1.0', 'UTF-8');
Det jeg har brug for at løse problemet er at tage lidt af gangen, og ikke overskrive det der er i xml filen, da det så ikke giver mening at have et cronjob kørende til den skal tage 10 row ind hvor den så aldrig kommer videre end de 10. Det skulle helst køre sådan 2 min = 10row - 2 min = 20row og så fortsætte der op af. Har set andre gør det når de skal have en stor mængde data ud. så den ikke mangler memory. Jeg ved bare ikke hvordan har søgt en del men finder ikke lige det jeg har brug for, ellers er jeg bare ikke så god til at lede det rigtige sted ;-)
Håber i vil kigge på det, og komme med nogle forslag til at løse det.
Det må jeg lige prøve, så kan jeg se om hvor mange måneder den kan gå tilbage. Prøver lige XmlWriter Tak for de forslag, jeg vender lige tilbage når jeg har prøvet det af.
Så prøvede jeg den siger Fatal error : Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes Har ikke mulighed for sætte memory op, da det er på en hosting service. og de har nogle regler som jeg er nød til at forholde mig til. Er der nogen anden mulighed?
arne_v: Skriver XmlWriter altid ud til fil? At dømme efter dokumentationen, kan den også skrive til memory, som så kan tømmes med xmlwriter_output_memory(...)
Mit hent af data ser sådan ud: $getJsonData = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT ID, post_date, nw_posts.guid, nw_posts.post_parent, nw_posts.post_title, nw_posts.post_type, nw_postmeta.post_id, nw_postmeta.meta_value, nw_postmeta.meta_key FROM nw_posts INNER JOIN nw_postmeta ON ID = nw_postmeta.post_id WHERE post_date BETWEEN %s AND %s", array($start, $stop)));
Den her post_date BETWEEN %s AND %s var for at løse antallet af produkter den skulle igennem.
Har omkring 6000 produkter som har ialt 27000 varianter. Så der er en del der skal køres igennem den ene tabel nw_postmeta.post_id er varianterne nw_posts er master produkterne.
Hej igen Ja der må da være noget galt^ $CountProductsData = $wpdb->get_results($wpdb->prepare("SELECT post_type FROM nw_posts WHERE post_type = %s", array('product')));
var_dump(count($CountProductsData));
Nu har jeg gjort simpelt og bare tjekke type og der kommer den også med den fejl:
Og det er uden at forsøge at ligge det i en fil.
Fatal error : Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes) i
Har en anden løsning som måske vil virke hvis jeg ikke kan få det andet til at virke lave en table med de colums jeg skal bruge og hente det fra tabellerne Hvis det da ikke tager for mange resurcer så jeg står med det samme problem igen.
Hov undskyld kan jeg godt se i ikke får så meget ud af. Prøvede $con = $wpdb->__get('dbh'); Hjalp ikke på det, samme problem stilling men kan være jeg havde gjort noget forkert.
Det med limit hvordan får jeg det til at loop igennem rigtigt så der kommer en pause imellem loopene kan godt se det vil være smart men lige at få den til det, ville være nød til at trykke run hver gang det var nået frem til de feks. 1000 og så offset 1001 til 2000, Er der noget jeg kan gøre der for det ville være fedt. :)
acore Jeg forsøger ikke at være uhøflig eller regner med i bare kan sige hvad der er galt. Forsøger så godt jeg kan er ikke så god til at forklare. Jeg syntes det er fedt i vil hjælpe mig.
Acore jeg troede der skulle være lidt pause og noget flush inden det næste loop derfor spurgte jeg til det.
arne_v Fedt man, det så det er på den måde jeg kan gøre det nu så. Det skal testes af. Den gode trofaste indstilling :D Kunne næsten kun huske wordpress metoden.
Det er ikke fordi, jeg synes du er uhøflig. Men det hjælper, at poste kode og vise hvilken respons du får, i stedet bare at skrive, at det ikke virker.
arne_v Fedt jeg prøver det af :-) acore Helt sikkert ligger lige noget kode op hvis jeg ikke får det til at virke. Jeg syntes det er så fedt i hjælper mig. Jeg prøver lige de ting af og vender tilbage.
Arne_v hold da op det virker perfekt nu. Så vil jeg bare lige høre en ting mere. Vil det være sådan at man kan gå rund på siden uden at opdatere. feks. hvis en gang om dagen opdatere når man går rund på siden. Jeg har noget cronjob jeg kan slå til, så den kan opdatere filen om nattet da der bliver købt en del om dagen. Vil det være muligt at endten opdatere de enkelte linjer i xml filen, eller skal den hele databasen igennem igen. eller kan jeg kigge på id fra en varer hvor der måske er udsolgt. hvor den så kun ændre den linje i filen.
Ej hvor er det bare så fedt!!! Har kæmpet med det i nogle dage, og nu lykkedes det med hjælp. Er så glad for den hjælp jeg får.
Du kan godt lave en sammenligning mellem resultatet af dit query og din xml. Så skal du læse filen med xml reader. Du sammenligner en record ad gangen. Hvis de ikke er ens, skal du beslutte dig for, om det er nye records eller slettede records i databasen (idet jeg går ud fra, at rettede ikke kan forekomme). Det kan du kun gøre ved at læse en linie til fra hver kilde. Så skriver du til en y xml fil.Så det kan lade sig gøre, men er ikke helt ukompliceret.
Men måske har du et timestamp, du kan bruge til at detektere "ændringer siden sidst"? Det er lettere.
Jeg synes også det er værd at du spørger dig selv hvorfor? Kan du ikke bare køre koden om natten en gang med cronjob? Skidt med, at det tage rlang tid, hvis bare det virker. Computerkraften er billig.
Det er svært for mig at gennemskue, hvorfor du ikke bare kører den, du nu har lavet. Men ellers prøv at forklare det,
Takker det er fedt det lykkedes, skal bare i gang med at kunne redigere / opdatere i filen. Når der sker en ændring i prisen Det bliver brug i et nyhedsbrev, og nyhedernes priser kan godt svinge. Så må lige prøve det du forslår. Se om jeg kan få det til at spille.
1000 tak for hjælpen til jer begge, det har fået mig frem i en god retning.
Når jeg har nye spørgsmål opretter jeg et nyt, så der kan være et nyt indlæg man kan søge på her inde.
Hav det rigtig godt
Med venlig hilsen Morten
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.