Frage

Ich brauche ein paar Skripte schreiben einige Aufgaben auf meinem Server auszuführen (Ubuntu Server 8.04 TLS). Die Aufgaben sind in regelmäßigen Abständen ausgeführt werden, so dass ich die Skripte als Cron-Jobs ausgeführt werden.

Ich habe die Aufgaben in den „Gruppe A“ unterteilt und „Gruppe B“ -., Weil sie (in meinem Kopf zumindest), sie ein bisschen anders sind

Task Group A

  1. Importieren von Daten aus einer Datei und möglicherweise umformatieren es - durch Neuformatierung ich Dinge bedeuten dabei die Daten wie santizing, möglicherweise Normalisierung sie und oder laufende Berechnungen auf ‚Spalten‘ der Daten

  2. Importieren Sie die munged Daten in eine Datenbank. Vorerst verwende ich meistens mySQL für die überwiegende Mehrheit der Einfuhren - obwohl einige Dateien in eine SQLLite Datenbank importiert werden

  3. .

. Hinweis: Die Dateien werden meist Textdateien, obwohl einige der Dateien in einem Binärformat (mein eigenes proprietäres Format, geschrieben von einer C ++ Anwendung, die ich entwickelt) sind

Task Group B

  1. Extrahieren von Daten aus der Datenbank
  2. Durchführen von Berechnungen an den Daten und entweder einfügen oder aktualisieren Tabellen in der Datenbank.

Meine Codierung Erfahrung ist in erster Linie als C / C ++ Entwickler, obwohl ich PHP als auch für die letzten 2 Jahre verwendet habe oder so (+ ein paar andere Sprachen, die für die Zwecke dieser Frage nicht relevant sind). Ich bin von einem Windows-Hintergrund, so dass ich immer noch bin zu finden meine Füße in der Linux-Umgebung.

Meine Frage ist - ich muss Schreib Skripte, um die Aufgaben erfüllen ich oben beschrieben. Obwohl ich glaube, ich könnte ein paar C ++ Anwendungen schreiben, die in den Shell-Skripten verwendet werden, denke ich, es besser sein kann, sie in einer Skriptsprache zu schreiben, aber dies kann eine fehlerhafte Annahme. Mein Denken ist, dass es einfacher wäre, die Dinge in einem Skript zu ändern - keine Notwendigkeit, neu zu erstellen usw. für Änderungen an Funktionalität. Zusätzlich Daten C ++ in C ++ munging neigen dazu, mehr Zeilen Code als "natürliche" Skriptsprachen wie Perl, Python usw. beinhalten.

Unter der Annahme, dass die Mehrheit der Menschen hier einig, dass Scripting ist der Weg zu gehen, liegt hier mein Dilemma. Welche Skriptsprache verwende ich die Aufgaben oben ausführen (meinen Hintergrund zu geben)?

Mein Bauchgefühl sagt mir, dass Perl ( Schauder ) die naheliegendste Wahl wäre für alle der oben genannten Aufgaben. ABER (und das ist ein großes ABER). Die bloße Erwähnung von Perl macht meine Zehen rollen, wie ich eine sehr hatte, sehr schlechte Erfahrungen mit ihm eine Weile zurück (gekauft Perl Camel Buch + ‚Daten munging mit Perl‘ vor vielen Jahren, konnte aber noch nicht ‚grok‘ es einfach war zu fremd Die Syntax scheint ziemlich unnatürlich mir -. trotz wie oft habe ich versucht, es zu lernen -. so, wenn möglich, würde ich wirklich, wie es zu geben, eine Miss PHP (was ich weiß schon), auch nicht sicher bin, ist ein guter Kandidat für das Skripting auf der CLI (ich habe nicht viele Beispiele dafür, wie dies zu tun, etc gesehen - so ich falsch sein kann).

Das letzte, was ich erwähnen muss, ist, dass, wenn ich eine neue Sprache zu lernen, dies zu tun, kann ich nicht (Constraint Zeit) leisten, mehr als einen Tag zu verbringen, in die wichtigsten Befehle Lernen / Funktionen erforderlich, um tun dies (ich kann immer die Details der Sprache später erfahren, sobald ich die Skripte tatsächlich bereitgestellt haben).

Also, die Skriptsprache würden Sie empfehlen (PHP, Python, Perl, [insert Ihre Lieblings hier]) - und vor allem warum? Oder sollte ich nur Stick zu schreiben wenig C ++ Anwendungen, dass ich in ein Shell-Skript aufrufen?

Schließlich, wenn Sie eine Skriptsprache vorgeschlagen haben, können Sie zeigen, mit ein paar Zeilen bitte (PerlMongers - ich bin in der Richtung suchen [! Nichts zu kryptisch]), wie ich die Sprache können Sie vorgeschlagen, was zu tun ich versuche also zu tun

  • laden Sie eine CSV-Datei in eine Art von Datenstruktur, wo Sie die Datenspalten für die Datenmanipulation leicht zugänglich machen können
  • Dump die Spaltendaten in eine mySQL Tabelle
  • Lastdaten von mySQL-Tabelle in eine dateine Struktur, die Spalten / Zeilen kann in der Skriptsprache
  • zugegriffen werden

Hoffentlich können die Schnipsel mich schnell, um die Sprachen zu erkennen, die die steilste Lernkurve für mich darstellen wird - ebenso wie diejenigen, die einfach, elegant und effizient (hoffentlich diese beiden Kriterien [Eleganz und flache Lernkurve] sind nicht orthogonal -. obwohl ich vermute, sie auch sein mögen)

War es hilfreich?

Lösung

  

Importieren von Daten aus einer Datei und möglicherweise umformatieren es

zeichnet Python das an. Seien Sie sicher, dass auf dem csv Modul zu lesen, so dass Sie keine Zeit hat es selbst verschwenden zu erfinden.

Für binäre Daten, können Sie das struct Modul verwenden. [Wenn Sie das C ++ Programm geschrieben, das die binären Daten erzeugt, sollten Umschreiben dieses Programm binäre Daten mehr zu verwenden. Ihr Leben wird auf lange Sicht einfacher sein. Plattenspeicher ist billiger als Ihre Zeit; hochkomprimierte Binärformaten sind kosten als Wert.]

  

Importieren Sie die munged Daten in eine Datenbank.   Extrahieren von Daten aus der Datenbank   Durchführen von Berechnungen an den Daten und entweder einfügen oder aktualisieren Tabellen in der Datenbank.

Mit dem mysqldb Modul für MySQL. SQLite ist eingebaut in Python.

Oft wollen Sie Object-Relational-Mapping verwenden, anstatt Schreiben Sie Ihre eigene SQL. Schauen Sie sich sqlobject und sqlalchemy dafür.

Auch vor zu viel, dies zu tun, ein gutes Buch über Data Warehousing kaufen. Ihre beiden „Arbeitsgruppen“ klingen wie Sie beginnen, der Data Warehousing Straße hinunter. Es ist einfach, das alles durch Design schlechter Datenbank gefoult bis zu bekommen. Erfahren Sie, was ein „Stern-Schema“ ist, bevor Sie etwas anderes tun.

Andere Tipps

Nun, ich war Sie ein paar Jahre zurück. Hat überhaupt nicht wie Perl und würde neu zu schreiben Alle Skripte, meine Kollegen schrieb Python in Perl zurück - weil ich nicht Perl stehen konnte. Lange Rede kurzer Sinn - lassen Sie sich einfach sagen, dass ich mit Perl ziemlich bewandert bin jetzt. Ich würde ein Buch mit dem Titel „Ungeduldig Perl“ empfehlen, die die wirklich wichtig, erklärt Sachen ganz gut und umgewandelt, um mich zu Perl. :) Eine andere Sache ist die Perl-Dokumentation auf Ihrem Computer zu installieren - das ist für mich wirklich wichtig war -. Einfachen und schnellen Zugang zu Beispielcode, etc.

Teaser Script für Task A -. Eine Datei zu lesen, es Format und dann in die Datenbank schreiben

use autodie qw(:all);
use Text::CSV_XS ();
use DBI ();

my $csv = Text::CSV_XS->new({binary => 1}) 
  or die 'Cannot use CSV: ' . Text::CSV->error_diag;

{
    my $database_handle = DBI->connect(
        'dbi:SQLite:dbname=some_database_file.sqlite', undef, undef, {
            RaiseError => 1,
            AutoCommit => 1,
        },
    );
    $database_handle->do(
        q{CREATE TABLE something_table_or_other ('foo' CHAR(10), 'bar' CHAR(10), 'baz' CHAR(10), 'quux' CHAR(10), 'blah' CHAR(10))}
    );

    my $statement_handle = $database_handle->prepare(
        q{INSERT INTO something_table_or_other ('foo', 'bar', 'baz', 'quux', 'blah') VALUES (?, ?, ?, ?, ?)}
    );

    {
        open my $file_handle, '<:encoding(utf8)', 'data.csv';
        while (my $columns_aref = $csv->getline($file_handle)) {
            my @columns = @{ $columns_aref };

            # sanitize the columns - maybe substitute commas, numbers, etc.
            for (@columns) {
                s{,}{};  # substitutes commas with nothing
            }

            # insert columns into database now, using placeholders
            $statement_handle->execute(@columns);
        }
    }
}

Hinweis: Ihre aktuelle distaste für Perl Da würde ich auch empfehlen Sie tun, die über „Aufgaben“ in einer beliebigen Programmiersprache Sie in komfortabel Das oben genannte ist nur ein Versuch, Ihnen zu zeigen, dass es nicht so kryptisch sein könnte, nachdem alle. . Sie erhalten kryptisch zu sein, wenn Sie sich nicht wiederholen möchten! :)

würde ich mit Python oder Ruby gehen. Sie werden wahrscheinlich finden sie viel schneller / einfacher als Perl zu holen, und sie sind immer noch sehr mächtig / effiziente Sprachen in ihrem eigenen Recht für „Daten munging“. Sie sollten entweder von ihnen an einem Tag oder weniger, nicht mitgerechnet aufzublicken Zufallsbibliothek Funktionen jeder so oft.

abholen können

Um holen Python schnell: http://diveintopython3.ep.io/

Ich persönlich kann nicht ein Ruby Tutorial mich empfehlen, aber ich bin sicher, dass andere mit guten Möglichkeiten läuten kann.

Wenn Sie möchten, entweder mit spielen, um, http://www.trypython.org und http://www.tryruby.org jeder Host interaktive Online-Shell-Versionen der Dolmetscher für ihre jeweiligen Sprachen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top