Johnny B.: modular zusammengesetzter Newsletter

Hallo geehrtes Forum,

ich glaube Thema DATENBANK trifft am ehesten zu.

Für ein Projekt erstelle ich ein Script, welches einen Newsletter modular zusammensetzt (Themen, Buchtipps, Fotos, etc). Jeder Empfänger soll einen zufällig aufgebauten individuellen Newsletter erhalten, ohne jedoch im Laufe der Zeit ein Modul doppelt zugeschickt zu bekommen.

Meine bisheriger Ansatz:

<datenbank (mySQL)>

  • jeweils eine Tabelle für jedes Modul mit den Spalten 'id', 'text' und 'versand_aktiv'
  • eine Tabelle mit den Empfängern mit den üblichen Angaben ('name', 'email'),
      sowie Spalten mit den IDs bisher erhaltenen Module ('erhalten_themen', 'erhalten_buchtipp').
      Die IDs sind in dem Feld mit Leerzeichen getrennt hintereinandergeschrieben (z.B. '3 5 10 12').
    </datenbank>

<code (Perl)>

  • lade die Daten aller versandaktiven Module mittels selectall_hashref (%alle_themen_ref, %alle_buchtipps_ref)
  • erstelle für jedes Modul ein Array mit den IDs (mittels while-schleife über keys/values von each %alle_themen_ref)

schleife über alle Empfänger

- hole aus den Empfängerdaten die IDs aller bisher erhaltenen Module (z.B. $erhalten_themen = '3 5 10 12')
  > schleife über alle Module
    - bilde die Differenzmenge aus allen versandaktiven IDs und bisher erhaltenen IDs (siehe Archiv)
    - wähle aus dieser Menge per Zufall eine ID aus ($zufall_themen)
    - dereferenziere diese ID und gelange so an die Daten des ausgewählten Moduls (my $thema = %$alle_themen_ref->{ $zufall_themen })
    - hänge das ausgewählte Modul an den Newsletter an
    - hänge die ID an die bisher erhaltenen IDs an ($erhalten_themen = '3 5 10 12 7')
  > schleife modul ende
  - update Empfängerdaten
  - versende Newsletter

schleife empfänger ende

</code>

So hatte ich mir das gedacht und dies wollte ich hier zur Diskussion stellen. Das Script wird, jedenfalls für mein Verständnis, sehr rechenzeit- und speicherintensiv. Und bevor ich es erst baue und dann im Nachhinein optimiere, weil irgendwo ein Problem auftaucht, würde ich gerne gleich den bestmöglichen Lösungsansatz wählen und drohenden Speicher- oder Rechenzeitfallen aus dem Weg gehen (ohne jedoch die grundlegenden Funktionen 'modular' und 'zufällig' zu verändern). Ich hoffe nunmehr aus 'den Fehlern der anderen' lernen zu können und bin schon sehr gespannt auf die Rückmeldungen.

Gespannte Grüße
JOhnnY

  1. Und bevor ich es erst baue und dann im Nachhinein optimiere, weil irgendwo ein Problem auftaucht, würde ich gerne gleich den bestmöglichen Lösungsansatz wählen und drohenden Speicher- oder Rechenzeitfallen aus dem Weg gehen.

    --- hhhmmmm, na dann baue ich das Dingen erstmal so. Es gab jedenfalls keinen groben Protest... ;-)