PHP: Datenbank Puffer aus dynamischer CSV Datei (konzeptionell)

31.01.2012 16:17 Uhr

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?

7 Antworten

#1

31.01.2012 16:42 Uhr

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.

#2

31.01.2012 16:48 Uhr

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

#3

31.01.2012 16:55 Uhr

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.

#4

01.02.2012 19:03 Uhr

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.

#5

01.02.2012 20:06 Uhr

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.

#6

03.02.2012 15:10 Uhr

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.

#7

03.02.2012 15:14 Uhr

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

Ähnliche Fragen



Datenschutzerklärung · Impressum