AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

Ein Thema von stalkingwolf · begonnen am 16. Mär 2021 · letzter Beitrag vom 17. Mär 2021
Antwort Antwort
Seite 2 von 3     12 3   
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.710 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#11

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 10:52
Das geht nicht. Der Content ist nicht von aussen erreichbar.
Nur zum Verständnis meinerseits:
Ihr telefoniert doch per REST-Komponenten mit irgendeiner Art Gegenstelle über Netzwerk/Internet, um das Array zu bekommen, richtig?
Also bspw. https://api.predic8.de/shop/products/

Kann man das nicht so umändern, dass ihr Zugriff auf das einzelne Item habt?
https://api.predic8.de/shop/products/62

Und das Image holt ihr euch dann z.B. so:
https://api.predic8.de/shop/products/62/photo
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
363 Beiträge
 
#12

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 13:02
Ja und nein.
Es kann sein das der Webserver und der Fileserver zwei verschiedene Maschinen sind.
Dazu trennen wir dies mit Absicht.
d.h von aussen kann nur per API/JSON auf Daten zugegriffen und Dateien ausgetauscht werden.

Ich hab es nun so gelöst das ich mir erst den JSONArray mit der Filelist und danach die Dateien einzeln herunterlade.
Damit sieht der Kunde auch Progress pro Datei. Zugegeben sind 144MB per JSON auszutauschen im WLAN etwas zäh
Aber wenn der Kunde 5000x3000 Bilder hochladen muss, dann muss er damit leben.
Ist ja nur 1x am Tag.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.096 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 13:29
Binärdaten in JSON sind halt bissl unpraktisch.

ein Schmankl aus DataSnap
* das kann Binär oder JSON/REST (der große RAD-Server kann nur JSON)
* im JSON ist mehr Traffic und alles wird extrem langsam
* * das liegt aber nicht nur daran, dass es selbst bei Base64 33% mehr Daten sind
* Bei der Rest-API, wenn als Rückgabewert nur ein "Stream" kommt, dann wird Binär rausgegeben, anstatt JSON (hier wird also die Einschränkung seitens JSON umgangen)
* reinzu muß aber alles ins JSON (oder als Parameter in die URL)

Wenn das JSON wirklich extrem groß wird, dann muß man eben mit 64 Bit arbeiten, oder man besorgt sich einen JSON-Parser/Reader/Writer, der nicht alles auf einmal ins DOM lädt, sondern stückchenweise einliest/verarbeitet, bzw. speichert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (16. Mär 2021 um 14:53 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.710 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#14

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 13:35
Ja und nein.
Es kann sein das der Webserver und der Fileserver zwei verschiedene Maschinen sind.
Dazu trennen wir dies mit Absicht.
d.h von aussen kann nur per API/JSON auf Daten zugegriffen und Dateien ausgetauscht werden.
Ich verstehe immer noch nicht.
Kannst du den Webserver so abändern, dass ihr über die Kette Client -> Webserver -> Fileserver die Dateien holen könnt?
Du kannst temporäre Image-URLs verwenden oder die Bilder im Webserver cachen.

Beispiel:
https://api.predic8.de/shop/products/62/photo

NOCHMAL: Ziel ist es nicht, sich eine URL vom Fileserver geben zu lassen, sondern eine direkt vom Client abrufbare URL für die Binärdaten vom Webserver zu erhalten. So spart man sich das ganze Base64 Geraffel und muss dann auch wirklich nur die Bilder laden, die man dann braucht.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
363 Beiträge
 
#15

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 13:57
Ich bin ehrlich gesagt auf Seiten vom Webserver überfragt was machbar ist und ob das in dem Szenario Sinn ergibt.

Ich spreche es einmal mit dem Mitarbeiter durch welcher bei uns die Webserver administriert.
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
363 Beiträge
 
#16

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 17:01
Nachtrag : Ich versuche mit REST Kompression zu testen, aber irgendwie will das nicht so.
Folgender Artikel https://www.developer-experts.net/20...t-kompression/

Wir haben in unserem Apache deflate Modul auch eingetragen inkl mod_filter.conf AddOutputFilterByType DEFLATE application/json
Aber als Content Encoding erhalte ich immer leer zurück.

Bin mir nicht sicher ob das Problem auf Delphi oder Webserver Seite liegt.
Wollte daher es mit RESTClient in Firefox testen, aber die haben es deaktiviert.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
569 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 17:21
Das ist keine REST-Kompression, sondern eine Kompression auf dem Transportweg. Das soll dafür sorgen, dass die Daten schneller beim Client landen, ändert aber speziell in deinem Fall nichts an der Größe des Arrays im Speicher.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
111 Beiträge
 
#18

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 17:21
Hätte ein paar allgemeine Fragen. Du schreibst FMX aber nicht welche Plattform. Könnt/wollt ihr Fremdkomponenten einsetzen? Wie sieht das Schema der JSON-Datei (ein Objekt) aus?

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.096 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 18:23
Zitat:
Das ist keine REST-Kompression, sondern eine Kompression auf dem Transportweg. Das soll dafür sorgen, dass die Daten schneller beim Client landen, ändert aber speziell in deinem Fall nichts an der Größe des Arrays im Speicher.
Jupp, im Gegenteil, es verbraucht lokal sogar mehr.

Das kommt komprimiert rein und wird entpackt, bevor es bei dir landert, wo die Daten/Datenblöcke somit doppelt im Speicher liegen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.916 Beiträge
 
Delphi 2010 Enterprise
 
#20

AW: JSONValue zu wenig Arbeitsspeicher bei Array von 100MB

  Alt 16. Mär 2021, 19:13
JPEG ist meist auch bereits mehr oder weniger stark komprimiert. Ein Stream Kompressor, der nicht so rumtrödeln darf, wird da nicht so viel bringen.
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf