mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-06-26 16:26:37 +02:00
9.1 KiB
9.1 KiB
Continuwuity Database Mermaid Diagrams
This document contains visual representations of the Continuwuity database schema using Mermaid diagrams.
1. Core Event Storage Architecture
graph TD
A[Matrix Event ID<br/>48 bytes] --> B[eventid_shorteventid]
B --> C[Short Event ID<br/>8 bytes]
C --> D[shorteventid_eventid]
D --> A
A --> E[eventid_pduid]
E --> F[PDU ID<br/>16 bytes]
F --> G[pduid_pdu<br/>Main Event Storage]
A --> H[eventid_outlierpdu<br/>Outlier Events]
C --> I[shorteventid_authchain<br/>Authorization Chains]
C --> J[shorteventid_shortstatehash<br/>Event → State Mapping]
G -.->|Shared Cache| H
style G fill:#e1f5fe
style H fill:#e1f5fe
style A fill:#fff3e0
style C fill:#f3e5f5
2. Room State Management System
graph TD
A[Room State Key] --> B[statekey_shortstatekey]
B --> C[Short State Key<br/>8 bytes]
C --> D[shortstatekey_statekey]
D --> A
E[Full State Hash] --> F[statehash_shortstatehash]
F --> G[Short State Hash<br/>8 bytes]
G --> H[shortstatehash_statediff<br/>State Differences]
G --> I[roomid_shortstatehash<br/>Current Room State]
G --> J[roomsynctoken_shortstatehash<br/>Sync Token Mapping]
K[Room ID] --> I
L[Sync Token] --> J
style G fill:#e8f5e8
style I fill:#fff3e0
style J fill:#f0f4ff
3. User Authentication and Identity Flow
graph TD
A[User ID] --> B[userid_password<br/>Password Hashes]
A --> C[userid_displayname]
A --> D[userid_avatarurl]
D --> E[userid_blurhash]
A --> F[useridprofilekey_value<br/>Custom Profile]
G[Access Token] --> H[token_userdeviceid]
H --> I[User + Device ID]
I --> J[userdeviceid_token]
J --> G
I --> K[userdeviceid_metadata<br/>Device Info]
I --> L[userdevicesessionid_uiaainfo<br/>Auth Sessions]
I --> M[userdevicetxnid_response<br/>Transaction Cache]
N[OpenID Token] --> O[openidtoken_expiresatuserid]
P[Login Token] --> Q[logintoken_expiresatuserid]
style H fill:#e1f5fe
style J fill:#e1f5fe
style B fill:#ffebee
4. Room Membership Bidirectional System
graph TD
A[Room ID + User ID] --> B[roomuserid_joined<br/>Room → User View]
C[User ID + Room ID] --> D[userroomid_joined<br/>User → Room View]
B -.->|Bidirectional| D
A --> E[roomuserid_invitecount]
C --> F[userroomid_invitestate]
E -.->|Related| F
A --> G[roomuserid_leftcount]
C --> H[userroomid_leftstate]
G -.->|Related| H
A --> I[roomuserid_knockedcount]
C --> J[userroomid_knockedstate]
I -.->|Related| J
K[Room ID] --> L[roomid_joinedcount<br/>Total Joined]
K --> M[roomid_invitedcount<br/>Total Invited]
N[Historical] --> O[roomuseroncejoinedids<br/>Ever Joined Tracking]
style B fill:#e8f5e8
style D fill:#e8f5e8
style L fill:#fff3e0
style M fill:#fff3e0
5. Cryptography and Key Management Chain
graph TD
A[User ID] --> B[userid_devicelistversion<br/>Device List Changes]
A --> C[userid_masterkeyid<br/>Master Signing Key]
A --> D[userid_selfsigningkeyid<br/>Self Signing Key]
A --> E[userid_usersigningkeyid<br/>User Signing Key]
F[Key ID] --> G[keyid_key<br/>Actual Keys]
C --> G
D --> G
E --> G
H[Key Change ID] --> I[keychangeid_userid<br/>Change Notifications]
J[One-Time Key ID] --> K[onetimekeyid_onetimekeys<br/>OTK Storage]
A --> L[userid_lastonetimekeyupdate<br/>Last OTK Update]
M[Backup ID] --> N[backupid_algorithm<br/>Backup Algorithm]
M --> O[backupid_etag<br/>Backup Versioning]
P[Backup Key ID] --> Q[backupkeyid_backup<br/>Backed Up Keys]
style G fill:#e1f5fe
style I fill:#fff3e0
style K fill:#f3e5f5
style Q fill:#e8f5e8
6. Federation and Server Communication
graph TD
A[Server Name] --> B[servername_destination<br/>Cached Destinations]
A --> C[servername_override<br/>Cached Overrides]
A --> D[server_signingkeys<br/>Federation Keys]
A --> E[servername_educount<br/>EDU Counters]
F[Server + Event] --> G[servernameevent_data<br/>Server Events]
H[Server Current] --> I[servercurrentevent_data<br/>Current State]
J[Room ID] --> K[roomserverids<br/>Room → Servers]
L[Server Name] --> M[serverroomids<br/>Server → Rooms]
K -.->|Bidirectional| M
N[Room ID] --> O[roomid_inviteviaservers<br/>Invitation Routing]
style B fill:#e1f5fe
style C fill:#e1f5fe
style K fill:#e8f5e8
style M fill:#e8f5e8
7. Push Notifications and Read Tracking
graph TD
A[Sender Key] --> B[senderkey_pusher<br/>Push Endpoints]
C[Push Key] --> D[pushkey_deviceid<br/>Device Mapping]
B -.->|Related| D
E[Read Receipt ID] --> F[readreceiptid_readreceipt<br/>Public Receipts]
G[Room + User] --> H[roomuserid_privateread<br/>Private Read Markers]
G --> I[roomuserid_lastprivatereadupdate<br/>Update Timestamps]
J[User + Room] --> K[userroomid_highlightcount<br/>Mention Count]
J --> L[userroomid_notificationcount<br/>Notification Count]
style F fill:#e8f5e8
style H fill:#f3e5f5
style K fill:#fff3e0
style L fill:#fff3e0
8. Media and Content Management
graph TD
A[Media ID] --> B[mediaid_file<br/>File Metadata]
A --> C[mediaid_user<br/>Uploader Tracking]
B -.->|Related| C
D[URL] --> E[url_previews<br/>Preview Cache]
F[User ID] --> G[userfilterid_filter<br/>Sync Filters]
H[Lazy Load] --> I[lazyloadedids<br/>Member Event Tracking]
style B fill:#e1f5fe
style C fill:#e1f5fe
style E fill:#f0f4ff
9. Account Data and Presence System
graph TD
A[Room + User + Type] --> B[roomusertype_roomuserdataid<br/>Account Data Index]
B --> C[Room User Data ID]
C --> D[roomuserdataid_accountdata<br/>Actual Account Data]
E[User ID] --> F[userid_presenceid<br/>Presence Mapping]
F --> G[Presence ID]
G --> H[presenceid_presence<br/>Presence Data]
I[To-Device ID] --> J[todeviceid_events<br/>Device Messages]
style D fill:#e8f5e8
style H fill:#f3e5f5
style J fill:#fff3e0
10. Global Configuration and Access Control
graph TD
A[Global Config] --> B[global<br/>Server Settings]
C[Room Categories] --> D[publicroomids<br/>Public Rooms]
C --> E[bannedroomids<br/>Banned Rooms]
C --> F[disabledroomids<br/>Disabled Rooms]
G[App Service ID] --> H[id_appserviceregistrations<br/>Application Services]
I[Token Management] --> J[tokenids<br/>Token Allocation]
K[Relations] --> L[tofrom_relation<br/>Event Relations]
K --> M[threadid_userids<br/>Thread Participants]
K --> N[referencedevents<br/>Referenced Events]
K --> O[softfailedeventids<br/>Failed Events]
style B fill:#e1f5fe
style D fill:#e8f5e8
style E fill:#ffebee
style F fill:#ffebee
11. Complete System Overview
graph TB
subgraph "Identity Management"
UI[User Identity]
UA[User Auth]
UD[User Devices]
UP[User Profile]
end
subgraph "Event Storage"
ES[Event Storage]
EID[Event ID Mapping]
EO[Outlier Events]
end
subgraph "Room Management"
RS[Room State]
RM[Room Membership]
RMeta[Room Metadata]
end
subgraph "Cryptography"
DK[Device Keys]
CS[Cross Signing]
KB[Key Backups]
end
subgraph "Federation"
FS[Federation Servers]
FK[Federation Keys]
FE[Federation Events]
end
subgraph "Communication"
PUSH[Push Notifications]
RT[Read Tracking]
DM[Device Messages]
end
subgraph "Content"
MC[Media Content]
UP2[URL Previews]
AD[Account Data]
end
UI --> UA
UA --> UD
UI --> UP
ES --> EID
ES --> EO
EID --> RS
RS --> RM
RM --> RMeta
UD --> DK
DK --> CS
CS --> KB
RM --> FS
FS --> FK
FK --> FE
UD --> PUSH
RM --> RT
UD --> DM
UI --> MC
MC --> UP2
UI --> AD
style UI fill:#e8f5e8
style ES fill:#e1f5fe
style RS fill:#f3e5f5
style DK fill:#fff3e0
style FS fill:#f0f4ff
Diagram Legend
- Blue boxes (
#e1f5fe
): Core storage tables - Green boxes (
#e8f5e8
): Membership and relationship tables - Purple boxes (
#f3e5f5
): ID mapping and compression tables - Orange boxes (
#fff3e0
): Count and metadata tables - Light blue boxes (
#f0f4ff
): Sync and federation tables - Red boxes (
#ffebee
): Access control and security tables - Solid arrows: Direct relationships
- Dotted arrows: Bidirectional or related tables
- Shared Cache notation: Tables that share memory pools
These diagrams show how Continuwuity's 89 database tables interconnect to provide a complete Matrix homeserver implementation with optimized storage patterns and efficient relationship management.