fix(docs/storage): resolve FLAW-02, remove unused docDir and update documentation for pure database architecture
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 39s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 39s
This commit is contained in:
1 parent
3480859d8a
commit
0bdeb5f320
7 files changed
+42
-52
No files matched your search
+20
-17
@@ -1,6 +1,6 @@
|
||||
# 📝 Kernmodul 3: Workspace Outliner-Engine, Wiki-Links & Disk-Sync
|
||||
# 📝 Kernmodul 3: Workspace Outliner-Engine, Wiki-Links & Pure-DB Storage
|
||||
|
||||
Der MindSift Workspace ([`WorkspaceView.tsx`](../../frontend/src/features/workspace/WorkspaceView.tsx)) kombiniert ein **hierarchisches Bullet-Point Notizsystem (inspiriert von Logseq)** mit einem **persönlichen Markdown-Wiki** und einem **globalen To-Do Rollup Dashboard**.
|
||||
Der MindSift Workspace ([`WorkspaceView.tsx`](../../frontend/src/features/workspace/WorkspaceView.tsx)) kombiniert ein **hierarchisches Bullet-Point Notizsystem (inspiriert von Logseq)** mit einem **persönlichen Wiki** und einem **globalen To-Do Rollup Dashboard**.
|
||||
|
||||
---
|
||||
|
||||
@@ -46,30 +46,33 @@ Der Bullet-Dot dient gleichzeitig als Drag-Anfasser. Wird ein Block verschoben,
|
||||
|
||||
---
|
||||
|
||||
## 💾 3. Dual-Storage: Database-First & Disk-Mirroring
|
||||
## 💾 3. Pure-Database Architecture (Keine MD-Dateien auf Platte)
|
||||
|
||||
MindSift löst das Dilemma zwischen schneller relationaler Abfrage und portabler Dateispeicherung durch ein **synchrones Dual-Storage-Modell**:
|
||||
MindSift speichert Notizen und Outliner-Bäume **zu 100% relational in SQLite**. Es werden bewusst **keine Markdown-Dateien auf dem Dateisystem** abgelegt:
|
||||
|
||||
```
|
||||
Client (Block-Editor)
|
||||
│ PATCH /api/v1/documents/:id/blocks
|
||||
│ PUT /api/v1/documents/:id/blocks (oder WebSocket)
|
||||
▼
|
||||
Backend Engine
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ 1. Transaktion in SQLite (document_blocks) │
|
||||
│ -> Sort-Order, Content, Level, Checked │
|
||||
│ 2. Volltext-Generierung (Markdown-String) │
|
||||
│ 3. Schreiben auf Disk (/data/workspace/...) │
|
||||
│ Atomare Transaktion in SQLite: │
|
||||
│ 1. DELETE FROM document_blocks WHERE doc_id │
|
||||
│ 2. Batch INSERT der Blöcke: │
|
||||
│ -> id, doc_id, content, level, checked, │
|
||||
│ sort_order, collapsed │
|
||||
│ 3. WebSocket Broadcast an Raum (doc:id) │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
1. **Präzision & Geschwindigkeit (SQLite):**
|
||||
- Jeder Block besitzt eine eindeutige ID (`blk_...`) und eine Gleitkomma-Reihenfolge (`sort_order REAL`).
|
||||
- Schnelle Status-Updates (z.B. Checkbox abhaken) schreiben nur genau eine Zeile in die Datenbank.
|
||||
2. **Datensouveränität & Portabilität (Disk-Mirror):**
|
||||
- Zeitgleich spiegelt der Server das Dokument als Standard-`.md`-Datei unter `/data/workspace/<user_id>/<ordner>/<dateiname>.md`.
|
||||
- Einrückungen werden nach dem 2-Leerzeichen-Standard (` - [ ] `) formatiert.
|
||||
- Administratoren können das Verzeichnis jederzeit mit externen Werkzeugen (Obsidian, Logseq, Git, rsync) sichern.
|
||||
### Vorteile der reinen Datenbank-Architektur
|
||||
1. **Kein Dual-Storage & kein Drift:**
|
||||
- Keine Inkonsistenzen zwischen Festplattendateien und Datenbankzeilen.
|
||||
- Keine Dateisystem-Sperren, Race-Conditions oder Berechtigungskonflikte auf Betriebssystemebene.
|
||||
2. **Atomare Transaktionen (ACID):**
|
||||
- Strukturänderungen (Einrücken, Unterbaum verschieben, Blöcke löschen) sind atomar in einer Transaktion gekapselt.
|
||||
3. **Skalierbare Abfragen & Rollups:**
|
||||
- Aggregationen (wie das globale To-Do Dashboard oder Tag-Suchen) erfolgen mit hochoptimierten SQL-Abfragen über relationale Indizes, anstatt Hunderte `.md`-Dateien von der Festplatte parsen zu müssen.
|
||||
|
||||
---
|
||||
|
||||
@@ -79,4 +82,4 @@ Client (Block-Editor)
|
||||
- Scannt in Echtzeit alle unvollendeten `- [ ] ` Checkboxen über alle Ordner und Notizen hinweg.
|
||||
- Übersichtliche Gruppierung nach **Ordner ➔ Dokument ➔ Aufgabe**.
|
||||
- **Ordner-Filter:** Klick auf einen Ordner isoliert nur dessen Aufgaben für fokussiertes Arbeiten.
|
||||
- **2-Wege-Live-Sync:** Wird eine Checkbox im Rollup abgehakt, wird der Block in SQLite sofort auf `checked = 1` aktualisiert und die physische `.md`-Datei synchronisiert.
|
||||
- **2-Wege-Live-Sync:** Wird eine Checkbox im Rollup abgehakt, wird der Block in SQLite sofort auf `checked = 1` aktualisiert und via WebSocket an alle aktiven Clients gebroadcastet.
|
||||
Reference in new issue
Block a user