PHP: Datenbank Puffer aus dynamischer CSV Datei (konzeptionell) Frage PHP: Datenbank Puffer aus dynamischer CSV Datei (konzeptionell) zu Favoriten hinzufügen

Daumen hoch 0 Daumen runter

Hi zusammen!

ich versuche mich gerade an einem Konzept für eine Schnittstelle zum puffern von eKomi Produkbewertungen aus deren API.

Als Rückgabewert bekomme ich immer die vollständige CSV Datei aller jemals getätigter Produktbewertungen. Wenn ich diese jetzt in miener lokalen DB puffern wollte, müsste ich jedes Mal alle Daten gegeneinander abgleichen - oder gibt es einen tollen Trick, mit dem sich Arrays schnell vergleichen lassen - und am besten gleich in Teilmengen aufgesplittet werden? (gleiche und ungleiche)

array_diff wär doch für diese Aufgabe zu träge (sagen wir bei 10000 Bewertungen) oder?

bearbeitet am 31.01.2012

Antworten


Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

Ich kenne die API leider nicht, das erschwert die Sache.

Wenn die Antwort der API keine dynamischen Elemente enthält, die bei jeder Abfrage unterschiedlich sind (z.B. timestamp), dann könntest du vielleicht einen md5-Hash bilden und so einen Vergleich (API vs. Cache) durchführen.

Also

  1. API abfragen, Daten cachen
  2. API abfragen, MD5 Hash bilden
  3. Cache holen, MD5 Hash bilden
  4. API-Hash != Cache-Hash  => Update.

Du solltest aber sicher gehen, dass die API immer dasselbe Ergebnis liefert wenn es keine Änderungen gibt.

Das ist die Idee! Danke!

viktord am 31.01.2012

Bitte als Lösung markieren, wenn das der Fall ist. Danke!

martin am 31.01.2012

war eine sehr gute Idee, wäre auch bei PHP5.x die Lösung gewesen! Leider leider aber noch nicht bei 4.x

viktord am 03.02.2012
Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

Mal eine dume Frage, da ich eKomi nicht kenne. Liefert die CSV-Datei keine eindeutige ID für die Bewertungen oder ein Datum, wann diese erstellt wurden? Poste doch mal ein paar Beispieldaten.

Diese Antwort als GUT bewerten 1 Diese Antwort als SCHLECHT bewerten

Rückwandlungen Deines verwendeten Datumsformats kann man einfach mit strtotime machen. Persönlich hätte ich jedoch einfach eine Tabelle mit den CSV-Angaben gemacht und dann den Primärschlüssel aus den ersten drei Angaben gebildet.

die Datenbank ist (leider) schon vorhanden (OS Commerce Reviews)

viktord am 03.02.2012
Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

Musst du denn zwangsläufig alle Daten gegeneinander abgleichen?

Wenn sich z.B. die ein Mal abgegebenen Produktbewertungen (1-10.000) nicht mehr ändern, dann könntest du bei einem zukünftigen Update (z.B. 10.123 Bewertungen) nur noch die Mengen vergleichen und deinen Cache ggf. aktualisieren.

die csv lässt sich leider nicht editieren (API) und liefert mir immer das volle Ergebnis, also muss ich doch zwangsläufig alle Daten für einen Diff vergleichen, oder nicht?

viktord am 31.01.2012
Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

achso, erschwerend kommt leider hinzu, dass es nur PHP4.x ist :(

Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

in der csv sind ein unixtimestamp, customer_id, product_id, review_points und text

In der Datenbank habe ich einen datetime im Format date(Y-m-d H:i:s) - wenn ich den mit mktime wieder zurückwandele, kommt seltsamerweise ein anderer Timestamp raus.

Ich habe das jetzt so gemacht, dass ich für jeden Eintrag in der CSV in der Datenbank nachschaue, ob er bereits vorhanden ist (anhand der drei ids). Das sind zwar einige SQL Aufrufe, aber es passiert ja nicht on demand, sondern nur nachts per cronjob.

array_diff konnte ich leider wegen PHP4.x nicht nutzen...

viktord am 03.02.2012
Diese Antwort als GUT bewerten 0 Diese Antwort als SCHLECHT bewerten

die Datenbank ist (leider) schon vorhanden (OS Commerce Reviews)

Deine Antwort

Registrierter User Bereits registriert? Bitte logge dich vor dem Antworten ein.

Deine Daten