Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

Synchronisation häppchenweise um Abbrüche zu vermeiden #5446

Closed
NinaG opened this issue Feb 26, 2013 · 34 comments
Closed

Synchronisation häppchenweise um Abbrüche zu vermeiden #5446

NinaG opened this issue Feb 26, 2013 · 34 comments
Labels
Milestone

Comments

@NinaG
Copy link

NinaG commented Feb 26, 2013

Sobald man wirklich viele & große Dateien in der Dateiverwaltung hat, ist die Chance sehr groß, dass die Verbindung bei der Synchronisation abbricht, weil die Maximum Execution-Time o.ä. erreicht wird. Bei durchschnittlichen Hosted-Webspaces kann das ziemlich fix geschehen, da dieses Hosted Spaces alle nicht so arg stark sind, selbst wenn es größere Pakete sind.

Ich habe hier z.B. einen Kunden der unter anderem ca. 500 MP3-Dateien in der Dateiverwaltung hat (die auf unterschiedlichsten Seiten innerhalb der Website eingebunden sind), die eine Gesamtgröße von ca. 1.5 GB haben. Leider tritt das Problem des Abbruchs bei der Synchronisation aber auf, so dass die Dateiverwaltung praktisch unnutzbar ist, weil die Seite bei jeder Synchronisation hopps geht.

Daher meine Bitte:
Bitte baut die Synchronisation so um, dass sie häppchenweise synchronisiert. Ich kenne das von anderen Programmen so, dass man dort festlegen kann, nach wievielen Sekunden die Aktion automatisiert (glaub via JS?) kurz unterbrochen und neu gestartet wird (ab dem Punkt, an dem sie zuvor bewusst nach der Zeit unterbrochen wurde).

Ich denke, das wäre eine sehr wichtige Sache um die eigentlich gute Idee der Synchronisation auf Hosted Webspaces gut nutzbar zu machen, denn so wie das derzeit ist, kann ich Contao 3 niemandem empfehlen, der auf seiner Website aktiv eine größere Anzahl von Audio oder Video-Dateien in Inhaltselementen nutzen will.

@ghost
Copy link

ghost commented Feb 27, 2013

+1
Ich kämpfe zur Zeit mit ca. 1800 Fotos, die sich auch nicht synchronisieren lassen (neben anderen Problemen dabei).

Man braucht aber keine große Anzahl. Bei mir (lokaler Ubuntu Server) reicht ein einzelnes 1.5GB Video zum Abbruch (ok, die Webhosting-Server sind schneller, aber max_execution_time oft knapper). Da reicht die Zeit nicht einmal, um einen (1) Hash zu bilden.
Eine häppchenweise Synchronisation würde das Problem erstmal nach hinten verschieben, aber nicht sicher beheben, es sei denn man baut ein Größenlimit (abhängig vom Webspace!) ein.

@leofeyer
Copy link
Member

Siehe #5009, #4982, #5100.

@NinaG
Copy link
Author

NinaG commented Feb 27, 2013

Hm, ist aber nicht gerade beruhigend, wenn alle referenzierten Tickets geschlossen sind, also anscheinend nichts an diesem Problem getan wird?

Im Ticket #5009 schlägt Thyon auch eine häppchenweise-Abarbeitung vor und du meintest, dass du mal schaust, aber das Ticket wurde ebenso geschlossen.

Es handelt sich hier um einen essentiellen Part eines Content Management Systems - da ist es doch ein fatales Signal, wenn die Synchronisation die ganze Geschichte abrauchen lässt, sofern die Leute nicht gerade einen eigenen Server haben. Ich halte das für ein ganz wichtiges Problem.

@leofeyer
Copy link
Member

Es wird nicht "nichts an dem Problem getan", sondern es gibt für das Problem keine Lösung (wie in den Tickets erklärt). Wir haben das Thema auf der Agenda der AG Core und sollte uns eine Lösung einfallen, würde ich #5009 wieder öffnen.

@NinaG
Copy link
Author

NinaG commented Feb 27, 2013

Danke.

@BugBuster1701
Copy link
Contributor

Das Prinzip bei mysqldumper abschauen? (bzw. das Konzept) Mal als Tipp, aber sicher schon bekannt. Das Teil peilt sich beim Backup automatisch auf Speicher und Zeit Begrenzungen ein.

@xchs
Copy link
Contributor

xchs commented Feb 27, 2013

Ja, das BYSU Backup-Skript macht IMHO auch was Ähnliches, nämlich Speicherlimit und Skriptlaufzeit dynamisch anzupassen.

@leofeyer
Copy link
Member

Das Prinzip ist mir klar (hab ich ja u.a. beim Versenden von Newslettern so implementiert). Der Unterschied ist nur, dass es hier so nicht geht, da die Datenkonsistenz während der Synchronisierung nicht gewährleistet ist!

@andreasisaak
Copy link

Wir arbeiten nach dem selben Prinzip bei syncCto und dort haben wir es bis zu einer bestimmten Grenze auch geschafft. Auch wenn da das Problem noch nicht ganz behoben ist, da wir ab und zu immer noch die Speicherlimits sprengen.

Eine Lösung ist aber vorhanden.

@tristanlins
Copy link
Contributor

Der Unterschied ist nur, dass es hier so nicht geht, da die Datenkonsistenz während der Synchronisierung nicht gewährleistet ist!

Dann musst du alle Datenoperationen während der Synchronisation sperren. Low-Level Änderungen via FTP/FS kann man natürlich nicht sperren, aber damit muss man leben.

@leofeyer
Copy link
Member

leofeyer commented Mar 4, 2013

Wie soll das denn über mehrere Request hinweg funktionieren? Soweit ich weiß, hebt PHP automatisch Table-Locks auf, wenn das Skript abgearbeitet wurde. Außerdem dürfte man während der Synchronisation eigentlich auch nicht lesend zugreifen, denn die Pfade könnten ja noch falsch sein.

Eine partielle Abhilfe schafft sicher der geplante Wartungsmodus, aber auch der löst das Problem nicht vollständig.

@bekanntmacher
Copy link
Contributor

Mit Transaktionen glaube ich, musste man arbeiten:
http://dev.mysql.com/doc/refman/5.1/de/custom-engine-transactions.html

@leofeyer
Copy link
Member

leofeyer commented Mar 4, 2013

Transaktionen == InnoDB und leider (noch) nicht MyISAM.

@bekanntmacher
Copy link
Contributor

Und mit einer Kopie: zuerst tl_files kopieren und dann die Kopie synchen und schliesslich wieder zurückkopieren

@leofeyer
Copy link
Member

leofeyer commented Mar 4, 2013

Auf jeden Fall eine gute Idee. Aber klappt das mit richtig vielen Datensätzen?

@ghost
Copy link

ghost commented Mar 4, 2013

Ich komme mehr aus der Datenbankecke (20+ Jahre Oracle, 10+ Jahre db-driven Web), denke vielleicht mal anders, hier meine Überlegungen:

  • Konsistenz: Wenn man während der Synchronisation den Lesezugriff sperren müsste, um falsche Adressen (nach move) zu vermeiden (s.o. Leo): die waren dann auch vor Sync wahrscheinlich schon falsch.
  • Locking: da table locks und Transaktionen nicht über einen Request hinaus leben, muss man das anderweitig simulieren.
  • Memory limit: meine Test ausserhalb Contao mit md5_file() ergaben keine Probleme (ansteigende memory) auch bei vielen und großen files - wenn man nicht alle Ergebnisse im memory hält, was aber wohl beim derzeitigen Sync (in evtl. fett werdenden Objekten) passiert. Ebenfalls habe ich auch 1..2GB files noch innerhalb der üblichen max_execution_time gehasht bekommen.

Ein Ansatz:

  • Benutzung einer Hilfstabelle tl_files_collect (speziell, nicht Kopie von tl_files)
  • Aufsammeln aller files mit path, size, file time, time_of_collect, aber ohne hash, in tl_files_collect. Dies sollte auch bei einigen 1000 files noch in einem Request gehen (bei mir: 8000 files in 4..8sec).
  • Damit hat man einen relativ konsistenten Snapshot des filesystems (da das Zeitfenster ziemlich klein ist)
  • Jetzt wird für jedes file aus tl_files_collect der hash bestimmt und in tl_files_collect geschrieben, prüfen auf size/timestamp erkennt changes/deletes. Bei drohendem memory/cpu-Limit Request-Schleife.
  • Wenn damit durch, kann tl_files in einem Rutsch aus tl_files_collect aktualisiert werden.
  • Changes/deletes nachführen (gehe auf Anfang?) oder vergessen.
  • tl_files_collect wirkt als soft lock: wenn nicht leer => ein anderer Sync ist busy. Muss evtl. auch einzelnen Upload aussperren.
  • Abgestürzte Syncs kann man erkennen, wenn in tl_files_collect die time_of_collect älter ist als vernünftig (einige Minuten, ggf. abhängig von #files oder sum(sizes)), dann darf man löschen und neu anfangen.
  • Wenn man bereit ist, matching file location, size & modification time als 'is the same' zu akzeptieren,kann man hashes sparen und vermutlich noch mehr & große files verkraften.

Die Umsetzung dürfte nicht so schlimm sein wie es zunächst aussieht. Es gibt dabei natürlich noch ein paar nickelige Details (challenges not problems...). Ob man es anschließend auch im FE erlauben kann (ich habe irgendwo dazu ein issue gesehen), wäre dann zu prüfen. Ebenso Sync von file subtrees.

Für Anwender mit eigenem Server (real cron oder inotifywait Möglichkeit) sollte idealerweise ein (kompatibles) Batchverfahren existieren, das den Sync automatisch im Hintergrund erledigt (ideal mit inotifywait bzw. icrond).

Wenn hier der Ansatz als lohnenswert gesehen wird und sonst keiner richitg aktiv ist, versuche ich mich gerne an der Umsetzung.

@tristanlins
Copy link
Contributor

@thomaspahl 's Ansatz klingt echt gut. Ich würde auch über ein Lockfile gehen, einfach einen timestamp in system/tmp/sync.lock oder so schreiben, solange der Timestamp < max_execution_time (*2) ist, ist der Lock gültig (um deadlock bei unerwarteten Abbrüchen zu vermeiten). Solange innerhalb von Contao keine files spezifischen Operationen, mit Ausnahme von READ erlauben. Sollte wie @thomaspahl schon sagt ein Record bereits zu diesem Zeitpunkt invalid sein, ist es sowieso egal ob ein Lesezugriff auf den Sync wartet oder nicht. Invalider Record ist invalider Record, da hilft nur ein Sync ;-)

Eine Prüfmethode könnte so aussehen:

class Files
{
    public static function isLocked()
    {
        if (!file_exists('system/tmp/sync.lock')) {
            return false;
        }
        $maxExecutionTime = ini_get('max_execution_time');
        if ($maxExecutionTime <= 0) {
            $maxExecutionTime = 120; // fallback, 2 minutes timeout
        }
        $expire = file_get_contents('system/tmp/sync.lock') + ($maxExecutionTime * 2);
        if ($expire > time()) {
            return true;
        }
        unlink('system/tmp/sync.lock');
        return false;
    }
}

@bekanntmacher
Copy link
Contributor

Ich nehme an, dass md5_file() zum Abbruch führt, resp. die Zeit frisst. Ich kann mir jetzt aber nicht erklären, wozu wir den Hash überhaupt brauchen. Es geht doch "nur" darum, die Folder-/File-Struktur in der DB abzubilden. Ob die Prüfsumme aus irgend einem Grund ändert, kann doch dem System egal sein.

Somit sehe ich den Ablauf wie folgt:

  1. Schreibzugriff auf die Dateiverwaltung sperren
  2. Dateiverwaltung mit scandir() in ein array schreiben
  3. Array in der DB abbilden
  4. Schreibzugriff freigeben

Die Synchronisation gehört meiner Meinung nach ins Menu Systemwartung.

Die Sperre würde ich nicht anhand einer maxEcutionTime entfernen. Ich würde die Sperre aber durch eine Meldung angezeigen (Analog "abgesicherter Modus"). Im Fehlerfall kann die Sperre manuell entfernt werden (Checkbox analog dem abgesicherten Modus).

@tristanlins
Copy link
Contributor

@bekanntmacher nein, der Hash ist notwendig um Verschiebungen erkennen zu können.

Wenn du die Sperre nicht automatisch aufhebt, wie gehst du damit um, wenn z.B. über einen Redakteur oder im FE die Sperre zu einem Dead-Lock führt, weil weder ein Redakteur und erst recht kein FE Besucher die Sperre entfernen darf? Vor allem wenn der Sync von extern getriggert wird, z.B. via cron ist ein automatisches Aufheben notwendig!

@bekanntmacher
Copy link
Contributor

@tristanlins nein, ist er nicht:

  1. Verschiebungen in der Contao-Dateiverwaltung werden in der DB erfasst > hash nicht nötig
  2. Verschiebungen per FTP unterstehen der Eigenverantwortung und müssen durch das System nicht als Verschiebung wahrgenommen werden. Eine Verschiebung per FTP gilt für das System als delete (Ursprungsort) und add (Zielort) > hash nicht nötig.

@tristanlins
Copy link
Contributor

  1. Verschiebungen per FTP unterstehen der Eigenverantwortung und müssen durch das System nicht als Verschiebung wahrgenommen werden. Eine Verschiebung per FTP gilt für das System als delete (Ursprungsort) und add (Zielort) > hash nicht nötig.

Also soweit ich die definition im Kopf habe, sollten vor allem Verschiebungen via FTP/FS durch den Sync erkannt werden. Deine Aussage ist also falsch. Aber vielleicht kann uns @leofeyer hier aufklären wie die Definition ist.

@BugBuster1701
Copy link
Contributor

Ist mir auch so bekannt, dass u.a. genau die Erkennung der Verschiebungen außerhalb von Contao erkannt werden können eines der Features ist.

@bekanntmacher
Copy link
Contributor

Das ist schon möglich. Es ist als Input meinerseits zu verstehen, das Konzept nochmals genauer anzuschauen...

@ghost
Copy link

ghost commented Mar 5, 2013

Wenn sich das wie oben von mir beschrieben umsetzen lässt, ist auch eine zusätzliche (Performance-)Option einfach zu ergänzen:

  • quick: ganz ohne hashes, Verschiebungen werden nicht erkannt und als add/delete behandelt
  • detect moves: nur für add/deletes werden hashes bestimmt um so Verschiebungen zu erkennen
  • paranoia: alle hashes werden berechnet, das volle Programm.

@backbone87
Copy link
Contributor

@thomaspahl die 3 stufen sind inkonsistenz: mv b a; mv c b <- fail bei detect moves; edit: oder auch nicht, kp grad, aber die ganze sache ist mMn eh zu verwurschtelt, deswegen:

Ich finde den sync für FTP/native FS unnötig, wer sowas brauch muss halt auf native inode listener zurückgreifen... (oder alternativ ein manuelle nachträgliche eingabe im BE)
Wenn jemand was renamed im BE via FS Manager -> alles gut.

Vorallem zu zeiten von JS-Uploadern ist FTP zugang gar nicht mehr so notwendig. Da würde ich lieber mehr arbeit in eine bessere Bedienung des Contao Datei Managers stecken (direct D&D in den Filetree und so sachen)

@NinaG
Copy link
Author

NinaG commented Mar 22, 2013

@backbone87 Deinen letzten Eintrag finde ich irritierend, da mir nicht klar, ist ob ich dich richtig verstehe. Willst du sagen, dass man deiner Meinung nach FTP-Uploader komplett ignorieren soll und Redakteure einen Massenupload oder sehr großen Dateien über den Core-Uploader im Backend versuchen sollen?

Meiner Erfahrung nach, kann man das total vergessen.

Situation 1 - viele neue Daten die in diversen Unterordnern stecken: Schon mal versucht über den aktuellen Core-Uploader von Contao 3 in der Dateiverwaltung mehrere hundert Bilder in diversen Unterordnern auf einen Satz hochzuladen? Via FTP ist das ein Klacks.

Situation 2 - große Dateien: Schon mal versucht im Core-Uploader von Contao 3 auf einem durchschnittlichen Webspace eine große Datei hochzuladen? Sagen wir mal, eine mehrseitige Broschüre mit großflächigen Bildern (~ gerne mal 50 MB), ein etwas längeres Video oder größere Audiodateien? Bilder in Druckqualität für einen Pressebereich? Via FTP kein Problem.

Solange wir also in Contao CORE selbst keinen Uploader haben, der beide Situationen locker und mit entsprechendem Zwischen-Feedback an die Redakteure beherrscht, sollten wir entweder schleunigst eine Lösung für die Probleme rund um die Synchronisation haben oder aber aufhören damit zu werben, dass der Core für größere Websites (mit entsprechenden völlig marktüblichen Anforderungen) geeignet ist.

@leofeyer leofeyer reopened this Mar 23, 2013
@ofriedrich
Copy link

Auf php.net gibt es noch einige Alternativvorschläge bzgl. Performance: http://php.net/manual/de/function.md5-file.php Dort werden als Alternativen zu md5_file() zwei Verfahren genannt, die je nach Dateigröße schneller sind. Sie funktionieren jedoch über exec(), sind also keine Lösung:

  • openssl md5
  • md5sum

Wenn ein File-Hash unbedingt benötigt wird und man es nicht ganz so genau nimmt, wäre es vielleicht ein Weg, den Hash nur über einen Teil der Datei und die Dateigröße zu bilden:
$fh = fopen($file, 'r'); $str = fread($fh, 127); fclose($fh); $hash = md5(filesize($file) . '#' . $str);
Die Wahrscheinlichkeit, dass zwei Dateien exakt gleich groß sind und in den ersten x Bytes identisch sind, ist meiner Meinung nach relativ gering.

Wie NinaG schon schrieb: Upload über FTP muss weiterhin gewährleistet sein. Ich denke da nur an Seiten mit einer Vielzahl an kleinen Bildern oder eben großen Videos oder Druckvorlagen.

Nachtrag: Habe eben mit openssl md5 und md5_file getestet und konnte die auf php.net genannten Geschwindigkeitsvorteile bei großen Dateien nicht nachvollziehen. Wer es ausprobieren möchte, sollte die Tests mehrfach laufen lassen, da sonst u. U. die Geschwindigkeit des Massenspeichers (HDD oder SSD) ungleich in die Messung mit einwirkt.

@backbone87
Copy link
Contributor

@NinaG
Ich schrieb

Da würde ich lieber mehr arbeit in eine bessere Bedienung des Contao Datei Managers stecken ...

... denn, ja, der Standarduploader ist noch kein annähernd gleichwertiger Ersatz für FTP. FTP hat einfach das Problem, das die ausgeführten FS-Commands (move, copy, touch, etc.) nicht an ein externes Script weitergeleitet werden können. Das kann man dann erst auf OS-Ebene wieder (mit einem inode-Listener oder anderen FS-Layern). Deshalb ist eine Software immer "blind auf dem FTP Auge".

@ghost
Copy link

ghost commented Mar 25, 2013

Die derzeitige Dateiverwaltung in der DB ist schick für Dateibestände mit wenigen und kleinen Dateien (was wohl die Mehrzahl der Installationen trifft). Für größere Dateimengen oder große Dateien ist die Architektur der Dateiverwaltung derzeit offenbar unausgereift. Auch meine Krücke zum Sync (weiter oben) dürfte da nur teilweise helfen. Bei großen Dateien ist der Hash kritisch, aber das Problem ist nicht auf den Hash beschränkt:

Testcase: 3.0.6 (core master) update über 3.0.5 Music Academy install.
files/testmany/ neu mit 3000 text files je 93bytes:

  • Dateiverwaltung braucht mehrere Minuten (>5) bis zur Anzeige. Dabei zieht nach einer Weile Firefox 100% einer CPU (dual.core Laptop, Firefox extensions noscript, adblock, ghostery etc. deaktiviert), Server Last nicht auffällig.
  • Debug sagt: 19sec exec, 36MB, 4 DB queries (kein tl_files)
  • bei deaktiviertem Javascript ist die Antwortzeit deutlich kürzer (aber immer noch >>1min)
    Anschließend close des Ordners und Dateisync:
  • response leidlich schnell, debug 21sec, 27MB, 6056 DB queries, 3056 affected

files/testmanygif/ neu mit 1000 gifs (music_adacemy/admin.gif)

  • Dateiverwaltung zeigt Ordner zunächst geschlossen
  • Öffnen des Ordners dauert 1 Kaffeetasse lang (wegen thumbnail Erstellung?) und nur mit mehrfachen reloads je ca. 500 files (Ajax request?)
  • file sync mit nun ca. 4000 kleinen Dateien geht gerade noch

Weitere Beobachtungen:

  • Das Rendering im Browser, was offenbar einen signifikanten Teil der Anzeigezeit frisst, kann man vielleicht ein bisschen (?) positiv beeinflussen, wenn man die >2000 Zeichen je file entry zu verschlanken schafft.
  • Das sync Verfahren ist rekursiv einzeleintrag-orientiert (MVC Schaden?), damit relativ ineffektiv (nutzt die DB Fähigkeiten nicht) und speicherintensiv.
  • Bei einem wiederholten Dateisync werden alle files überflüssigerweise updated, obwohl sich nichts geändert hat. Bei tstamp wäre die file mtime des files sinnvoller als die time des sync, dann wären die updates überflüssig (Logik in DC_Folder::execSync) (die Verschiebung in 3.1 nach Automator::syncFiles ändert wohl nichts an der Logik).
  • Der Fix für Contao 3: add a feature to exclude folders from synchronization #4522 (exclude folders from sync) illustriert die grundlegende Sync-Problematik bestens, eigentlich schwer erklärbares Flickwerk.
  • 2.11.10 hat in der Dateiverwaltung BE-GUI dieselben Mengen-Probleme wie oben die 3.x

Ich habe mal die sources von Drupal, Joomla, Papaya, Typo3, Wordpress auf md5_file() und md5() gescannt, um zu sehen was die so machen. md5_file() kommt überhaupt nur noch in Typo3 vor, die md5() Auswertung ist wegen der Menge etwas mühsam, zumindest in Joomla werden da auch file hashes berechnet
Bei Typo3 gibt es einen interessanten Hinweis im changelog:
* Fixed bug #12232: [Performance] md5_file() to check if a file has been changed is very expensive

Meine Schlussfolgerungen (supporting Nina, bekanntmacher, ..)

  • Der Datenbank-Spiegel des Filesystems ist eigentlich eine feine Sache (wegen meta), aber die derzeitige Implementierung limitiert Contao auf kleine Dateibestände
  • FTP/scp Support wird weiter gebraucht. Auch der beste web uploader ist für große Datenmengen (groß oder viele) eine Zumutung, und für batch updates z.B. aus Firmendatenbank sowieso nicht brauchbar.
  • der file hash wird eigentlich nur zur Erkennung von rename/move außerhalb Contao gebraucht, ansonsten reicht dem ganzen Rest der Welt filepath+size+modtime, warum nicht Contao. Der hash ist den Ärger nicht wert. Wer reorganisieren muss, soll es im Dateimanager machen oder eben das als neue files in Kauf nehmen. Um dabei entstehende Verluste zu entdecken, müssen file ids in CEs odgl. als ordentliche FKs referiert werden.
  • Der Sync (nur mehr auf Basis filepath+size+modtime) sollte "irgendwie" automatisch gehen (s. backbone87: FTP kann nichts anstoßen), evtl. kleinteilig im cron einschleichen mit Hilfe einer workflow/task/action table
  • Für die bei vielen Dateien überforderte Dateimanager GUI muss Besserung her (require gehirnschmalz.php)
  • Für Anwender, die ausreichend Server Zugang haben (root server) - was bei größeren Installationen oft der Fall sein wird - muss es eine batch API geben, die erlaubt, Dinge wie file sync, thumbnail Erstellung, image metadata und anderes automatisch im Hintergrund zu erledigen ohne die Webuser zu belasten.

Damit ihr mich jetzt prügeln könnt, bin ich auf der Konferenz im Entwickler-Workshop...

@ofriedrich
Copy link

@thomaspahl Super! Danke für die ausführliche Analyse. Ähnliches hatte ich bereits befürchtet, ohne den Quelltext gesichtet zu haben.

Die Geschichte mit den Thumbnails ist ein alter Hase, gegen den ich in früheren Versionen von Contao bereits zu kämpfen hatte. Die einzige Lösung damals war: Thumbnail-Preview ausschalten. Nachdem die Thumbnails aus waren, war das System wieder bedienbar. Vermutlich liegt es also an den Bildern. Vielleicht wäre es ein Lösungsansatz, das src-Attribut erst bei Sichtbarkeit per JS mit Inhalt zu füllen. Damals war jedoch die Devise: Das Backend muss auch ohne JS funktionieren...

Jedes Bild erzeugt einen Request. Ist die Frage, was hier wirklich passiert, was den Browser in die Knie zwingt, wenn mehrere Tausend Bilder geladen werden sollen...

btw. Was ich nicht sonderlich gelungen finde, ist, dass file-sync nur als Admin möglich ist. Damit müsste ich einem Kunden, der seine Dateien per ftp bereit stellt, Adminrechte geben. Wozu soll diese nicht konfigurierbare Einschränkung gut sein?

@ghost
Copy link

ghost commented Mar 25, 2013

@ofriedrich Die Display-Problematik des Dateimanagers bei vielen Dateien hängt nicht an Bildern und evtl. 1000 Nachlade-Request. Bei Anzeige von 3000 .txt Dateien wird nur 1 Request an den Server geschickt (der für die Seite), die Icons sind gecacht, ebenso CSS etc. Hier kommt der Browser beim Rendern ins Schwitzen (der HTML Quellcode ist fast 7MB). Bei den 1000 kleinen Bilddateien sieht man zwar das Laden, aber eigentlich stecken Server und Browser das im erwarteten Umfang weg, auch hier ist das anschließende Rendern der Schwerpunkt (man kann den Sprung in CPU sehr genau sehen). Müssen Thumbnails erst generiert werden, ist der Server erst lange am Rödeln bevor er den ersten Output produziert - wenn er es denn schafft, da häufen sich die HTTP 500 errors.

@leofeyer
Copy link
Member

In 3a57b90 wurden umfangreiche Änderungen am DBAFS vorgenommen.

@xchs
Copy link
Contributor

xchs commented Mar 30, 2013

DBAFS := Database Assisted File System

oder

DBAFS := Database Aided File System

?

@leofeyer
Copy link
Member

Beides ist möglich. "aided" ist ein bisschen technischer (es gibt z.B. "computer-aided" oder "machine-aided") und "assisted" ist ein bisschen allgemeiner (wobei es auch "computer-assisted" gibt).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

9 participants