Ich brauche Hilfe! Ich kann das Problem nicht lösen, ich stoße an die Grenzen der Hardware - Seite 3

 

Sorry Dummies, gibt es eine Einschränkung in x64? hier ist der erste Artikel, den ich kam über (na ja, nicht die erste, ok) RAM-Beschränkung für SQL SERVER 2008 unter x64-System - so viel RAM wie die Basis isst.

Vielleicht sollten Sie es einmal versuchen.

ps vielleicht nützlich 4 GB Speicherlimit auf 32 Bit Windows 8 / 8.1 entfernen

 
komposter:

Es gibt eine große Menge an Informationen (etwa 20 GB in einer Textdatei ).

Warum also Text? Wäre es nicht einfacher, die Daten zunächst in binäre Form umzuwandeln? Dann könnte man eine geeignete Größe erhalten:

Es ist frustrierend, wie viele Informationen es gibt... Wenn es 10 GiG wären, würde ich es auf die RAM-Disk verschieben (tatsächlich in den Speicher) und so viel lesen, wie ich kann.

 
meat:

Warum also Text? Wäre es nicht einfacher, die Daten zunächst in das Binärformat zu konvertieren? Dann können Sie sehen, ob die Größe stimmt:

Es sieht also so aus, als ob 20 Gigabyte nicht die Grenze sind.
 

Upgrade auf die 64-Bit-Version - bis zu 16 TB RAM sind verfügbar.

Speichern Sie die Datei in binärer Form, um sie schneller lesen zu können.

Verarbeiten Sie die Datei entsprechend der RAM-Größe in Chunks.

Versuchen Sie, Daten vorzuverarbeiten, um doppelte Informationen zu eliminieren.

 
komposter:

Es gibt eine große Menge an Informationen (etwa 20 GB in einer Textdatei).

...

Und wenn es nötig wäre, diese Sequenzen einmal durchzugehen, würde ich das tun. Aber man muss sie immer wieder durchgehen und sich dabei jedes Mal ein bisschen nach vorne bewegen.

...

Und wenn Sie sie in Stücken verarbeiten?

Lesen Sie zwei Chunks mit jeweils 1 GB. Der erste Chunk wird verarbeitet, und der nächste Durchlauf fügt den zweiten Chunk hinzu, "...und verschiebt sich ein wenig nach vorne". Gleichzeitig schneiden Sie den Anfang des ersten Chunks ab (er wird nicht mehr benötigt, da er immer "...shifting forward a bit" ist). Wenn der zweite Chunk fertig ist, lesen Sie den dritten Chunk - und fügen nun vom dritten Chunk "...shifting forward a bit" hinzu. Auf diese Weise befinden sich immer zwei Chunks im RAM (maximal 2 GB) und der Zugriff auf die Festplatte wird um eine Größenordnung reduziert.

 
GT788:

Upgrade auf die 64-Bit-Version - bis zu 16 TB RAM sind verfügbar.

Speichern Sie die Datei in binärer Form, um sie schneller lesen zu können.

Verarbeiten Sie die Datei entsprechend der RAM-Größe in Chunks.

Versuchen Sie, Daten vorzuverarbeiten, um doppelte Informationen zu eliminieren.

Selbst XPpro x64 unterstützt physische bis zu 128 und virtuelle bis zu 16 TB.

 
Silent:

Selbst XPpro x64 unterstützt physische bis zu 128 und virtuelle bis zu 16 TB.

Das stimmt, ich habe die maximalen 192 GB für 7 gefunden.
 
komposter:

Es gibt eine große Menge an Informationen (etwa 20 GB in einer Textdatei).

Die Informationen bestehen aus der gleichen Art von Sequenzen, etwa einer Million davon.

Es ist notwendig, alle Sequenzenwiederholt durchzugehen und einige Berechnungen anzustellen.

Das erste, was einem in den Sinn kommt, ist, den gesamten Inhalt der Datei zu lesen, das Array der Strukturen damit zu füllen und mit ihnen im Speicher zu arbeiten.

Aber es hat nicht funktioniert, bei der nächsten Größenänderung meldet MT "Memory handler: cannot allocate 5610000 bytes of memory".

Dispatcher zeigt, dass terminal.exe 3,5 GB RAM (von 16 physischen) verwendet. Ich nehme an, dass dies daran liegt, dass der Prozess nur 4 GB erhalten kann.

EA meldet "Nicht genug Speicher(4007 Mb verwendet, 88 Mb verfügbar, 4095 Mb insgesamt)!!!".

Und das sind nur 15,3 % des erforderlichen Betrags (und ich möchte ihn auch in Zukunft erhöhen).

Ich habe keine Phantasie mehr.

Soll ich versuchen, diese Sequenzen so zusammenzusetzen, dass ich viele, viele Stücke erhalte, von denen jedes aber nur die im Moment notwendigen Informationen enthält?

Versuchen Sie auch, die Daten zu komprimieren (ich habe bereits überall, wo ich kann, auf Floats mit Char-Typen umgestellt)? Aber das wird mir höchstens weitere 10-20% bringen, und ich muss das Volumen um eine Größenordnung reduzieren...

Habt ihr einen Rat, Freunde? Ich werde nicht rosten).

Und in die Richtung der Nutzung der Datenbank haben Sie nicht geschaut? Stellen Sie die Datenbank ein, indem Sie die Daten aus einer Textdatei herunterladen. Sie können beliebige Datenaggregationen im Voraus für zukünftige Berechnungen durchführen.

SQL-Abfragen aus dem Expert Advisor.

Das DBMS kann auch auf einen separaten Server gelegt werden, um die Leistung der Handelsstation zu erhöhen.

 

Vielen Dank an alle für Ihre Teilnahme!

Ich bin jetzt über das Wochenende offline, aber ich werde allen morgen früh antworten und versuchen, die Ratschläge zu beherzigen.

 
elugovoy:

Haben Sie die Verwendung einer Datenbank in Betracht gezogen? Richten Sie eine Datenbank ein und laden Sie Daten aus einer Textdatei in die Datenbank. Es ist möglich, vorher eine Art von Datenaggregation für weitere Berechnungen durchzuführen.

Und dann die SQL-Abfragen des Expert Advisors...

Das DBMS kann auf einem separaten Server installiert werden, um die Leistung zu erhöhen.

Ich habe darüber nachgedacht. Ich bin an Meinungen interessiert:

komposter:

Ein anderer Gedanke ist, alles in eine Datenbank (MySQL?) zu verschieben und mit dieser zu arbeiten. Die Idee ist, dass Datenbanken für solche Mengen und ständiges Wiederaufbereiten ausgelegt sind.

Gibt es irgendwelche Experten? Wer hat eine Meinung?

Wie groß ist die Beschleunigung im Vergleich zum Lesen einer Datei und wie groß ist die Verlangsamung im Vergleich zur Arbeit im Speicher?