und ftp - Konzeptfrage
ritschmanhard
- datenbank
Hallo liebes Forum!
Nachdem ich selbst unsicher bin, möchte ich gerne mal wissen, ob und wie sich folgendes Problem lösen lassen würde:
ad1) Es gebe eine Datenbank (z.B. mySQL) in der zeitgestempelte Daten im Sekundentakt abgelegt werden.
ad2) Es gebe einen ftp Zugriff, bei dem diese Daten stundenweise (als jeweils verschiedene Stundendateien) zum Download zur Verfügung stehen sollen. Dabei soll es auch noch eine Verzeichnisstruktur geben (z.B. nach Kalenderwochen), da sonst sehr viele Stundendateien die Übersicht erschweren.
Nun die Frage: wie könnte man so etwas realisieren - insbesondere, ohne dabei weitere Daten auf die Festplatte schreiben zu müssen?
Meine Überlegung hierzu wäre:
Kann dieses Konzept so realisiert werden? Oder gibt es sowas gar schon fertig?
Weitere Fragen:
Grüsse,
Richard
Hallo,
ad1) Es gebe eine Datenbank (z.B. mySQL) in der zeitgestempelte Daten im Sekundentakt abgelegt werden.
ad2) Es gebe einen ftp-Zugriff, bei dem diese Daten stundenweise (als jeweils verschiedene Stundendateien) zum Download zur Verfügung stehen sollen. Dabei soll es auch noch eine Verzeichnisstruktur geben (z.B. nach Kalenderwochen), da sonst sehr viele Stundendateien die Übersicht erschweren.
Nun die Frage: wie könnte man so etwas realisieren - insbesondere, ohne dabei weitere Daten auf die Festplatte schreiben zu müssen?
Was versprichst du dir für Vorteile daraus, ftp://example.com/april/x/y abzurufen anstatt http://example.com/april/x/y ? Genauer: Von welch' restlos überzeugender Form sind diese Vorteile, dass sie die massiven Sicherheitsprobleme, die du mit einem selbst zusammengeschusterten, zusätzlichen Server, mit dessen Technik du dich anscheinend nicht weiter auskennst, möglicherweise aufreißt, wettmachen?
Grüße,
Frank
Hi Frank!
Deine Fragen sind durchaus berechtigt - und man kann einem Kunden schon vorschlagen, dass er doch besser das Ganze _nur_ über http nutzen soll - will er aber nicht. Somit sind die restlos überzeugenden Vorteile, dass der Kunde folgendes möchte:
und es sonst keinen Auftrag gibt.
Dann müßte man nachdenken, wie das gehen könnte. Und eben weil mir unter Anderem die Sicherheitsproblematik nicht entgangen ist und weil ich diese Lösung noch nie zu realisieren hatte, frage ich ja hier, wie Lösungskonzepte aussehen könnten.
Grüsse,
Richard
Hallo.
die restlos überzeugenden Vorteile, dass der Kunde folgendes möchte:
- Viele Daten strukturiert speichern
- Via ftp darauf zugreifen können
und es sonst keinen Auftrag gibt.
Den Punkt 2, "Will ich haben", würde ich so immer noch nicht akzeptieren, aber sei's drum.
Für den Apache gibt es ein Modul namens mod_ftp. Mir ist bislang noch kein FTP-Server untergekommen, der Zugriffe jenseits des Dateisystems erlaubt hätte (vielleicht gibt es sowas in der kommerziellen Ecke), von daher ist die Einbindung in den Apache mit seinen umfassenden Skripting-Möglichkeiten vermutlich die günstigste Möglichkeit.
Mit mod_ftp habe ich mich nicht befasst, aber wenn das Modul URLs so verarbeitet wie beim Apache üblich, müsste mit einem Skript und mod_rewrite ein Dateisystem zu simulieren sein.
Gruß, Frank
Hallo,
Für den Apache gibt es ein Modul namens mod_ftp.
hmm, ich zitiere:
<zitat>
mod_ftp hasn't been released yet. It is still alpha quality and isn't
identified as ready for production use.
</zitat>
Also ich würd's nicht einsetzen, nicht bei einem zahlenden Kunden.
Mir ist bislang noch kein FTP-Server untergekommen, der Zugriffe jenseits des Dateisystems erlaubt hätte.
ProFTPD scheint zu können, was der OP benötigt, siehe beispielsweise die Doku zu mod_rewrite und mod_exec, ich zitiere allerdings aus der Doku zu mod_exec:
<zitat>
YOU HAVE BEEN WARNED
USE AT YOUR OWN RISK
</zitat>
Freundliche Grüße
Vinzenz
Hi Vinzenz!
Danke für die Hinweise - und den Link. Deine Warnung konnte ich allerdings nicht finden:
<zitat>
YOU HAVE BEEN WARNED
USE AT YOUR OWN RISK
</zitat>
Ich werd mal reinschauen...
Grüsse,
Richard
Hallo Richard,
Danke für die Hinweise - und den Link. Deine Warnung konnte ich allerdings nicht finden:
[...] ich zitiere allerdings aus der Doku zu mod_exec:
http://www.castaglia.org/proftpd/modules/mod_exec.html
<zitat>
YOU HAVE BEEN WARNED
USE AT YOUR OWN RISK
</zitat>
Freundliche Grüße
Vinzenz
Hi Vinzenz!
Nochmals Danke für den Link - und vermutlich ist das tatsächlich eine Lösung (wenn auch "at my own risk"), denn:
Irgendwie hatte ich mir das simpler vorgestellt - aber interessant wird das auf jeden Fall.
Grüsse,
Richard
Hallo Richard,
ich will auf Nummer Sicher gehen.
Nochmals Danke für den Link - und vermutlich ist das tatsächlich eine Lösung (wenn auch "at my own risk"), denn:
Irgendwie hatte ich mir das simpler vorgestellt - aber interessant wird das auf jeden Fall.
Neben mod_exec könnte Dir auch mod_rewrite weiterhelfen. Am allerbesten schaust Du Dir die komplette Doku an und prüfst, was Dir auf dem einfachsten und sichersten Weg weiterhelfen kann.
Freundliche Grüße
Vinzenz
Hallo.
Fordert der Client nun eine Datei file.hh an
Muss das zwingend so ablaufen? Trivialer würde die Geschichte, wenn man die Dateien einfach statisch im Filesystem erzeugt.
So könnte man eben ein Perl Script bereitstellen, welches per Cronjob z.B. alle 10 Minuten aufgerufen wird und die Dateien / Ordner erzeugt...
Der Rest wäre dann 08/15 FTP....
Falls die o.g. Bedingung Pflicht ist, würde ich mir mal folgendes reintun:
http://search.cpan.org/~rwmj/Net-FTPServer-1.122/lib/Net/FTPServer.pm
Grüße
Hi Dirk!
Muss das zwingend so ablaufen? Trivialer würde die Geschichte, wenn man die Dateien einfach statisch im Filesystem erzeugt.
Naja, das Problem ist, dass:
a) Sehr viele Daten geschrieben werden (wie gesagt, sekündlich und nicht nur 1 byte)
b) Eine doppelte Datenhaltung wenig wünschenswert erscheint
c) Die Daten aber wegen diverser anderer Zugriffe (z.B. vom Web aus mit Datenreduktion = gib nur 1 Satz pro min oder so) in der Datenbank liegen sollten, um problemlos auf einzelne Datensätze, Spalten etc. zuzugreifen.
http://search.cpan.org/~rwmj/Net-FTPServer-1.122/lib/Net/FTPServer.pm
Für den Tip danke ich und werde mal reinschauen.
BTW: Ich habe gesehen, dass pure-ftp unter BSD Lizenz steht - eventuell kann man den ja auch "ummodeln/pluggen".
Grüsse,
Richard
Fordert der Client nun eine Datei file.hh an
Muss das zwingend so ablaufen? Trivialer würde die Geschichte, wenn man die Dateien einfach statisch im Filesystem erzeugt.
Außerdem gäbe es noch die Möglichkeit, nicht den FTP-Server selbst zu schreiben, sondern das Dateisystem, das der FTP-Server sieht. Siehe dazu http://fuse.sourceforge.net/.
Hi Dirk!
Außerdem gäbe es noch die Möglichkeit, nicht den FTP-Server selbst zu schreiben, sondern das Dateisystem, das der FTP-Server sieht. Siehe dazu http://fuse.sourceforge.net/.
Hochinteressant, aber irgendwie setzt es bei mir hier voll aus - was macht denn diese Software? Einer Anwendung vorgaukeln, dass es ein Filesystem gäbe, das es nicht gibt (also virtuell). Wie sollte ich denn das mit dem Datenbankkonzept und einem ftp Server verheiratet bekommen?
So alla:
fuse erzeugt mit Hilfe der Datenbankdaten ein virtuelles Filesystem - OK
dem ftp client wird vorgegaukelt, dass es dieses filesystem gibt - OK
Aber:
Grüsse,
Richard
Entschuldigung Murphy, Dirk hab die Absender verwechselt.
Grüsse,
Richard
Außerdem gäbe es noch die Möglichkeit, nicht den FTP-Server selbst zu schreiben, sondern das Dateisystem, das der FTP-Server sieht. Siehe dazu http://fuse.sourceforge.net/.
Hochinteressant, aber irgendwie setzt es bei mir hier voll aus - was macht denn diese Software? Einer Anwendung vorgaukeln, dass es ein Filesystem gäbe, das es nicht gibt (also virtuell). Wie sollte ich denn das mit dem Datenbankkonzept und einem ftp Server verheiratet bekommen?
Hallo Richard,
mit FUSE kann man den Betriebssystemkern dazu bringen, ein Dateisystem anzulegen, aber alle Operationen darauf an ein normales Programm weiterzuleiten. Dieses Programm, der Dateisystemserver, erhält also für jede Operation wie "Liste alle Dateien in Verzeichnis x auf" oder "Lies 42 Bytes von Position 455 aus Datei y" eine Anfrage, die er nach Lust und Laune beantworten kann.
In Deinem Falle müsste der Dateisystemserver in etwa folgendes tun:
Bei einer Listinganfrage für Verzeichnisse wird der Name des Verzeichnisses zerlegt und ein Zeitfenster daraus berechnet, das in eine Datenbankabfrage einfließt. Das Resultat der Datenbankanfrage wird wiederum in künstliche Dateinamen, die aus den Zeitstempeln der Messungen synthetisiert wurden, umgesetzt.
Bei einer Leseanfrage für eine Datei wird ebenfalls der Name und Pfad der Datei als Zeitstempel verwendet um die passenden Daten in der Datenbank zu finden. Diese Daten werden ausgelesen und in Textform zurückgeliefert.
Andere Anfragen, wie zum Beispiel das Beschreiben oder Löschen von Dateien können einfach mit einem Fehlercode beantwortet werden.
Alle Anwendungen können dieses Dateisystem nun genau so benutzen, als ob es zum Beispiel eine lokale Festplatte wäre. Da auch ein FTP-Server ein ganz normales Programm ist, würde er den Unterschied zwischen einem Verzeichnis auf Deiner Platte, das er serven soll, und einem FUSE-Dateisystem, das er serven soll, überhaupt nicht bemerken.
Hi Murphy!
Jetzt raff ich das erst - das ist ja hammergeil!
Das ist zu cool - und mit den nur knapp 40 (u.U nach Autorenaussage sogar für einfache Funktion weniger) zu realisierenden Functions können alle Linux Kommandos "beantwortet" werden?
Danke dir,
Richard
PS.: This rules, aber echt.
Das ist zu cool - und mit den nur knapp 40 (u.U nach Autorenaussage sogar für einfache Funktion weniger) zu realisierenden Functions können alle Linux Kommandos "beantwortet" werden?
Für ein Dateisystem, das man nur lesen kann, sollte es sogar ausreichen die Funktionen getattr, read und readdir zu implementieren und alle anderen auf NULL zu setzen.
Im Übrigen ist es nicht unbedingt notwendig, das Dateisystem in C zu schreiben, wenn die Geschwindigkeit nicht absolut entscheidend ist. Es gibt diverse Bindings für Skriptsprachen: http://fuse.sourceforge.net/wiki/index.php/LanguageBindings