<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Speicherung</id>
	<title>Speicherung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Speicherung"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Speicherung&amp;action=history"/>
	<updated>2026-08-19T16:06:52Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Dokument</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=Speicherung&amp;diff=37&amp;oldid=prev</id>
		<title>Thorsten am 12. August 2026 um 14:38 Uhr</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Speicherung&amp;diff=37&amp;oldid=prev"/>
		<updated>2026-08-12T14:38:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 12. August 2026, 14:38 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Wissensspeicherung ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Wissensspeicherung ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l282&quot;&gt;Zeile 282:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 284:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Rust]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Rust]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Datenspeicherung]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Datenspeicherung]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==Hinweis==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thorsten</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=Speicherung&amp;diff=35&amp;oldid=prev</id>
		<title>Thorsten: Die Seite wurde neu angelegt: „== Wissensspeicherung ==  Dieser Artikel beschreibt zunächst das allgemeine Konzept der Wissensspeicherung und geht anschließend auf die konkrete technische Umsetzung in Rust ein.  == Allgemeines Konzept der Wissensspeicherung ==  Bevor man eine konkrete Technik wählt, lohnt sich der Blick auf das allgemeine Konzept: Wie wird aus rohen Daten überhaupt &quot;Wissen&quot;, und wie wird dieses Wissen in einem System organisiert und gespeichert?  === Von Daten zu W…“</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Speicherung&amp;diff=35&amp;oldid=prev"/>
		<updated>2026-08-12T14:32:58Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „== Wissensspeicherung ==  Dieser Artikel beschreibt zunächst das allgemeine Konzept der Wissensspeicherung und geht anschließend auf die konkrete technische Umsetzung in Rust ein.  == Allgemeines Konzept der Wissensspeicherung ==  Bevor man eine konkrete Technik wählt, lohnt sich der Blick auf das allgemeine Konzept: Wie wird aus rohen Daten überhaupt &amp;quot;Wissen&amp;quot;, und wie wird dieses Wissen in einem System organisiert und gespeichert?  === Von Daten zu W…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Wissensspeicherung ==&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt zunächst das allgemeine Konzept der Wissensspeicherung und geht anschließend auf die konkrete technische Umsetzung in Rust ein.&lt;br /&gt;
&lt;br /&gt;
== Allgemeines Konzept der Wissensspeicherung ==&lt;br /&gt;
&lt;br /&gt;
Bevor man eine konkrete Technik wählt, lohnt sich der Blick auf das allgemeine Konzept: Wie wird aus rohen Daten überhaupt &amp;quot;Wissen&amp;quot;, und wie wird dieses Wissen in einem System organisiert und gespeichert?&lt;br /&gt;
&lt;br /&gt;
=== Von Daten zu Wissen: die DIKW-Hierarchie ===&lt;br /&gt;
&lt;br /&gt;
Ein verbreitetes Modell zur Einordnung ist die &amp;#039;&amp;#039;&amp;#039;DIKW-Pyramide&amp;#039;&amp;#039;&amp;#039; (Data – Information – Knowledge – Wisdom):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Stufe !! Beschreibung !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Daten&amp;#039;&amp;#039;&amp;#039; (Data) || rohe, unverarbeitete Symbole/Werte ohne Kontext || &amp;lt;code&amp;gt;23&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Information&amp;#039;&amp;#039;&amp;#039; || Daten mit Kontext/Bedeutung || &amp;quot;Die Temperatur beträgt 23 °C&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Wissen&amp;#039;&amp;#039;&amp;#039; (Knowledge) || Information verknüpft mit Erfahrung/Regeln, nutzbar für Entscheidungen || &amp;quot;Bei 23 °C sollte man nicht heizen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Weisheit&amp;#039;&amp;#039;&amp;#039; (Wisdom) || begründete Anwendung von Wissen im Kontext || &amp;quot;Wann sich Heizen trotzdem lohnt&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ein Wissensspeicher (Knowledge Store) zielt darauf ab, mindestens die Ebene &amp;quot;Wissen&amp;quot; abzubilden – also nicht nur Rohwerte, sondern auch deren Bedeutung, Kontext und Beziehungen untereinander.&lt;br /&gt;
&lt;br /&gt;
=== Explizites vs. implizites Wissen ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Explizites Wissen&amp;#039;&amp;#039;&amp;#039; – lässt sich klar formulieren, dokumentieren und speichern (Texte, Regeln, Datenbankeinträge, Diagramme).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Implizites/Tacit Wissen&amp;#039;&amp;#039;&amp;#039; – erfahrungsbasiertes Wissen, das schwer zu formalisieren ist (Intuition, Handlungswissen).&lt;br /&gt;
&lt;br /&gt;
Wissenssysteme können nur explizites Wissen direkt speichern; implizites Wissen muss zuerst &amp;quot;externalisiert&amp;quot; werden (z. B. durch Dokumentation, Interviews, Modellierung), bevor es in ein System aufgenommen werden kann. Dieser Prozess wird oft mit dem &amp;#039;&amp;#039;&amp;#039;SECI-Modell&amp;#039;&amp;#039;&amp;#039; (Sozialisierung, Externalisierung, Kombination, Internalisierung) beschrieben.&lt;br /&gt;
&lt;br /&gt;
=== Formen der Wissensrepräsentation ===&lt;br /&gt;
&lt;br /&gt;
Damit Wissen maschinell gespeichert und verarbeitet werden kann, muss es in eine Repräsentationsform gebracht werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Repräsentationsform !! Prinzip !! Typische Systeme&lt;br /&gt;
|-&lt;br /&gt;
| Unstrukturierter Text || freier Text, Volltextsuche || Wikis, Dokumentenablagen, CMS&lt;br /&gt;
|-&lt;br /&gt;
| Strukturierte Datensätze || feste Felder/Schema || relationale Datenbanken, Tabellen&lt;br /&gt;
|-&lt;br /&gt;
| Schlüssel-Wert-Paare || einfache Zuordnung Key → Wert || Key-Value-Stores, Caches&lt;br /&gt;
|-&lt;br /&gt;
| Graphen/Netze || Entitäten + Beziehungen || Knowledge Graphs, Ontologien (RDF, OWL)&lt;br /&gt;
|-&lt;br /&gt;
| Regeln/Logik || Wenn-Dann-Regeln, Fakten || Expertensysteme, regelbasierte Systeme&lt;br /&gt;
|-&lt;br /&gt;
| Vektoren/Embeddings || semantische Nähe im Vektorraum || Vektordatenbanken, KI-/RAG-Systeme&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In der Praxis kombinieren viele Systeme mehrere Formen, z. B. ein Wiki (Text) mit Kategorien und Verlinkungen (graphartige Struktur) und einer Volltextsuche (Index).&lt;br /&gt;
&lt;br /&gt;
=== Aufbau eines Wissenssystems (Knowledge System) ===&lt;br /&gt;
&lt;br /&gt;
Ein typisches Wissenssystem durchläuft folgenden Lebenszyklus:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Erfassen&amp;#039;&amp;#039;&amp;#039; (Capture) – Wissen aus Quellen (Personen, Dokumenten, Messwerten) aufnehmen&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Strukturieren&amp;#039;&amp;#039;&amp;#039; (Organize) – Kategorisieren, Verschlagworten, in ein Schema/Modell bringen&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Speichern&amp;#039;&amp;#039;&amp;#039; (Store) – dauerhafte Ablage in Datei, Datenbank oder Graph&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Abrufen&amp;#039;&amp;#039;&amp;#039; (Retrieve) – Suche, Abfragen, Navigation, Vernetzung mit anderem Wissen&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Pflegen/Aktualisieren&amp;#039;&amp;#039;&amp;#039; (Maintain) – Widersprüche auflösen, veraltetes Wissen korrigieren oder entfernen&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Weitergeben&amp;#039;&amp;#039;&amp;#039; (Share) – Zugriff für andere Personen/Systeme ermöglichen&lt;br /&gt;
&lt;br /&gt;
Klassische Beispiele für Wissenssysteme sind Wikis (wie dieses hier), Knowledge Bases im Support-Kontext, Ontologien/Knowledge Graphs (z. B. Wikidata), Dokumentenmanagementsysteme sowie – im technischen Umfeld – Programme, die Wissen in Datenstrukturen abbilden und mittels der im Folgenden beschriebenen Techniken persistieren.&lt;br /&gt;
&lt;br /&gt;
=== Bezug zur technischen Umsetzung ===&lt;br /&gt;
&lt;br /&gt;
Die im nächsten Abschnitt beschriebenen Rust-Techniken (Structs, serde, Dateien, Key-Value-Stores, Datenbanken) sind die &amp;#039;&amp;#039;&amp;#039;technische Speicherschicht&amp;#039;&amp;#039;&amp;#039; für die oben genannte Stufe &amp;quot;Speichern&amp;quot;. Welche Repräsentationsform (Tabelle, Key-Value, Graph, Text) gewählt wird, bestimmt dabei maßgeblich, welche Rust-Bibliothek/Datenbank sinnvoll ist:&lt;br /&gt;
&lt;br /&gt;
* Strukturierte Datensätze mit Beziehungen → relationale Datenbank (rusqlite, sqlx, diesel)&lt;br /&gt;
* Einfache Schlüssel-Wert-Zuordnungen → Key-Value-Store (sled, redb)&lt;br /&gt;
* Einzelne Dokumente/Konfiguration → Datei + serde (JSON/TOML/YAML)&lt;br /&gt;
* Vernetztes Wissen (Graph) → Graphdatenbank-Anbindung oder eigene Graphstruktur mit Adjazenzlisten&lt;br /&gt;
&lt;br /&gt;
== Wissensspeicherung in Rust ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt beschreibt die gängigen Methoden, um Daten (&amp;quot;Wissen&amp;quot;) in Rust-Programmen dauerhaft zu speichern und wieder zu laden – von einfachen Dateien bis zu vollwertigen Datenbanken.&lt;br /&gt;
&lt;br /&gt;
=== Überblick ===&lt;br /&gt;
&lt;br /&gt;
In Rust gibt es keine &amp;quot;eingebaute&amp;quot; Persistenzschicht wie in manchen anderen Sprachen. Stattdessen kombiniert man:&lt;br /&gt;
&lt;br /&gt;
# eine &amp;#039;&amp;#039;&amp;#039;Datenstruktur&amp;#039;&amp;#039;&amp;#039; im Speicher (&amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HashMap&amp;lt;/code&amp;gt;, …)&lt;br /&gt;
# eine &amp;#039;&amp;#039;&amp;#039;Serialisierungsbibliothek&amp;#039;&amp;#039;&amp;#039;, die diese Struktur in ein Speicherformat umwandelt (meist [https://serde.rs serde])&lt;br /&gt;
# ein &amp;#039;&amp;#039;&amp;#039;Speicherziel&amp;#039;&amp;#039;&amp;#039;: Datei, Key-Value-Store oder relationale/eingebettete Datenbank&lt;br /&gt;
&lt;br /&gt;
Die Wahl hängt davon ab, wie groß die Datenmenge ist, ob nebenläufiger Zugriff nötig ist und ob Abfragen (Queries) oder nur einfaches Laden/Speichern gebraucht werden.&lt;br /&gt;
&lt;br /&gt;
=== 1. Daten im Arbeitsspeicher modellieren ===&lt;br /&gt;
&lt;br /&gt;
Der erste Schritt ist immer, das &amp;quot;Wissen&amp;quot; als Rust-Typen zu modellieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Notiz {&lt;br /&gt;
    id: u32,&lt;br /&gt;
    titel: String,&lt;br /&gt;
    inhalt: String,&lt;br /&gt;
    tags: Vec&amp;lt;String&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solche Structs sind die Grundlage für alle folgenden Speichermethoden.&lt;br /&gt;
&lt;br /&gt;
=== 2. Serialisierung mit serde ===&lt;br /&gt;
&lt;br /&gt;
Die Standardlösung in Rust ist die Crate &amp;#039;&amp;#039;&amp;#039;serde&amp;#039;&amp;#039;&amp;#039; (&amp;quot;SERialize/DEserialize&amp;quot;) zusammen mit einem Format wie &amp;lt;code&amp;gt;serde_json&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;serde_yaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;toml&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;bincode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cargo.toml:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[dependencies]&lt;br /&gt;
serde = { version = &amp;quot;1&amp;quot;, features = [&amp;quot;derive&amp;quot;] }&lt;br /&gt;
serde_json = &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Struct annotieren:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#[derive(serde::Serialize, serde::Deserialize)]&lt;br /&gt;
struct Notiz {&lt;br /&gt;
    id: u32,&lt;br /&gt;
    titel: String,&lt;br /&gt;
    inhalt: String,&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Speichern (Serialisieren) in eine Datei:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use std::fs;&lt;br /&gt;
&lt;br /&gt;
fn speichern(notiz: &amp;amp;Notiz) -&amp;gt; std::io::Result&amp;lt;()&amp;gt; {&lt;br /&gt;
    let json = serde_json::to_string_pretty(notiz).unwrap();&lt;br /&gt;
    fs::write(&amp;quot;notiz.json&amp;quot;, json)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Laden (Deserialisieren):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fn laden() -&amp;gt; std::io::Result&amp;lt;Notiz&amp;gt; {&lt;br /&gt;
    let text = fs::read_to_string(&amp;quot;notiz.json&amp;quot;)?;&lt;br /&gt;
    let notiz: Notiz = serde_json::from_str(&amp;amp;text).unwrap();&lt;br /&gt;
    Ok(notiz)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Gängige Formate mit serde ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Format !! Crate !! Vorteil !! Einsatz&lt;br /&gt;
|-&lt;br /&gt;
| JSON || &amp;lt;code&amp;gt;serde_json&amp;lt;/code&amp;gt; || menschenlesbar, weit verbreitet || Konfiguration, APIs, Austauschformate&lt;br /&gt;
|-&lt;br /&gt;
| TOML || &amp;lt;code&amp;gt;toml&amp;lt;/code&amp;gt; || sehr gut lesbar, für Configs gedacht || Konfigurationsdateien&lt;br /&gt;
|-&lt;br /&gt;
| YAML || &amp;lt;code&amp;gt;serde_yaml&amp;lt;/code&amp;gt; || kompakt, lesbar || Konfiguration&lt;br /&gt;
|-&lt;br /&gt;
| Bincode || &amp;lt;code&amp;gt;bincode&amp;lt;/code&amp;gt; || binär, sehr schnell, kompakt || interne Persistenz, Caches&lt;br /&gt;
|-&lt;br /&gt;
| MessagePack || &amp;lt;code&amp;gt;rmp-serde&amp;lt;/code&amp;gt; || binär, kompakt, sprachübergreifend || Netzwerk, Interop&lt;br /&gt;
|-&lt;br /&gt;
| CSV || &amp;lt;code&amp;gt;csv&amp;lt;/code&amp;gt; (+ serde) || tabellarisch || Tabellen, Datenexport&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3. Reine Datei-I/O ohne serde ===&lt;br /&gt;
&lt;br /&gt;
Für sehr einfache Fälle genügt &amp;lt;code&amp;gt;std::fs&amp;lt;/code&amp;gt; direkt, z. B. um Text- oder Binärdaten zu schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use std::fs::File;&lt;br /&gt;
use std::io::Write;&lt;br /&gt;
&lt;br /&gt;
fn schreiben() -&amp;gt; std::io::Result&amp;lt;()&amp;gt; {&lt;br /&gt;
    let mut datei = File::create(&amp;quot;wissen.txt&amp;quot;)?;&lt;br /&gt;
    datei.write_all(b&amp;quot;Wichtige Information&amp;quot;)?;&lt;br /&gt;
    Ok(())&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für strukturierte Binärdaten kann &amp;lt;code&amp;gt;std::io::Read&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Write&amp;lt;/code&amp;gt; zusammen mit Byte-Konvertierungen (&amp;lt;code&amp;gt;to_le_bytes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;from_le_bytes&amp;lt;/code&amp;gt;) genutzt werden – das ist aber meist unnötig, da &amp;lt;code&amp;gt;bincode&amp;lt;/code&amp;gt; diese Arbeit übernimmt.&lt;br /&gt;
&lt;br /&gt;
=== 4. Eingebettete Key-Value-Datenbanken ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten häufig aktualisiert werden und nicht die ganze Datei neu geschrieben werden soll, eignen sich eingebettete Datenbanken:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;sled&amp;#039;&amp;#039;&amp;#039; – reine Rust-Implementierung, transaktional, sehr einfache API&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rocksdb&amp;#039;&amp;#039;&amp;#039; (Bindings zu Facebooks RocksDB) – sehr performant, C++-Unterbau&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;redb&amp;#039;&amp;#039;&amp;#039; – reine Rust-Implementierung, ACID, embedded&lt;br /&gt;
&lt;br /&gt;
Beispiel mit &amp;#039;&amp;#039;&amp;#039;sled&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let db = sled::open(&amp;quot;meine_datenbank&amp;quot;)?;&lt;br /&gt;
db.insert(b&amp;quot;schluessel&amp;quot;, b&amp;quot;wert&amp;quot;)?;&lt;br /&gt;
let wert = db.get(b&amp;quot;schluessel&amp;quot;)?;&lt;br /&gt;
db.flush()?;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kombiniert man &amp;lt;code&amp;gt;sled&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;serde&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;bincode&amp;lt;/code&amp;gt;, lassen sich ganze Structs unter einem Schlüssel speichern:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let bytes = bincode::serialize(&amp;amp;notiz).unwrap();&lt;br /&gt;
db.insert(notiz.id.to_be_bytes(), bytes)?;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Relationale Datenbanken ===&lt;br /&gt;
&lt;br /&gt;
Für komplexes &amp;quot;Wissen&amp;quot; mit Beziehungen, Abfragen und mehreren Nutzern bieten sich klassische SQL-Datenbanken an.&lt;br /&gt;
&lt;br /&gt;
==== SQLite (lokal, dateibasiert) ====&lt;br /&gt;
&lt;br /&gt;
Crate: &amp;lt;code&amp;gt;rusqlite&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let conn = rusqlite::Connection::open(&amp;quot;wissen.db&amp;quot;)?;&lt;br /&gt;
conn.execute(&lt;br /&gt;
    &amp;quot;CREATE TABLE IF NOT EXISTS notiz (&lt;br /&gt;
        id INTEGER PRIMARY KEY,&lt;br /&gt;
        titel TEXT NOT NULL,&lt;br /&gt;
        inhalt TEXT NOT NULL&lt;br /&gt;
    )&amp;quot;,&lt;br /&gt;
    [],&lt;br /&gt;
)?;&lt;br /&gt;
conn.execute(&lt;br /&gt;
    &amp;quot;INSERT INTO notiz (titel, inhalt) VALUES (?1, ?2)&amp;quot;,&lt;br /&gt;
    rusqlite::params![&amp;quot;Titel&amp;quot;, &amp;quot;Inhalt&amp;quot;],&lt;br /&gt;
)?;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sqlx (async, mehrere Datenbanken) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sqlx&amp;lt;/code&amp;gt; unterstützt PostgreSQL, MySQL und SQLite mit asynchronem Zugriff und prüft SQL-Abfragen teils schon zur Kompilierzeit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
let pool = sqlx::SqlitePool::connect(&amp;quot;sqlite://wissen.db&amp;quot;).await?;&lt;br /&gt;
sqlx::query(&amp;quot;INSERT INTO notiz (titel, inhalt) VALUES (?, ?)&amp;quot;)&lt;br /&gt;
    .bind(&amp;quot;Titel&amp;quot;)&lt;br /&gt;
    .bind(&amp;quot;Inhalt&amp;quot;)&lt;br /&gt;
    .execute(&amp;amp;pool)&lt;br /&gt;
    .await?;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== diesel (ORM) ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;diesel&amp;lt;/code&amp;gt; ist ein vollwertiges, synchrones ORM mit Migrationstooling und typsicheren Query-Buildern – geeignet für größere Anwendungen mit stabilem Schema.&lt;br /&gt;
&lt;br /&gt;
=== 6. Auswahlkriterien ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Anforderung !! Empfehlung&lt;br /&gt;
|-&lt;br /&gt;
| Einfache Konfiguration || TOML-Datei + serde&lt;br /&gt;
|-&lt;br /&gt;
| Ein einzelnes Objekt/Dokument || JSON-Datei + serde_json&lt;br /&gt;
|-&lt;br /&gt;
| Viele kleine Schreibzugriffe, kein SQL nötig || sled / redb (Key-Value)&lt;br /&gt;
|-&lt;br /&gt;
| Abfragen, Beziehungen, mehrere Tabellen || SQLite via rusqlite/sqlx, ggf. diesel&lt;br /&gt;
|-&lt;br /&gt;
| Netzwerk-Datenbank, mehrere Clients || PostgreSQL/MySQL via sqlx oder diesel&lt;br /&gt;
|-&lt;br /&gt;
| Maximale Geschwindigkeit, keine Lesbarkeit nötig || bincode + Datei oder Key-Value-Store&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 7. Fehlerbehandlung ===&lt;br /&gt;
&lt;br /&gt;
Alle I/O- und Datenbankoperationen in Rust liefern &amp;lt;code&amp;gt;Result&amp;lt;/code&amp;gt; zurück. Für Anwendungen empfiehlt sich eine zentrale Fehlerbehandlung, z. B. mit den Crates &amp;#039;&amp;#039;&amp;#039;thiserror&amp;#039;&amp;#039;&amp;#039; (für eigene Fehlertypen) oder &amp;#039;&amp;#039;&amp;#039;anyhow&amp;#039;&amp;#039;&amp;#039; (für einfache Fehlerweitergabe):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fn laden() -&amp;gt; anyhow::Result&amp;lt;Notiz&amp;gt; {&lt;br /&gt;
    let text = std::fs::read_to_string(&amp;quot;notiz.json&amp;quot;)?;&lt;br /&gt;
    let notiz = serde_json::from_str(&amp;amp;text)?;&lt;br /&gt;
    Ok(notiz)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8. Zusammenfassung ===&lt;br /&gt;
&lt;br /&gt;
* Datenstrukturen mit &amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; modellieren.&lt;br /&gt;
* Mit &amp;#039;&amp;#039;&amp;#039;serde&amp;#039;&amp;#039;&amp;#039; in ein passendes Format serialisieren (JSON/TOML/YAML für Lesbarkeit, bincode für Performance).&lt;br /&gt;
* Für einfache Fälle reichen Dateien (&amp;lt;code&amp;gt;std::fs&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Für häufige Änderungen: eingebettete Key-Value-Stores wie &amp;#039;&amp;#039;&amp;#039;sled&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;redb&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Für komplexe Abfragen und Beziehungen: relationale Datenbanken über &amp;#039;&amp;#039;&amp;#039;rusqlite&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;sqlx&amp;#039;&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;&amp;#039;diesel&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Fehlerbehandlung zentral mit &amp;#039;&amp;#039;&amp;#039;anyhow&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;thiserror&amp;#039;&amp;#039;&amp;#039; organisieren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Rust]]&lt;br /&gt;
[[Kategorie:Datenspeicherung]]&lt;/div&gt;</summary>
		<author><name>Thorsten</name></author>
	</entry>
</feed>