Lots of changes to the cmap stuff

This commit is contained in:
2026-08-22 13:51:15 +02:00
parent 63b7ca0853
commit 20c1584016
17 changed files with 3105 additions and 204 deletions
+5 -4
View File
@@ -16,7 +16,7 @@ De database bevat zowel de huidige toestand als de auditgeschiedenis. De browser
| `attachments` | Metadata en volledige binaire inhoud van uploads |
| `attachment_references` | Huidige en historische verwijzingen vanuit paginaversies |
| `concept_maps` | Actuele titel, JSONB-document en versieteller per CMap |
| `concept_map_versions` | Volledige onveranderlijke CMap-snapshots |
| `concept_map_versions` | Expliciete CMap-snapshots en maximaal vijf handmatige opslagversies per CMap |
| `password_reset_tokens` | Gehashte, tijdelijke en eenmalige herstelcodes |
| `wiki_settings` | Beheerinstellingen, momenteel vooral e-mail |
| `wiki_schema` | Geïnstalleerde migratieversie |
@@ -39,13 +39,13 @@ Een paginaopslag is één atomaire transactie:
6. Vervang huidige bijlageverwijzingen en leg historische verwijzingen voor de nieuwe versie vast.
7. Commit alles, of niets.
Een CMap-opslag volgt hetzelfde kernpatroon: rij vergrendelen, versienummer vergelijken, actuele JSONB bijwerken en dezelfde volledige toestand aan `concept_map_versions` toevoegen.
Een CMap-opslag volgt voor de actuele projectie hetzelfde kernpatroon: rij vergrendelen, versienummer vergelijken en actuele JSONB bijwerken. Autosave verhoogt wel het optimistische versienummer, maar maakt geen historieregel. Een expliciete opslag voegt een volledige toestand aan `concept_map_versions` toe en verwijdert oudere handmatige versies boven de grens van vijf. Benoemde snapshots vallen niet onder die grens.
## Waarom volledige snapshots
Volledige snapshots zijn eenvoudig te begrijpen, herstellen en vergelijken. Er is geen keten van patches nodig om versie 37 te reconstrueren en een defecte diff kan de historie niet onleesbaar maken. Voor de verwachte wikiomvang is deze eenvoud belangrijker dan maximale opslagcompactheid.
De prijs is lineaire databasegroei met het aantal versies maal de documentgrootte. Vooral autosave van grote CMaps kan daardoor op termijn veel JSONB opslaan. Bewaarbeleid of deduplicatie hoort pas te worden ontworpen nadat echte datagroei is gemeten; zie [Verwachte performance](racket-wiki:performance).
De prijs is lineaire databasegroei met het aantal versies maal de documentgrootte. Voor pagina's en benoemde CMap-snapshots is dat bewust; CMap-autosaves zijn daarom uitgesloten van historie en handmatige CMap-opslag is begrensd op vijf versies. Zie [Verwachte performance](racket-wiki:performance).
## Afgeleide gegevens
@@ -75,7 +75,8 @@ Een nieuw schema vereist:
De volgende regels mogen niet alleen in de browser staan:
- iedere actuele versie heeft een overeenkomstige onveranderlijke snapshot;
- iedere actuele paginaversie heeft een overeenkomstige onveranderlijke snapshot;
- CMap-autosave wijzigt alleen de actuele projectie; CMap-historie bevat alleen snapshots en maximaal vijf handmatige versies;
- versienummers nemen per object strikt toe;
- een stale editor overschrijft geen nieuwere toestand;
- e-mailadressen zijn hoofdletterongevoelig uniek wanneer ingevuld;