<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Schnelles Lesen und Schreiben von großen Datenmengen]]></title><description><![CDATA[<p>Liebe Community,</p>
<p>ich brauche mal einen Tipp, wie ich am schnellsten von Dateien lesen und schreiben kann - ich brauche keinen Code, sondern eher Stichwörter mit was ich mich befassen sollte.<br />
Hier das Problem:<br />
Ich verarbeite Messdaten die in mehreren Textdateien gespeichert werden (Gesamtgröße jeder Datei sind mehrere GB). Jede txt datei ist wie folgt aufgebaut:</p>
<p>&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
....</p>
<p>sind insgesamt über 100 Millionen Zeilen in verschiedenen Files.</p>
<p>So was muss ich tun:<br />
1. Schritt jedes File einlesen und eine gleichbleibende Nummer hinzufügen und in ein gemeinsames neues File schreiben, dass dann wie folgt aussieht</p>
<p>&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
.....</p>
<p>Dieses sortiere ich dann anschließend.</p>
<p>2. Schritt: Das sortierte File wird wieder eingelesen und ich brauche jeden einzelnen Wert eine Zeile als neue Variable.</p>
<p>Momentan arbeite ich mit ifstream und ofstream und lese und schreibe jede Zeile einzeln neu - das muss aber doch schneller gehen oder?</p>
<p>Ob nun C oder C++ ist mir eigentlich auch egal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wäre super wenn ihr mir ein paar Tipps geben könnt.</p>
<p>Liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331110/schnelles-lesen-und-schreiben-von-großen-datenmengen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 15 Jun 2026 20:16:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331110.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Feb 2015 10:21:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Wed, 11 Feb 2015 10:21:09 GMT]]></title><description><![CDATA[<p>Liebe Community,</p>
<p>ich brauche mal einen Tipp, wie ich am schnellsten von Dateien lesen und schreiben kann - ich brauche keinen Code, sondern eher Stichwörter mit was ich mich befassen sollte.<br />
Hier das Problem:<br />
Ich verarbeite Messdaten die in mehreren Textdateien gespeichert werden (Gesamtgröße jeder Datei sind mehrere GB). Jede txt datei ist wie folgt aufgebaut:</p>
<p>&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt;<br />
....</p>
<p>sind insgesamt über 100 Millionen Zeilen in verschiedenen Files.</p>
<p>So was muss ich tun:<br />
1. Schritt jedes File einlesen und eine gleichbleibende Nummer hinzufügen und in ein gemeinsames neues File schreiben, dass dann wie folgt aussieht</p>
<p>&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
&lt;double&gt; &lt;float&gt; &lt;float&gt; &lt;integer&gt;<br />
.....</p>
<p>Dieses sortiere ich dann anschließend.</p>
<p>2. Schritt: Das sortierte File wird wieder eingelesen und ich brauche jeden einzelnen Wert eine Zeile als neue Variable.</p>
<p>Momentan arbeite ich mit ifstream und ofstream und lese und schreibe jede Zeile einzeln neu - das muss aber doch schneller gehen oder?</p>
<p>Ob nun C oder C++ ist mir eigentlich auch egal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wäre super wenn ihr mir ein paar Tipps geben könnt.</p>
<p>Liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442226</guid><dc:creator><![CDATA[Lummel202]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Wed, 11 Feb 2015 10:29:22 GMT]]></title><description><![CDATA[<p>Halo,</p>
<p>bzgl. lesen und schreiben wird Werner Salomon dir wohl irgendwann die perfekte Antwort geben.</p>
<p>Ich hab nur eine Frage zur Verarbeitung:</p>
<blockquote>
<p>Dieses sortiere ich dann anschließend.</p>
</blockquote>
<p>Warum anschliessend?<br />
Du sortierst doch nach &lt;integer&gt; und &lt;integer&gt; wird nach Src-File vergeben oder?<br />
Dann kannst du das doch gleich in der richtigen Reihenfolge schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442229</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:29:22 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Wed, 11 Feb 2015 10:31:54 GMT]]></title><description><![CDATA[<p><a href="https://github.com/BoostGSoC13/boost.afio" rel="nofollow">https://github.com/BoostGSoC13/boost.afio</a><br />
<a href="http://boostgsoc13.github.io/boost.afio/doc/html/afio.html" rel="nofollow">http://boostgsoc13.github.io/boost.afio/doc/html/afio.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442230</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Wed, 11 Feb 2015 10:51:54 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Halo,</p>
<p>bzgl. lesen und schreiben wird Werner Salomon dir wohl irgendwann die perfekte Antwort geben.</p>
<p>Ich hab nur eine Frage zur Verarbeitung:</p>
<blockquote>
<p>Dieses sortiere ich dann anschließend.</p>
</blockquote>
<p>Warum anschliessend?<br />
Du sortierst doch nach &lt;integer&gt; und &lt;integer&gt; wird nach Src-File vergeben oder?<br />
Dann kannst du das doch gleich in der richtigen Reihenfolge schreiben.</p>
</blockquote>
<p>Problem ist im Grunde habe ich verschiedene Detektoren. Die Doublezahl ist eine Zeitangabe. Deshalb schreibe ich die einzelnen Messergebnisse pro Detektor in ein File und füge die Detektornummer hinzu - dann sortiere ich alles nach der Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442232</guid><dc:creator><![CDATA[Lummel202]]></dc:creator><pubDate>Wed, 11 Feb 2015 10:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Wed, 11 Feb 2015 12:19:40 GMT]]></title><description><![CDATA[<p>Hallo Lummel202,</p>
<p>Du kannst Dich hier <a href="https://www.c-plusplus.net/forum/310076-full">https://www.c-plusplus.net/forum/310076-full</a> schon mal einlesen.<br />
Details vielleicht später.</p>
<p>Wenn eine(!) der Dateien schon mehrere GByte groß ist - gehen die Daten aus dieser Datei dann noch in einem Stück in den Speicher?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442237</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 11 Feb 2015 12:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Thu, 12 Feb 2015 15:45:38 GMT]]></title><description><![CDATA[<p>Super, die fgets methode beschleunigt mein Einlesen der Daten ungemein.<br />
Allerdings ist das schreiben der Flaschenhals wenn ich das richtig sehe.<br />
Da ich immernoch die Daten einzeln abschreibe, gibt es irgendwie eine Möglichkeit immer en Block die Daten zu schreiben?<br />
Habe versucht die Daten in einen Vektor zu speichern und sobald dieser eine gewisse länge hat diesen abzuspeichern. Allerdings klappt das abspeichern nicht. Ist das generell sinnvoll?<br />
Welche Möglichkeiten habe ich denn noch?</p>
<p>Liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442452</guid><dc:creator><![CDATA[Lummel202]]></dc:creator><pubDate>Thu, 12 Feb 2015 15:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Schnelles Lesen und Schreiben von großen Datenmengen on Thu, 12 Feb 2015 18:07:50 GMT]]></title><description><![CDATA[<p>Lummel202 schrieb:</p>
<blockquote>
<p>Allerdings ist das schreiben der Flaschenhals wenn ich das richtig sehe.</p>
</blockquote>
<p>Ich sehe nicht ein warum das so sein muss. Probier's doch einfach mal aus.</p>
<p>Lummel202 schrieb:</p>
<blockquote>
<p>Da ich immernoch die Daten einzeln abschreibe, gibt es irgendwie eine Möglichkeit immer en Block die Daten zu schreiben?</p>
</blockquote>
<p>Die <code>FILE*</code> bzw. <code>std::ostream</code> Implementierungen verwenden IIRC auch beim Schreiben einen eigenen Puffer, rufen also nicht wegen jedem Byte die OS-Funktion zum Schreiben in das File auf.<br />
Davon unabhängig kannst du natürlich immer selbst Daten zusammensammeln und dann am Stück rausschreiben.</p>
<p>Lummel202 schrieb:</p>
<blockquote>
<p>Habe versucht die Daten in einen Vektor zu speichern und sobald dieser eine gewisse länge hat diesen abzuspeichern. Allerdings klappt das abspeichern nicht.</p>
</blockquote>
<p>Das klappt wunderbar - wenns bei dir nicht geht hast du vermutlich was falsch gemacht.</p>
<p>Lummel202 schrieb:</p>
<blockquote>
<p>Ist das generell sinnvoll?<br />
Welche Möglichkeiten habe ich denn noch?</p>
</blockquote>
<p>Kommt drauf an. Ich würde sagen es ist generell sinnvoll, wenn man denn überhaupt ein Performance-Problem beim Schreiben hat. Und andere möglichkeiten sehe ich nicht wirklich.<br />
Sind ja eigentlich nur zwei Sachen die Zeit kosten können:</p>
<ol>
<li>Die eigentliche Serialisierung, also das Verwandeln von was auch immer du in deinen Objekten stehen hast in eine Bytewurst die man in ein File schreiben kann<br />
und</li>
<li>Das Schreiben der serialisierten Daten in ein File</li>
</ol>
<p>Die beiden Vorgänge kann man recht gut getrennt voneinander optimieren. Und Teil (2) kann man quasi nur durch &quot;puffern und grössere Blöcke schreiben&quot; beschleunigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442486</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 18:07:50 GMT</pubDate></item></channel></rss>